├── 01_geospatial_data_workflow_stepbystep.ipynb ├── 02_geospatial_data_workflow_guided_challenge.ipynb ├── README.md ├── img ├── access_button.png ├── climate_graph_london.png ├── data_workflow.png ├── ecmwf.png ├── ecmwf_data.png ├── ecmwf_data_dimensions.png ├── global_anomaly_field.png ├── global_average.png ├── logos_combined.png ├── ogc_standards.jpg ├── processing_button.png ├── pydata.png └── visualisation_button.png └── jupyter_notebooks_for_geospatial_data_analysis_tutorial.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Pydata Tutorial 2017 - Jupyter Notebooks for Geospatial Data Analysis 2 | 3 | This tutorial was given during PyData London on 5 May 2017.
4 | 5 | Examples specifically from Climate Sciences show, how large volumes of geospatial data can be accessed processed and visualised on-demand, with the help of standardised web services.
6 | 7 | 8 | The tutorial can be followed interactively via 9 | https://jupyter.eofrom.space. 10 | 11 | 12 | UPDATE 2019: 13 | * the OGC service this tutorial gives as an example has unfortunately been switched off. However, the tutorial still gives an idea about how OGC WCS requests work. 14 | -------------------------------------------------------------------------------- /img/access_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/access_button.png -------------------------------------------------------------------------------- /img/climate_graph_london.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/climate_graph_london.png -------------------------------------------------------------------------------- /img/data_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/data_workflow.png -------------------------------------------------------------------------------- /img/ecmwf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/ecmwf.png -------------------------------------------------------------------------------- /img/ecmwf_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/ecmwf_data.png -------------------------------------------------------------------------------- /img/ecmwf_data_dimensions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/ecmwf_data_dimensions.png -------------------------------------------------------------------------------- /img/global_anomaly_field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/global_anomaly_field.png -------------------------------------------------------------------------------- /img/global_average.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/global_average.png -------------------------------------------------------------------------------- /img/logos_combined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/logos_combined.png -------------------------------------------------------------------------------- /img/ogc_standards.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/ogc_standards.jpg -------------------------------------------------------------------------------- /img/processing_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/processing_button.png -------------------------------------------------------------------------------- /img/pydata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/pydata.png -------------------------------------------------------------------------------- /img/visualisation_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwagemann/2017_pydata_tutorial/ea63b634a2c780a0afca2c38f4d785c098569111/img/visualisation_button.png -------------------------------------------------------------------------------- /jupyter_notebooks_for_geospatial_data_analysis_tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "\n", 10 | "


" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "# Jupyter Notebooks for Geospatial Data Analysis" 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "\n", 25 | "Tutorial created for [PyData London 2017](https://pydata.org/london2017/schedule/presentation/8/)
\n", 26 | "Friday, 05 May 2017, 12:15 - 13:50 | Dining Room, Bloomberg, London\n", 27 | "\n", 28 | "### Speakers\n", 29 | "[Julia Wagemann](https://pydata.org/london2017/speaker/profile/75/) - European Centre for Medium-Range Weather Forecasts
\n", 30 | "[Dr. Stephan Siemen](https://pydata.org/london2017/speaker/profile/229/) - European Centre for Medium-Range Weather Forecasts
\n", 31 | "\n", 32 | "### Access to tutorial material \n", 33 | "\n", 34 | "The tutorial material can be accessed via https://jupyter.eofrom.space.
\n", 35 | "You will need to log in with your GitHub credentials.\n", 36 | "
\n", 37 | "\n", 38 | "The notebooks are also on GitHub: https://github.com/JuliaWagemann/pydata_tutorial_2017\n", 39 | "\n", 40 | "\n", 41 | "### Don't forget to give feedback!\n", 42 | "\n", 43 | "Please give us [feedback](https://goo.gl/forms/XrNYo8Ci4snUL9Vl1) and let's us know if you liked the tutorial and in what areas we can do better. It takes less than 2 minutes. Thanks!" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "
" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "# Structure of this tutorial\n", 58 | "
\n", 59 | "\n", 60 | "|Time|Content|\n", 61 | "|---------|-----------|\n", 62 | "|12:15 -12:20 | Intro to tutorial and tutorial overview |\n", 63 | "| Optional | Short Intro to Jupyter Notebooks |\n", 64 | "|12:20 - 12:35 | [Intro to ECMWF data and the geospatial workflow in general](#intro-ecmwf) |\n", 65 | "|12:35 - 12:50 | [Part I: Geospatial data access](./01_geospatial_data_workflow_stepbystep.ipynb#geospatial_dataaccess) |\n", 66 | "|12:50 - 13:05 | [Part II: Geospatial data manipulation and analysis in Python](./01_geospatial_data_workflow_stepbystep.ipynb#geospatial_dataprocessing) |\n", 67 | "|13:05 - 13:15 | [Part III: Interactive data visualisation in Python](./01_geospatial_data_workflow_stepbystep.ipynb#geospatial_dataviz) |\n", 68 | "|13:15 - 13:45 | [Guided challenge](./02_geospatial_data_workflow_guided_challenge.ipynb):
Create your own geospatial data analysis workflow with Jupyter |" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "
" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "# Intro to ECMWF (open) data and the geospatial workflow in general" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "* [About ECMWF](#ecmwf)\n", 90 | "* [ECMWF (open) data](#ecmwf_data)\n", 91 | "* [Geospatial data workflow](#geospatial_data_workflow)" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": {}, 97 | "source": [ 98 | "### About ECMWF\n", 99 | "
\n", 100 | "![about_ecmwf](img/ecmwf.png)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "### ECMWF (open) data\n", 108 | "
\n", 109 | "\n", 110 | "![ecmwf_data](img/ecmwf_data.png)\n", 111 | "
\n", 112 | "\n", 113 | "\n", 114 | "#### ECMWF data are: \n", 115 | "\n", 116 | "\n", 117 | "* numeric\n", 118 | "* structured\n", 119 | "* multi-dimensional (up to 5-dimensions)\n", 120 | "* mostly large in volume (~ 27 GB per ERA-interim parameter)\n", 121 | "* Format: netCDF or GRIB (binary format)
\n", 122 | "
\n", 123 | "\n", 124 | "
" 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": {}, 130 | "source": [ 131 | "### Geospatial data workflow\n", 132 | "\n", 133 | "Large volumes of geospatial data require extensive processing to retrieve valuable information. A workflow to process / analyse geospatial data consists of the three main steps:\n", 134 | "* Data access\n", 135 | "* Data processing / analysis\n", 136 | "* Data visualisation\n", 137 | "

" 138 | ] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "metadata": {}, 143 | "source": [ 144 | "
\n" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "
" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": {}, 157 | "source": [ 158 | "# Further ressources" 159 | ] 160 | }, 161 | { 162 | "cell_type": "markdown", 163 | "metadata": { 164 | "collapsed": true 165 | }, 166 | "source": [ 167 | "* [ECMWF](http://ecmwf.int)\n", 168 | "* [ECMWF Data Service Catalogue](https://nbviewer.jupyter.org/github/OpenDataHack/data_service_catalogue/blob/master/index.ipynb)\n", 169 | "* [Tutorial on OGC Web Coverage Service for Climate Data](https://nbviewer.jupyter.org/github/earthserver-eu/OGC_WCS_tutorial/blob/master/index.ipynb)\n", 170 | "* [Climate Science Data Service | EarthServer-2](http://earthserver.ecmwf.int)" 171 | ] 172 | }, 173 | { 174 | "cell_type": "markdown", 175 | "metadata": {}, 176 | "source": [ 177 | "
" 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": {}, 183 | "source": [ 184 | "\"Creative" 185 | ] 186 | } 187 | ], 188 | "metadata": { 189 | "kernelspec": { 190 | "display_name": "Python 2", 191 | "language": "python", 192 | "name": "python2" 193 | }, 194 | "language_info": { 195 | "codemirror_mode": { 196 | "name": "ipython", 197 | "version": 2 198 | }, 199 | "file_extension": ".py", 200 | "mimetype": "text/x-python", 201 | "name": "python", 202 | "nbconvert_exporter": "python", 203 | "pygments_lexer": "ipython2", 204 | "version": "2.7.11" 205 | } 206 | }, 207 | "nbformat": 4, 208 | "nbformat_minor": 0 209 | } 210 | --------------------------------------------------------------------------------