{ "cells": [ { "cell_type": "markdown", "id": "bb36bb97-3d3d-4c24-9d96-c7d4546c97c6", "metadata": {}, "source": [ "## TUBAF data\n", "\n", "The data from several experimental campaigns of the [TU Bergakademie Freiberg (TUBAF)](https://tu-freiberg.de/fakult3/ibf/bodenphysik-und-oekohydrologie) was curated within a dissertation thesis and is available in differing data structures from the zenodo publication [10.5281/zenodo.6654150](https://doi.org/10.5281/zenodo.6654150).\n", "\n", "- One structure holds the relevant data in tabular form, within three tables\n", "- Units, methods and concepts were manually assigned\n", "- A pipeline was manually created to transform the data in a machine readable data structure" ] }, { "cell_type": "code", "execution_count": 5, "id": "a0eaf39a-b2d6-4fb7-8412-9dd95801f437", "metadata": {}, "outputs": [], "source": [ "from dataset_loader import *\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 6, "id": "5d970332-6acc-420b-9528-c3e0c944fa95", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'resources': [{'name': 'meta',\n", " 'type': 'table',\n", " 'path': 'tables/meta.csv',\n", " 'scheme': 'file',\n", " 'format': 'csv',\n", " 'mediatype': 'text/csv',\n", " 'encoding': 'utf-8',\n", " 'schema': {'fields': [{'name': 'soilloss',\n", " 'type': 'number',\n", " 'unit': 'kg',\n", " 'method': 'cumulative soil loss of '\n", " 'whole experiment',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_8dab65bc'},\n", " {'name': 'endinfil',\n", " 'type': 'number',\n", " 'concept': '',\n", " 'unit': 'mm/min',\n", " 'method': 'own:DiffRainfall-Runoffatsteadystate'},\n", " {'name': 'duration',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_7778',\n", " 'unit': 's',\n", " 'method': 'own:stopwatch'},\n", " {'name': 'cumq',\n", " 'type': 'number',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_6697',\n", " 'unit': '',\n", " 'method': 'own:SumOfRunoffTimeseries'},\n", " {'name': 'rough',\n", " 'type': 'number',\n", " 'concept': '',\n", " 'unit': '',\n", " 'method': 'own:derivedOfRunofVelocitySlopeAndRunoffVolume'},\n", " {'name': 'bulk',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_7167',\n", " 'unit': 'kg/m^3',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysis'},\n", " {'name': 'corg',\n", " 'type': 'number',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_389fe908',\n", " 'unit': 'M-%',\n", " 'method': 'own:CombustionDINXXXX'},\n", " {'name': 'cSa',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_c03927e1',\n", " 'unit': 'M-%',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysisWithoutDispergation'},\n", " {'name': 'mSa',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_7b64842d',\n", " 'unit': 'M-%',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysisWithoutDispergation'},\n", " {'name': 'fSa',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_a91f25d6',\n", " 'unit': 'M-%',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysisWithoutDispergation'},\n", " {'name': 'cSi',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_c1b90f01',\n", " 'unit': 'M-%',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysisWithoutDispergation'},\n", " {'name': 'mSi',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_090f427c',\n", " 'unit': 'M-%',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysisWithoutDispergation'},\n", " {'name': 'fSi',\n", " 'type': 'integer',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_0f15e6e6',\n", " 'unit': 'M-%',\n", " 'method': 'own:SoilCoreSamplingAndLabAnalysisWithoutDispergation'},\n", " {'name': 'slope',\n", " 'type': 'number',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_fa256eab',\n", " 'unit': 'degree',\n", " 'method': 'own:waterscale'},\n", " {'name': 'plotwidth',\n", " 'type': 'integer',\n", " 'concept': ['http://aims.fao.org/aos/agrovoc/c_36811',\n", " 'http://aims.fao.org/aos/agrovoc/c_8387'],\n", " 'unit': 'm',\n", " 'method': 'own:SetByDesign'},\n", " {'name': 'plotlength',\n", " 'type': 'integer',\n", " 'concept': ['http://aims.fao.org/aos/agrovoc/c_36811',\n", " 'http://aims.fao.org/aos/agrovoc/c_4260'],\n", " 'unit': 'm',\n", " 'method': 'own:SetByDesign'},\n", " {'name': 'BBCH', 'type': 'integer'},\n", " {'name': 'crop', 'type': 'string'},\n", " {'name': 'treat', 'type': 'string'},\n", " {'name': 'cover', 'type': 'integer'},\n", " {'name': 'moist',\n", " 'type': 'number',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_4886',\n", " 'unit': 'percent',\n", " 'method': 'own:SoilCoreSamplingWetWeightingDryWeighting'},\n", " {'name': 'runtype', 'type': 'integer'},\n", " {'name': 'project', 'type': 'string'},\n", " {'name': 'No',\n", " 'type': 'string',\n", " 'concept': 'own:primaryID',\n", " 'unit': '',\n", " 'method': 'own:defined'},\n", " {'name': 'plot', 'type': 'integer'},\n", " {'name': 'bulk.run', 'type': 'integer'},\n", " {'name': 'CLAY', 'type': 'integer'},\n", " {'name': 'SILT', 'type': 'integer'},\n", " {'name': 'SAND', 'type': 'integer'},\n", " {'name': 'KA5class', 'type': 'string'},\n", " {'name': 'KA5main', 'type': 'string'},\n", " {'name': 'D',\n", " 'type': 'number',\n", " 'concept': 'mean grain size diameter',\n", " 'unit': 'mm',\n", " 'method': 'log normalized average '\n", " '(Campbell 1985)'},\n", " {'name': 'SigP',\n", " 'type': 'number',\n", " 'concept': 'Standard deviation of mean '\n", " 'grain size diameter',\n", " 'unit': 'mm',\n", " 'method': 'Standard deviation of log '\n", " 'normalized average (Campbell '\n", " '1985)'},\n", " {'name': 'crop_original',\n", " 'type': 'string',\n", " 'concept': 'own:ForeignKey',\n", " 'unit': '',\n", " 'method': 'own:defined'},\n", " {'name': 'lat', 'type': 'number'},\n", " {'name': 'lon', 'type': 'number'}],\n", " 'missingValues': ['NA', ''],\n", " 'primaryKey': ['No'],\n", " 'foreignKeys': []}},\n", " {'name': 'time',\n", " 'type': 'table',\n", " 'path': 'tables/time.csv',\n", " 'scheme': 'file',\n", " 'format': 'csv',\n", " 'mediatype': 'text/csv',\n", " 'encoding': 'utf-8',\n", " 'schema': {'fields': [{'name': 'No',\n", " 'type': 'string',\n", " 'concept': 'own:ForeignKey',\n", " 'unit': '',\n", " 'method': 'own:defined'},\n", " {'name': 'time',\n", " 'type': 'integer',\n", " 'concept': 'time, timedelta',\n", " 'unit': 's',\n", " 'method': 'stopwatch'},\n", " {'name': 'runoffrate', 'type': 'number'},\n", " {'name': 'sedconc',\n", " 'type': 'number',\n", " 'concept': '',\n", " 'unit': 'g/l',\n", " 'method': 'sediment concentration '\n", " 'measured in runoff samples'},\n", " {'name': 'rainfall',\n", " 'type': 'number',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_36860',\n", " 'unit': 'm*m*m/s',\n", " 'method': 'own:rainfall intensity valid '\n", " 'in the preceding time '\n", " 'interval'},\n", " {'name': 'plotwidth',\n", " 'type': 'integer',\n", " 'concept': ['http://aims.fao.org/aos/agrovoc/c_36811',\n", " 'http://aims.fao.org/aos/agrovoc/c_8387'],\n", " 'unit': 'm',\n", " 'method': 'own:SetByDesign'},\n", " {'name': 'plotlength',\n", " 'type': 'integer',\n", " 'concept': ['http://aims.fao.org/aos/agrovoc/c_36811',\n", " 'http://aims.fao.org/aos/agrovoc/c_4260'],\n", " 'unit': 'm',\n", " 'method': 'own:SetByDesign'},\n", " {'name': 'overflow',\n", " 'type': 'boolean',\n", " 'concept': '',\n", " 'unit': '',\n", " 'method': 'Boolean indicator for '\n", " 'identification of '\n", " 'measurements taken in runoff '\n", " 'feeding phase.'}],\n", " 'missingValues': ['NA', ''],\n", " 'primaryKey': ['No', 'time'],\n", " 'foreignKeys': [{'fields': ['No'],\n", " 'reference': {'resource': 'meta',\n", " 'fields': ['No']}}]}}]}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TUBAF = load_sp_datapackage({\"sourcedir\": \"example_datasets/TUBAF/\"},'TUBAF')\n", "TUBAF" ] }, { "cell_type": "code", "execution_count": 7, "id": "c4cf8736-c247-4df3-b5ec-28587c744f5f", "metadata": {}, "outputs": [], "source": [ "templates = {\n", "'runoff_coefficient': {\n", " 'field':{\n", " 'concept': 'https://dbpedia.org/resource/Runoff_curve_number', # concept for \n", " 'unit': '[%]',\n", " 'method': 'df[\"runoff_coefficient\"] = round(df.Q_OF_mean_selected/ df.P_mean_selected * 100, 1)'},\n", " 'requires':\n", " [\n", " {'alternative_concept': 'https://dbpedia.org/resource/Runoff',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_35388',\n", " 'name': 'runoff_volume',\n", " 'unit': '[mm]',\n", " 'method': 'runoff_volume'\n", " },\n", " {'alternative_concept': 'https://dbpedia.org/resource/Rain',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_36860',\n", " 'name': 'rainfall_volume',\n", " 'unit': '[mm]',\n", " 'method': 'rainfall_volume'\n", " }\n", " ]\n", "},\n", "\n", "'runoff_volume': {\n", " 'target_concept': 'https://dbpedia.org/resource/Runoff',\n", " 'target_unit': '[mm]',\n", " 'target_method': 'df_target = df.pivot_table(values=[\"P_mean_selected\",\"Q_OF_mean_selected\"], columns=[\"Site_number\",\"Experiment_numbe\"], aggfunc=\"sum\", dropna=True)',\n", " 'requires':\n", " [\n", " {'concept': 'https://dbpedia.org/resource/Runoff',\n", " 'alternative_concept': 'http://aims.fao.org/aos/agrovoc/c_35388',\n", " 'name': 'runoff_rate',\n", " 'unit': '[mm]',\n", " },\n", " {'concept': 'http://aims.fao.org/aos/agrovoc/c_7778',\n", " 'name': 'duration',\n", " 'unit': '[mm]'\n", " }\n", " ]\n", "},\n", "\n", "'runoff_volume': {\n", " 'target_concept': 'https://dbpedia.org/resource/Runoff',\n", " 'target_unit': '[l]',\n", " 'target_method': 'runoff_volume = [sum_timesteps(\"ruoff_rate * duration\") for row in data.rows \"]', # we need to aggregate timesteps here\n", " 'requires':\n", " [\n", " {'concept': 'https://dbpedia.org/resource/Runoff',\n", " 'alternative_concept': 'http://aims.fao.org/aos/agrovoc/c_35388',\n", " 'name': 'runoff_rate',\n", " 'unit': '[l/s]',\n", " },\n", " {'concept': 'http://aims.fao.org/aos/agrovoc/c_7778',\n", " 'name': 'duration',\n", " 'unit': '[s]'\n", " }\n", " ]\n", "},\n", "\n", "'rainfall_volume': {\n", " 'target_concept': 'https://dbpedia.org/resource/Rain', \n", " 'target_unit': '[l]',\n", " 'target_method': 'ruoff_volume = [sum_timesteps(\"rainfall_rate * duration\", id) for id in data.ids \"]', # we need to aggregate timesteps here\n", " 'requires':\n", " [\n", " {'concept': 'https://dbpedia.org/resource/Rain',\n", " 'alternative_concept': 'http://aims.fao.org/aos/agrovoc/c_36860',\n", " 'name': 'rainfall_rate',\n", " 'unit': '[l/s]'\n", " },\n", " {'concept': 'http://aims.fao.org/aos/agrovoc/c_7778',\n", " 'name': 'duration',\n", " 'unit': '[s]'\n", " }\n", " ]\n", "}\n", "}\n", "#def sum_timesteps(operation, data):\n", "# ... see Jonas dissertation functions...{\n", "# rainfall https://github.com/jonaslenz/diss/blob/gitbook/database/hydraulic_func.R#L45-L59\n", "# runoff https://github.com/jonaslenz/diss/blob/gitbook/database/hydraulic_func.R#L29-L43" ] }, { "cell_type": "code", "execution_count": 8, "id": "23c4ccfa-89be-4fa7-ac42-8a17dd1bb5e5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'field': {'concept': 'https://dbpedia.org/resource/Runoff_curve_number', 'unit': '[%]', 'method': 'df[\"runoff_coefficient\"] = round(df.Q_OF_mean_selected/ df.P_mean_selected * 100, 1)'}, 'requires': [{'alternative_concept': 'https://dbpedia.org/resource/Runoff', 'concept': 'http://aims.fao.org/aos/agrovoc/c_35388', 'name': 'runoff_volume', 'unit': '[mm]', 'method': 'runoff_volume'}, {'alternative_concept': 'https://dbpedia.org/resource/Rain', 'concept': 'http://aims.fao.org/aos/agrovoc/c_36860', 'name': 'rainfall_volume', 'unit': '[mm]', 'method': 'rainfall_volume'}]}\n", "going deeper\n" ] }, { "data": { "text/plain": [ "{'resources': [{'name': 'time',\n", " 'type': 'table',\n", " 'data': [],\n", " 'scheme': '',\n", " 'format': 'inline',\n", " 'mediatype': 'text/csv',\n", " 'extrapaths': [],\n", " 'schema': {'fields': [{'name': 'No',\n", " 'type': 'string',\n", " 'concept': 'own:ForeignKey',\n", " 'unit': '',\n", " 'method': 'own:defined'},\n", " {'name': 'time',\n", " 'type': 'integer',\n", " 'concept': 'time, timedelta',\n", " 'unit': 's',\n", " 'method': 'stopwatch'},\n", " {'name': 'rainfall',\n", " 'type': 'number',\n", " 'concept': 'http://aims.fao.org/aos/agrovoc/c_36860',\n", " 'unit': 'm*m*m/s',\n", " 'method': 'own:rainfall intensity valid '\n", " 'in the preceding time '\n", " 'interval'}],\n", " 'missingValues': ['NA', ''],\n", " 'primaryKey': ['No', 'time'],\n", " 'foreignKeys': [{'fields': ['No'],\n", " 'reference': {'resource': 'meta',\n", " 'fields': ['No']}}]}}]}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = templates['runoff_coefficient']\n", "print(a)\n", "b = get_sp_data(TUBAF,\n", " fielddefinition=[\n", " a['field']\n", " ]\n", " )\n", "if b.resources == []:\n", " print('going deeper')\n", " b = get_sp_data(TUBAF,\n", " fielddefinition=[{'concept': x['concept']} for x in a['requires']]\n", " )\n", "b" ] }, { "cell_type": "code", "execution_count": 11, "id": "a6f2a09a-6a8e-47aa-ae2e-9bc2a20829b2", "metadata": {}, "outputs": [], "source": [ "a = get_sp_data(TUBAF,\n", " fielddefinition=[{'name': 'soilloss'}, {'name': 'rainfall'}]\n", " )\n", "view = merge_foreign_keys(a)\n", "for z in view.resources:\n", " z.open()\n", " z.close()\n", "b = view.resources[1].to_pandas()" ] }, { "cell_type": "code", "execution_count": 12, "id": "f00fbac7-119a-4a8f-b174-4d05ef7d751d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "No time\n", "102 1440 0.000002\n", " 1500 0.000002\n", " 1560 0.000002\n", " 1620 0.000002\n", " 1680 0.000002\n", "dtype: float64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mod = b.rainfall*b.soilloss\n", "mod.head()" ] }, { "cell_type": "code", "execution_count": 13, "id": "6e7c293f-1ba4-4541-a449-4c1753ee4aa8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "b.plot()" ] }, { "cell_type": "code", "execution_count": 17, "id": "8c01f633-83e7-4c9a-9781-a253aa84d145", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
runoffratesedconcrainfallplotwidthplotlengthoverflow
Notime
100.000000NaN0.000000222False
4200.000005NaN0.000011222False
4800.000010NaN0.000011222False
5400.000010NaN0.000011222False
6000.000011NaN0.000011222False
\n", "
" ], "text/plain": [ " runoffrate sedconc rainfall plotwidth plotlength overflow\n", "No time \n", "1 0 0.000000 NaN 0.000000 2 22 False\n", " 420 0.000005 NaN 0.000011 2 22 False\n", " 480 0.000010 NaN 0.000011 2 22 False\n", " 540 0.000010 NaN 0.000011 2 22 False\n", " 600 0.000011 NaN 0.000011 2 22 False" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TUBAF = load_sp_datapackage({\"sourcedir\": \"example_datasets/TUBAF/\"}, 'TUBAF')\n", "view_sp_resource(TUBAF.resources[0], fields = ['SigP'], row_filters = ['SigP >9', 'SigP < 12']).to_pandas()\n", "\n", "get_dataset_concepts(TUBAF)\n", "get_sp_data(TUBAF, fielddefinition=[{'name': 'SigP'}])\n", "view = merge_foreign_keys(\n", " get_sp_data(\n", " TUBAF,\n", " fielddefinition=[\n", " {'name': 'SigP',\n", " 'row_filters': ['No == \"8\"']\n", " },\n", " {'unit': 'g/l',\n", " 'row_filters': ['not sedconc == None', 'No == \"8\"']\n", " }\n", " ]\n", " )\n", " )\n", "\n", "view = get_sp_data(\n", " TUBAF,\n", " fielddefinition=[\n", " {'name': 'SigP',\n", " 'row_filters': ['SigP > 10']\n", " },\n", " {'unit': 'g/l',\n", " 'row_filters': ['not sedconc == None and sedconc >=300']\n", " }\n", " ]\n", " )\n", "\n", "\n", "view = merge_foreign_keys(\n", " get_sp_data(\n", " TUBAF,\n", " fielddefinition=[\n", " {'name': 'SigP',\n", " 'row_filters': ['No == \"8\"']\n", " },\n", " {'unit': 'g/l',\n", " 'row_filters': ['not sedconc == None', 'No == \"8\"']\n", " }\n", " ]\n", " )\n", " )\n", "\n", "try:\n", " view.extract()\n", "except:\n", " view.extract()\n", "\n", "# model requirements can be defined by row constraints\n", "#from frictionless import validate, checks, transform\n", "#validate(TUBAF.resources[0],\n", "# checks=[\n", "# checks.row_constraint(formula=\"fSi + mSi + cSi == SILT\"),\n", "# checks.row_constraint(formula=\"fSa + mSa + cSa == SAND\"),\n", "# checks.row_constraint(formula=\"SILT + SAND + CLAY == 100\")\n", "# ]\n", "# )\n", "TUBAF.resources[1].to_pandas().head()" ] }, { "cell_type": "code", "execution_count": null, "id": "133711c1-669a-485c-bc75-5eb0abb0b063", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.7" } }, "nbformat": 4, "nbformat_minor": 5 }