{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Mapas y Python\n", "\n", "Es obvia la importancia de los mapas, para la visualizacion de datos. Las coordenadas, latitud y longitud, pueden describir un punto sobre la tierra. Utilizamos estandares como WGS-84 para atar esas coordenadas a un punto real.\n", "\n", "Utilizando MatPlotlib, podemos aprovechar ***Basemap***, una libreria que provee funcionalidad básica de mapa, con la cual podemos construir y componer. Agregar poligonos, puntos, areas, barras, colores, etc; se hace mediante estas librerias.\n", "\n", "# Librerias\n", "\n", "La libreria mas utilizada en el ecosistema Jupyter-Matplotlib es Basemap. Tambien existen otras, entre ellas, Plotly, que son muy poderosas y convenientes pero tienen dependencias externas.\n", "\n", "* [Basemap](https://github.com/matplotlib/basemap/): el \"industry standard\". Un poco complicado para el setup, bastante poderoso e integrado con matplotlib.\n", "* [Plotly](https://plot.ly/python/getting-started/#start-plotting-online): Una libreria que permite desplegar datos mediante Javascript en la Web\n", "* QGis: Una aplicación completa para el manejo de datos GIS, [tiene bindings en Python y es posible utilizar como libreria](http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/loadlayer.html) para aplicaciónes tanto GUI como en notebooks o [para analizar en scripts y exportar](https://www.airpair.com/python/posts/using-python-and-qgis-for-geospatial-visualization).\n", "* OSMnx: Basada en Open Street Map, Permite tanto analisis como visualización de mapas a nivel de calle, region, ciudad y más.\n", "\n", "Para este webinar, vamos a indagar mas en Basemap, que es el mas accesible.\n", "\n", "\n", "## Basemap\n", "\n", "Basemap es una extensión de la funcionalidad disponible \n", "\n", "Existen varias formas de instalarlo, así que puede ser un poco confuso. Dependiendo de el método en el cual tengas instalado matplotlib hace variar la forma apropiada de instalarlo.\n", "\n", "\n", "### Ambiente de Trabajo\n", "\n", "\n", "```bash\n", "$ #ESTE_ENV = midevenviroment\n", "$ source ~/miniconda3/envs/$ESTE_ENV/bin/activate\n", "\n", "$ conda install jupyter-notebook\n", "$ conda install gdal -c conda-forge\n", "$ conda install basemap -c conda-forge\n", "$ conda install pandas seaborn\n", "\n", "## En caso hayan instalado basemap en algun directorio no standard: utiliza un link para la carpeta data.\n", "$ ln -s /home/tian/miniconda3/pkgs/basemap-1.1.0-py36_2/lib/python3.6/site-packages/mpl_toolkits/basemap/data/ /usr/share/basemap\n", "```\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Importamos lo ya usual.\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm\n", "import pandas as pd\n", "import numpy as np\n", "import seaborn\n", "\n", "# Algunas librerias extra que usaremos\n", "from matplotlib.colors import Normalize\n", "import matplotlib.colors as colors\n", "from numpy import array\n", "from numpy import max\n", "\n", "# Aqui cargamos Basemap\n", "from mpl_toolkits.basemap import Basemap\n", "from matplotlib.patches import Polygon\n", "from matplotlib.collections import PatchCollection\n", "\n", "\n", "sns.set(style=\"white\", color_codes=True)\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mapeando los terremotos globales de la ultima semana\n", "Vamos a usar la feed de datos del [US Geological, ellas tienen disponibles datos referenciados de actividad geologica a nivel mundial, regional y de EEUU](https://earthquake.usgs.gov/earthquakes/feed/v1.0/). " ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "quakes = pd.read_csv(\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_week.csv\")\n", "\n", "# Creamos la lista de latitudes y longitudes.\n", "lats, lons = list(quakes['latitude']), list(quakes['longitude'])\n" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | time | \n", "latitude | \n", "longitude | \n", "depth | \n", "mag | \n", "magType | \n", "nst | \n", "gap | \n", "dmin | \n", "rms | \n", "... | \n", "updated | \n", "place | \n", "type | \n", "horizontalError | \n", "depthError | \n", "magError | \n", "magNst | \n", "status | \n", "locationSource | \n", "magSource | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "2017-10-31T16:29:08.330Z | \n", "36.746834 | \n", "-121.467163 | \n", "9.00 | \n", "2.78 | \n", "md | \n", "56.0 | \n", "61.0 | \n", "0.02078 | \n", "0.15 | \n", "... | \n", "2017-10-31T16:32:56.802Z | \n", "11km SW of Ridgemark, California | \n", "earthquake | \n", "0.24 | \n", "0.45 | \n", "0.16 | \n", "66.0 | \n", "automatic | \n", "nc | \n", "nc | \n", "
1 | \n", "2017-10-31T16:23:50.380Z | \n", "19.839001 | \n", "-155.555664 | \n", "23.85 | \n", "2.06 | \n", "md | \n", "44.0 | \n", "110.0 | \n", "0.08413 | \n", "0.13 | \n", "... | \n", "2017-10-31T16:27:14.110Z | \n", "23km SSE of Waimea, Hawaii | \n", "earthquake | \n", "0.61 | \n", "0.81 | \n", "0.19 | \n", "8.0 | \n", "automatic | \n", "hv | \n", "hv | \n", "
2 | \n", "2017-10-31T16:15:45.210Z | \n", "37.603668 | \n", "-118.955666 | \n", "1.43 | \n", "1.08 | \n", "md | \n", "8.0 | \n", "198.0 | \n", "0.01381 | \n", "0.02 | \n", "... | \n", "2017-10-31T16:25:02.360Z | \n", "5km SSE of Mammoth Lakes, California | \n", "earthquake | \n", "1.38 | \n", "1.29 | \n", "0.17 | \n", "6.0 | \n", "automatic | \n", "nc | \n", "nc | \n", "
3 | \n", "2017-10-31T16:14:54.100Z | \n", "37.598167 | \n", "-118.954330 | \n", "1.40 | \n", "1.43 | \n", "md | \n", "21.0 | \n", "150.0 | \n", "0.01940 | \n", "0.03 | \n", "... | \n", "2017-10-31T16:23:02.354Z | \n", "5km SSE of Mammoth Lakes, California | \n", "earthquake | \n", "0.34 | \n", "0.70 | \n", "0.26 | \n", "19.0 | \n", "automatic | \n", "nc | \n", "nc | \n", "
4 | \n", "2017-10-31T15:54:17.460Z | \n", "19.265667 | \n", "-155.392166 | \n", "3.49 | \n", "2.34 | \n", "ml | \n", "47.0 | \n", "106.0 | \n", "0.02847 | \n", "0.21 | \n", "... | \n", "2017-10-31T16:00:00.580Z | \n", "11km NE of Pahala, Hawaii | \n", "earthquake | \n", "0.37 | \n", "1.25 | \n", "0.32 | \n", "8.0 | \n", "automatic | \n", "hv | \n", "hv | \n", "
5 rows × 22 columns
\n", "\n", " | sitio | \n", "latitud | \n", "longitud | \n", "coordenadas | \n", "
---|---|---|---|---|
0 | \n", "Esquina Sureste de la Iglesia del Corazón de J... | \n", "10.018010 | \n", "-84.216480 | \n", "(10.01801 , -84.21648) | \n", "
1 | \n", "Parque Central de Alajuela | \n", "10.016787 | \n", "-84.213914 | \n", "(10.016787 , -84.213914) | \n", "
2 | \n", "Parque de las Palmas, costado sur del hospital... | \n", "10.020168 | \n", "-84.214064 | \n", "(10.020168 , -84.214064) | \n", "
3 | \n", "Mall Internacional | \n", "10.006020 | \n", "-84.212740 | \n", "(10.00602 , -84.21274) | \n", "
4 | \n", "Ojo de Agua | \n", "9.985120 | \n", "-84.195540 | \n", "(9.98512 , -84.19554) | \n", "