diff --git a/talks/Dkrz_User_Workshop/Figure_01.jpg b/talks/Dkrz_User_Workshop/Figure_01.jpg new file mode 100644 index 0000000..5731adc Binary files /dev/null and b/talks/Dkrz_User_Workshop/Figure_01.jpg differ diff --git a/talks/Dkrz_User_Workshop/Figure_02-a.jpg b/talks/Dkrz_User_Workshop/Figure_02-a.jpg new file mode 100644 index 0000000..3d542a7 Binary files /dev/null and b/talks/Dkrz_User_Workshop/Figure_02-a.jpg differ diff --git a/talks/Dkrz_User_Workshop/Figure_02.jpg b/talks/Dkrz_User_Workshop/Figure_02.jpg new file mode 100644 index 0000000..0b5199f Binary files /dev/null and b/talks/Dkrz_User_Workshop/Figure_02.jpg differ diff --git a/talks/Dkrz_User_Workshop/.ipynb_checkpoints/Freva-checkpoint.ipynb b/talks/Dkrz_User_Workshop/Freva.ipynb similarity index 82% rename from talks/Dkrz_User_Workshop/.ipynb_checkpoints/Freva-checkpoint.ipynb rename to talks/Dkrz_User_Workshop/Freva.ipynb index 5f4da3f..6397595 100644 --- a/talks/Dkrz_User_Workshop/.ipynb_checkpoints/Freva-checkpoint.ipynb +++ b/talks/Dkrz_User_Workshop/Freva.ipynb @@ -33,7 +33,7 @@ } }, "source": [ - "
by: Brian Lewis, Christopher Kadow, Etor Lucio Eceiza, Mahesh Ramadoss, Martin Bergemann and many others
" + "by: Brian Lewis, Christopher Kadow, Etor Lucio Eceiza, Andrej Fast, Martin Bergemann and many others
" ] }, { @@ -45,8 +45,8 @@ } }, "source": [ - "+ + `); diff --git a/talks/Dkrz_User_Workshop/screencast_2.webm b/talks/Dkrz_User_Workshop/screencast_2.webm index ed88a55..1a6a8a5 100644 Binary files a/talks/Dkrz_User_Workshop/screencast_2.webm and b/talks/Dkrz_User_Workshop/screencast_2.webm differ diff --git a/talks/GeoJson_Viewer/.ipynb_checkpoints/GeoJsonViewer-checkpoint.ipynb b/talks/GeoJson_Viewer/.ipynb_checkpoints/GeoJsonViewer-checkpoint.ipynb new file mode 100644 index 0000000..c5527fd --- /dev/null +++ b/talks/GeoJson_Viewer/.ipynb_checkpoints/GeoJsonViewer-checkpoint.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f066d572", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Geojson Viewer\n", + "A simple web based application that lets you *load* / *display* and *edit* geo reference data. " + ] + }, + { + "cell_type": "markdown", + "id": "07911151", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Requirements:\n", + "\n", + "- Upload GeoJSON files, containing geo-referenced features and their properties.\n", + "- Show uploaded features and their properties on a dynamic web map.\n", + "- Modify/*Add* existing properties for features shown on the map.\n", + "- Save updated features with their properties to GeoJson file." + ] + }, + { + "cell_type": "markdown", + "id": "f3014d1f", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Tech Stack\n", + "\n", + "Ploty Dash as framework. Why?\n", + "\n", + "- build upon `Plotly.js` 🡲 easy and fast react UI development\n", + " - easy to set up via `conda`\n", + " - front end included\n", + "- easy backend development using `@decorators`\n", + " - set up an working web application within couple of hours\n", + "- easy to extent via data driven tech stack \n", + " - pandas, plotly, etc" + ] + }, + { + "cell_type": "markdown", + "id": "635cd948", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Simple backend development\n", + "```python\n", + "\n", + "@app.callback(\n", + " Output(\"graph\", \"figure\"),\n", + " Input(\"column1\", \"value\"),\n", + " Input(\"table\", \"data\"),\n", + ")\n", + "def display_choropleth(\n", + " columns: list[str | None] | None,\n", + " table_data: list[dict[str, Any]],\n", + ") -> plotly.graph_objects.Figure:\n", + "\n", + " location, color = cast(list[str], columns)\n", + " data_frame = pandas.DataFrame(table_data).astype(geo_json_obj.dtypes)\n", + " fig = plotly.express.choropleth(\n", + " data_frame,\n", + " geojson=geojson[[color, location, \"geometry\"]].to_json(),\n", + " color=color,\n", + " locations=location,\n", + " color_continuous_scale=\"Viridis\",\n", + " featureidkey=f\"properties.{location}\",\n", + " )\n", + " fig.update_geos(projection_type=\"orthographic\", fitbounds=\"locations\")\n", + " return fig\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "ae834b6a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Features:\n", + "\n", + "- Easy to use tabbing layout\n", + "- Upload or use online geo reference data sources (geojson, shape, ...)\n", + "- Interactively display geo data on a map.\n", + "- Adjust/Reset data sources\n", + "- Download and save modified data to disk.\n", + "\n", + "## Droped Features\n", + "- Add existing columns\n", + " - tedious to add data by hand for many rows" + ] + }, + { + "cell_type": "markdown", + "id": "1e97fa54", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a59b4f1a", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/talks/GeoJson_Viewer/GeoJsonViewer.ipynb b/talks/GeoJson_Viewer/GeoJsonViewer.ipynb new file mode 100644 index 0000000..c5527fd --- /dev/null +++ b/talks/GeoJson_Viewer/GeoJsonViewer.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f066d572", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Geojson Viewer\n", + "A simple web based application that lets you *load* / *display* and *edit* geo reference data. " + ] + }, + { + "cell_type": "markdown", + "id": "07911151", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "Requirements:\n", + "\n", + "- Upload GeoJSON files, containing geo-referenced features and their properties.\n", + "- Show uploaded features and their properties on a dynamic web map.\n", + "- Modify/*Add* existing properties for features shown on the map.\n", + "- Save updated features with their properties to GeoJson file." + ] + }, + { + "cell_type": "markdown", + "id": "f3014d1f", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Tech Stack\n", + "\n", + "Ploty Dash as framework. Why?\n", + "\n", + "- build upon `Plotly.js` 🡲 easy and fast react UI development\n", + " - easy to set up via `conda`\n", + " - front end included\n", + "- easy backend development using `@decorators`\n", + " - set up an working web application within couple of hours\n", + "- easy to extent via data driven tech stack \n", + " - pandas, plotly, etc" + ] + }, + { + "cell_type": "markdown", + "id": "635cd948", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Example: Simple backend development\n", + "```python\n", + "\n", + "@app.callback(\n", + " Output(\"graph\", \"figure\"),\n", + " Input(\"column1\", \"value\"),\n", + " Input(\"table\", \"data\"),\n", + ")\n", + "def display_choropleth(\n", + " columns: list[str | None] | None,\n", + " table_data: list[dict[str, Any]],\n", + ") -> plotly.graph_objects.Figure:\n", + "\n", + " location, color = cast(list[str], columns)\n", + " data_frame = pandas.DataFrame(table_data).astype(geo_json_obj.dtypes)\n", + " fig = plotly.express.choropleth(\n", + " data_frame,\n", + " geojson=geojson[[color, location, \"geometry\"]].to_json(),\n", + " color=color,\n", + " locations=location,\n", + " color_continuous_scale=\"Viridis\",\n", + " featureidkey=f\"properties.{location}\",\n", + " )\n", + " fig.update_geos(projection_type=\"orthographic\", fitbounds=\"locations\")\n", + " return fig\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "ae834b6a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Features:\n", + "\n", + "- Easy to use tabbing layout\n", + "- Upload or use online geo reference data sources (geojson, shape, ...)\n", + "- Interactively display geo data on a map.\n", + "- Adjust/Reset data sources\n", + "- Download and save modified data to disk.\n", + "\n", + "## Droped Features\n", + "- Add existing columns\n", + " - tedious to add data by hand for many rows" + ] + }, + { + "cell_type": "markdown", + "id": "1e97fa54", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a59b4f1a", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/talks/GeoJson_Viewer/GeoJsonViewer.slides.html b/talks/GeoJson_Viewer/GeoJsonViewer.slides.html new file mode 100644 index 0000000..eb211e8 --- /dev/null +++ b/talks/GeoJson_Viewer/GeoJsonViewer.slides.html @@ -0,0 +1,14847 @@ + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +