{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cartographier le manteau neigeux avec Python \n", "\n", "En quelques lignes de code, nous vous proposons de cartographier le manteau neigeux. Nous utiliserons pour cela les données du réseau nivo-météorologique français, ainsi que les bibliothèques Pandas (et son extension géospatiale Geopandas) et Folium. \n", "\n", "Ce notebook complète l'[article publié](https://makina-corpus.com/blog/metier/python-carto) sur le blog de Makina Corpus. \n", "\n", "## Dépendances \n", "\n", "Si vous n'utilisez pas les environnements pré-configurés mis à votre disposition dans le répertoire GitHub, vous aurez besoin de vérifier l'installation de certaines bibliothèques Python. \n", "\n", "Voici la liste des dépendances de ce notebook :\n", "\n", "```\n", "folium\n", "geopandas\n", "matplotlib\n", "pandas\n", "jupyter\n", "rtree\n", "descartes\n", "```\n", "\n", "Vous aurez donc besoin d'installer la bibliothèque [libspatialindex](http://libspatialindex.github.io/), et les paquets python folium, geopandas, matplotlib, pandas, jupyter, rtree, descartes (voir le readme).\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import geopandas as gpd\n", "import matplotlib.pyplot as plt\n", "import folium" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Préparation des données géographiques\n", "\n", "Dans ce notebook, nous utilisons les **données du réseau nivo-météorologique français**. Les données sont disponibles dans le dossier `data/`. Vous pouvez aussi télécharger le fichier des stations ([ici](https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Nivo/postesNivo.json)), ainsi qu'un fichier de mesures archivées (onglet \"Téléchargement de données archivées\" de [cette page](https://donneespubliques.meteofrance.fr/?fond=produit&id_produit=94&id_rubrique=32)) sur le site de Météo France." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Carte du réseau de stations\n", "\n", "Nous pouvons rapidement visualiser les positions des stations sur une **carte dynamique** à l'aide de la bibliothèque Folium. Cette bibliothèque permet de créer facilement des cartes qui sont générées par la bibliothèque javascript Leaflet." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a map centered at the given latitude and longitude\n", "stations_map = folium.Map(location=[45,1], zoom_start=5)\n", "\n", "# Add data from a geojson file\n", "stations_map.add_child(folium.GeoJson('postesNivo.json'))\n", "\n", "# Display the map\n", "display(stations_map)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Enregistrement des stations dans un geodataframe\n", "\n", "Pour travailler avec ces données, nous les chargons dans un objet GeoDataFrame à l'aide de la méthode `read_file` de la bibliothèque Geopandas." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 143 entries, 0 to 142\n", "Data columns (total 6 columns):\n", "Latitude 143 non-null object\n", "Longitude 143 non-null object\n", "ID 143 non-null int64\n", "Altitude 143 non-null object\n", "Nom 143 non-null object\n", "geometry 143 non-null object\n", "dtypes: int64(1), object(5)\n", "memory usage: 6.8+ KB\n" ] } ], "source": [ "# Read the geojson file\n", "stations = gpd.read_file(\"postesNivo.json\")\n", "# Convert the IDs to int\n", "stations.ID = stations.ID.astype(int)\n", "# Get info about data\n", "stations.info()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "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", "
LatitudeLongitudeIDAltitudeNomgeometry
046.7660006.35916773921036METABIEF_STATIONPOINT (6.359167 46.766)
146.0208336.97083373932196LE TOUR BALMEPOINT (6.970833 46.020833)
246.3411676.70816774541535BernexPOINT (6.708167 46.341167)
345.2476676.73266774562166AussoisPOINT (6.732667 45.247667)
446.3153336.6733337457790VACHERESSE AUXIPOINT (6.673333 46.315333)
\n", "
" ], "text/plain": [ " Latitude Longitude ID Altitude Nom \\\n", "0 46.766000 6.359167 7392 1036 METABIEF_STATION \n", "1 46.020833 6.970833 7393 2196 LE TOUR BALME \n", "2 46.341167 6.708167 7454 1535 Bernex \n", "3 45.247667 6.732667 7456 2166 Aussois \n", "4 46.315333 6.673333 7457 790 VACHERESSE AUXI \n", "\n", " geometry \n", "0 POINT (6.359167 46.766) \n", "1 POINT (6.970833 46.020833) \n", "2 POINT (6.708167 46.341167) \n", "3 POINT (6.732667 45.247667) \n", "4 POINT (6.673333 46.315333) " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Display the first rows (5 by default)\n", "stations.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the geometries\n", "stations.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le système de coordonnées est accessible via l'attribut `crs` de notre geoDataFrame, ici nos positions sont en **WGS84** (EPSG:4326). Il s'agit du système géodésique le plus fréquent lorsque l'on travaille avec des coordonnées géographiques, typiquement des positions GPS." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'init': 'epsg:4326'}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the coordinate reference system used to define the geometries\n", "stations.crs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En plus des méthodes standard de la bibliothèque Pandas, GeoPandas fournit une **indexation basée sur les coordonnées** avec l'indexeur `cx`. Il retourne les géométries intersectant la zone de sélection. La sélection d'un extrait du dataframe n'est plus réalisée par numéro ou nom de lignes et/ou colonnes, mais directement par les coordonnées de la zone d'intérêt.\n", "\n", "Nous utilisons cet indexeur pour extraire les stations situées dans les Alpes." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Extract the stations located in the Alpes \n", "alpes = stations.cx[4:8,44:47]\n", "alpes.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import des emprises de communes\n", "\n", "Les stations sont représentées par des points. Pour cartographier le manteau neigeux à l'échelle de la commune, nous récupérons les emprises des communes des Alpes grâce au projet [France GeoJSON](https://france-geojson.gregoiredavid.fr/). Nous créons à partir de ces fichiers un dataframe contenant l'emprise des communes avec lesquelles nous travaillons." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "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", "
codenomgeometry
073197Peisey-NancroixPOLYGON ((6.86187 45.45389, 6.85537 45.454, 6....
173023AussoisPOLYGON ((6.71509 45.23432, 6.71246 45.23752, ...
273117FourneauxPOLYGON ((6.64543 45.19696, 6.65057 45.19479, ...
373157ModanePOLYGON ((6.60137 45.16331, 6.60417 45.1623, 6...
473322Villarodin-BourgetPOLYGON ((6.71459 45.16239, 6.71152 45.16404, ...
\n", "
" ], "text/plain": [ " code nom \\\n", "0 73197 Peisey-Nancroix \n", "1 73023 Aussois \n", "2 73117 Fourneaux \n", "3 73157 Modane \n", "4 73322 Villarodin-Bourget \n", "\n", " geometry \n", "0 POLYGON ((6.86187 45.45389, 6.85537 45.454, 6.... \n", "1 POLYGON ((6.71509 45.23432, 6.71246 45.23752, ... \n", "2 POLYGON ((6.64543 45.19696, 6.65057 45.19479, ... \n", "3 POLYGON ((6.60137 45.16331, 6.60417 45.1623, 6... \n", "4 POLYGON ((6.71459 45.16239, 6.71152 45.16404, ... " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read geoJSON files\n", "com73 = gpd.read_file('communes-73-savoie.geojson')\n", "com74 = gpd.read_file('communes-74-haute-savoie.geojson')\n", "com38 = gpd.read_file('communes-38-isere.geojson')\n", "com05 = gpd.read_file('communes-05-hautes-alpes.geojson')\n", "# Concatenate the geodataframes\n", "communes = pd.concat([com73, com74, com38, com05])\n", "# Display the first lines \n", "communes.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Jointure spatiale\n", "\n", "Geopandas permet de réaliser des jointures spatiales avec sa méthode `sjoin`. Avec l'opérateur `within`, nous associons les stations aux communes en intersectant leurs géométries." ] }, { "cell_type": "code", "execution_count": 9, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
index_leftLatitudeLongitudeIDAltitudeNomcodenomgeometry
index_right
13.045.2476676.7326677456.02166Aussois73023AussoisPOLYGON ((6.71509 45.23432, 6.71246 45.23752, ...
365.045.1558336.6648337890.02208Val Frejus73157ModanePOLYGON ((6.60137 45.16331, 6.60417 45.1623, 6...
446.045.1885006.6988337863.01960La Norma73322Villarodin-BourgetPOLYGON ((6.71459 45.16239, 6.71152 45.16404, ...
716.045.2741676.9223337567.02101Val Cenis (La Berche)73290Val-CenisPOLYGON ((7.05118 45.22533, 7.04721 45.22581, ...
867.045.3716676.5833337892.01700Meribel Mottaret73015AlluesPOLYGON ((6.54646 45.45317, 6.54908 45.45306, ...
\n", "
" ], "text/plain": [ " index_left Latitude Longitude ID Altitude \\\n", "index_right \n", "1 3.0 45.247667 6.732667 7456.0 2166 \n", "3 65.0 45.155833 6.664833 7890.0 2208 \n", "4 46.0 45.188500 6.698833 7863.0 1960 \n", "7 16.0 45.274167 6.922333 7567.0 2101 \n", "8 67.0 45.371667 6.583333 7892.0 1700 \n", "\n", " Nom code nom \\\n", "index_right \n", "1 Aussois 73023 Aussois \n", "3 Val Frejus 73157 Modane \n", "4 La Norma 73322 Villarodin-Bourget \n", "7 Val Cenis (La Berche) 73290 Val-Cenis \n", "8 Meribel Mottaret 73015 Allues \n", "\n", " geometry \n", "index_right \n", "1 POLYGON ((6.71509 45.23432, 6.71246 45.23752, ... \n", "3 POLYGON ((6.60137 45.16331, 6.60417 45.1623, 6... \n", "4 POLYGON ((6.71459 45.16239, 6.71152 45.16404, ... \n", "7 POLYGON ((7.05118 45.22533, 7.04721 45.22581, ... \n", "8 POLYGON ((6.54646 45.45317, 6.54908 45.45306, ... " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Spatial join between the station's positions and the city's surfaces\n", "map_df = gpd.sjoin(alpes, communes, how='right', op='within')\n", "# Display the first rows of the dataframe \n", "map_df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Préparation des données statistiques\n", "\n", "Les hauteurs de neige mesurées par les différentes stations du réseau sont archivées dans des fichiers csv.\n", "\n", "Nous enregistrons le contenu du fichier contenant les données du mois de décembre 2018 dans un dataframe Pandas en utilisant la méthode `read_csv`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 1580 entries, 0 to 1598\n", "Data columns (total 50 columns):\n", "numer_sta 1580 non-null int64\n", "date 1580 non-null datetime64[ns]\n", "haut_sta 1580 non-null float64\n", "dd 1580 non-null object\n", "ff 1580 non-null object\n", "t 1580 non-null object\n", "td 1580 non-null object\n", "u 1580 non-null object\n", "ww 1580 non-null object\n", "w1 1580 non-null object\n", "w2 1580 non-null object\n", "n 1580 non-null object\n", "nbas 1580 non-null object\n", "hbas 1580 non-null object\n", "cl 1580 non-null object\n", "cm 1580 non-null object\n", "ch 1580 non-null object\n", "rr24 1580 non-null object\n", "tn12 1580 non-null object\n", "tn24 1580 non-null object\n", "tx12 1580 non-null object\n", "tx24 1580 non-null object\n", "ht_neige 1580 non-null float64\n", "ssfrai 1580 non-null object\n", "perssfrai 1580 non-null object\n", "phenspe1 1580 non-null float64\n", "phenspe2 1580 non-null object\n", "nnuage1 1580 non-null object\n", "t_neige 1580 non-null object\n", "etat_neige 1580 non-null object\n", "prof_sonde 1580 non-null object\n", "nuage_val 1580 non-null object\n", "chasse_neige 1580 non-null object\n", "aval_descr 1580 non-null object\n", "aval_genre 1580 non-null object\n", "aval_depart 1580 non-null object\n", "aval_expo 1580 non-null object\n", "aval_risque 1580 non-null object\n", "dd_alti 1580 non-null object\n", "ff_alti 1580 non-null object\n", "ht_neige_alti 1580 non-null object\n", "neige_fraiche 1580 non-null object\n", "teneur_eau 1580 non-null object\n", "grain_predom 1580 non-null object\n", "grain_nombre 1580 non-null object\n", "grain_diametr 1580 non-null object\n", "homogeneite 1580 non-null object\n", "m_vol_neige 1580 non-null object\n", "Unnamed: 48 0 non-null float64\n", "Unnamed: 49 0 non-null float64\n", "dtypes: datetime64[ns](1), float64(5), int64(1), object(43)\n", "memory usage: 629.5+ KB\n" ] } ], "source": [ "# Read the csv file containing the measurements\n", "snow2018 = pd.read_csv('nivo.201812.csv', delimiter=';', parse_dates=['date'])\n", "# Remove rows without a snow height measurement\n", "snow2018 = snow2018[snow2018.ht_neige != 'mq']\n", "# Convert the snow heights to float\n", "snow2018.ht_neige=snow2018.ht_neige.astype('float')\n", "# Get info about data\n", "snow2018.info()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Index the data with the dates of mesurement\n", "snow = snow2018[['numer_sta','date','haut_sta','ht_neige']].set_index('date')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Calculate the mean snow height by station\n", "data_for_map = snow.groupby('numer_sta').resample('M').mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Association des données" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Set the station IDs as index in the dataframes\n", "map_df.set_index('ID', inplace=True)\n", "data_for_map.set_index('numer_sta', inplace=True)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# Merge the two dataframes\n", "merged = map_df.join(data_for_map)\n", "# Remove NaN values\n", "merged.dropna(inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comme certaines communes possèdent plusieurs stations de mesure, nous calculons une hauteur moyenne de neige pour chacune d'entre elles. Pour cela, nous réindexons notre dataframe avec le code de chaque commune (colonne qui nous sert à regrouper les mesures), puis nous calculons la hauteur moyenne de neige par commune. Cette information est enregistrée dans une nouvelle colonne." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# Reset the dataframe index\n", "merged.reset_index(level=0, inplace=True)\n", "# Use the city code as index\n", "merged.set_index('code',inplace=True)\n", "# Calculate the mean snow height for each city\n", "merged['com_ht_neige']=merged.groupby(['code']).mean().ht_neige" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Affichage sur une carte\n", "\n", "Comme vu précédemment, une **carte statique** est facilement accessible avec la méthode `plot` de Geopandas." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "\n", "communes.plot(color='gray', ax=ax)\n", "merged.plot(column='ht_neige', cmap='Blues', linewidth=0.8, edgecolor='1.5',ax=ax, legend=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour obtenir une **carte dynamique**, on peut à nouveau utiliser la bibliothèque Folium et sa méthode `chloropleth`. Cette méthode prend en paramètres un fichier geoJSON qui contient les géométries à afficher et un dataframe Pandas qui contient les valeurs statistiques associées. On enregistre donc les géométries des communes dans un fichier geoJSON avec la méthode `to_file`." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/makina/anaconda3/lib/python3.6/site-packages/geopandas/io/file.py:108: FionaDeprecationWarning: Use fiona.Env() instead.\n", " with fiona.drivers():\n" ] } ], "source": [ "# Save a geodataframe in a geoJSON file \n", "merged[['index', 'nom','geometry']].to_file('nivo2O18.json', driver='GeoJSON')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Désormais nous avons tout pour cartographier le manteau neigeux des communes des Alpes sur un fond de cartes Open Street Map." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create a map\n", "snow_map = folium.Map(location=[45,1], zoom_start=5)\n", "\n", "# Add the chloropleth\n", "snow_map.choropleth(\n", " geo_data='nivo2O18.json', # geoJSON file\n", " name='choropleth',\n", " data=merged, # Pandas dataframe\n", " columns=['index','ht_neige'], # key and value of interest from the dataframe\n", " key_on='feature.properties.index', # key to link the json file and the dataframe\n", " fill_color='Blues', # colormap\n", " fill_opacity=0.9,\n", " line_opacity=0.2,\n", " legend_name='Hauteur moyenne de neige (m)'\n", ")\n", "\n", "# Add the stations\n", "for ix, row in merged.iterrows(): \n", " # Create a popup tab with the station name and its mean snow height\n", " popup_df = pd.DataFrame(data=[['Station', str(row['Nom'])], ['Altitude','{:4d} m'.format(int(row['haut_sta']))], ['Neige', '{:01.2f} m'.format(row['ht_neige'])]])\n", " popup_html = popup_df.to_html(classes='table table-striped table-hover table-condensed table-responsive', index=False, header=False)\n", " # Create a marker on the map\n", " folium.CircleMarker(location = [float(row['Latitude']),float(row['Longitude'])], radius=2, popup=folium.Popup(popup_html), color='#0000FF', fill_color='#0000FF').add_to(snow_map)\n", "\n", "# Display the map\n", "display(snow_map)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }