geopandas: paquete para manipulación y análisis de datos vectoriales#

Descripción general#

Geopandas es un proyecto de software libre que extiende los tipos de datos de pandas para incorporar objetos geométricos (puntos, líneas, polígonos, etc), como los utilizados en el modelo vectorial. Se apoya en las bibliotecas Fiona para acceder a los datos, Shapely para realizar las operaciones geométricas y matplotlib para graficación.

Geopandas implementa dos estructuras principales de datos:

  • GeoSeries: es un vector en el que cada elemento es un conjunto de una o varias geometrías correspondientes a una observación. Por ejemplo, un polígono que representa una provincia, una línea que representa una carretera o un punto que representa una edificación.

  • GeoDataFrame: es una estructura tabular (i.e. con filas y columnas) de datos geométricos y no geométricos (ej. textos, números). El conjunto de geometrías se implementa a través de GeoSeries.

Instalación#

Puede instalarse con pip, conda o mamba, desde la línea de comandos del sistema operativo. Solo es necesario hacerlo de una forma.

# Con pip:
pip install geopandas

# Con conda:
conda install geopandas -c conda-forge

# Con mamba:
mamba install geopandas -c conda-forge

Para Google Colab, se recomienda la siguiente secuencia de comandos:

# Instalación de libspatialindex-dev y rtree
# Debe realizarse antes de la instalación de geopandas
!apt install libspatialindex-dev
!pip install --upgrade rtree

# Instalación de geopandas y otros módulos módulos
!pip install --upgrade geopandas
!pip install --upgrade pyshp
!pip install --upgrade shapely
!pip install --upgrade mapclassify
!pip install --upgrade descartes

Carga#

# Carga de la biblioteca pandas con el alias pd
import pandas as pd

# Carga de geopandas
import geopandas as gpd
# Versión de geopandas
gpd.__version__
'0.11.1'

Operaciones básicas#

Seguidamente, se describen y ejemplifican algunas de las funciones básicas de geopandas.

read_file() - carga de datos#

# Lectura de datos de países de Natural Earth,
# uno de los conjuntos de datos de ejemplo incluídos en geopandas

paises = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# Visualización de los datos
paises
pop_est continent name iso_a3 gdp_md_est geometry
0 889953.0 Oceania Fiji FJI 5496 MULTIPOLYGON (((180.00000 -16.06713, 180.00000...
1 58005463.0 Africa Tanzania TZA 63177 POLYGON ((33.90371 -0.95000, 34.07262 -1.05982...
2 603253.0 Africa W. Sahara ESH 907 POLYGON ((-8.66559 27.65643, -8.66512 27.58948...
3 37589262.0 North America Canada CAN 1736425 MULTIPOLYGON (((-122.84000 49.00000, -122.9742...
4 328239523.0 North America United States of America USA 21433226 MULTIPOLYGON (((-122.84000 49.00000, -120.0000...
... ... ... ... ... ... ...
172 6944975.0 Europe Serbia SRB 51475 POLYGON ((18.82982 45.90887, 18.82984 45.90888...
173 622137.0 Europe Montenegro MNE 5542 POLYGON ((20.07070 42.58863, 19.80161 42.50009...
174 1794248.0 Europe Kosovo KOS 7926 POLYGON ((20.59025 41.85541, 20.52295 42.21787...
175 1394973.0 North America Trinidad and Tobago TTO 24269 POLYGON ((-61.68000 10.76000, -61.10500 10.890...
176 11062113.0 Africa S. Sudan SSD 11998 POLYGON ((30.83385 3.50917, 29.95350 4.17370, ...

177 rows × 6 columns

info() - información general sobre un conjunto de datos#

paises.info()
<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 177 entries, 0 to 176
Data columns (total 6 columns):
 #   Column      Non-Null Count  Dtype   
---  ------      --------------  -----   
 0   pop_est     177 non-null    float64 
 1   continent   177 non-null    object  
 2   name        177 non-null    object  
 3   iso_a3      177 non-null    object  
 4   gdp_md_est  177 non-null    int64   
 5   geometry    177 non-null    geometry
dtypes: float64(1), geometry(1), int64(1), object(3)
memory usage: 8.4+ KB

describe() - información estadística#

paises.describe()
pop_est gdp_md_est
count 1.770000e+02 1.770000e+02
mean 4.324346e+07 4.934739e+05
std 1.513543e+08 2.019326e+06
min 1.400000e+02 1.600000e+01
25% 3.301000e+06 1.346900e+04
50% 1.019232e+07 5.040000e+04
75% 3.182530e+07 2.619210e+05
max 1.397715e+09 2.143323e+07

head(), tail(), sample() - despliegue de filas de un conjunto de datos#

# Primeros 5 registros
paises.head()
pop_est continent name iso_a3 gdp_md_est geometry
0 889953.0 Oceania Fiji FJI 5496 MULTIPOLYGON (((180.00000 -16.06713, 180.00000...
1 58005463.0 Africa Tanzania TZA 63177 POLYGON ((33.90371 -0.95000, 34.07262 -1.05982...
2 603253.0 Africa W. Sahara ESH 907 POLYGON ((-8.66559 27.65643, -8.66512 27.58948...
3 37589262.0 North America Canada CAN 1736425 MULTIPOLYGON (((-122.84000 49.00000, -122.9742...
4 328239523.0 North America United States of America USA 21433226 MULTIPOLYGON (((-122.84000 49.00000, -120.0000...
# Últimos 10 registros
paises.tail(10)
pop_est continent name iso_a3 gdp_md_est geometry
167 5096159.0 Africa Somaliland -99 17836 POLYGON ((48.94820 11.41062, 48.94820 11.41062...
168 44269594.0 Africa Uganda UGA 35165 POLYGON ((33.90371 -0.95000, 31.86617 -1.02736...
169 12626950.0 Africa Rwanda RWA 10354 POLYGON ((30.41910 -1.13466, 30.81613 -1.69891...
170 3301000.0 Europe Bosnia and Herz. BIH 20164 POLYGON ((18.56000 42.65000, 17.67492 43.02856...
171 2083459.0 Europe North Macedonia MKD 12547 POLYGON ((22.38053 42.32026, 22.88137 41.99930...
172 6944975.0 Europe Serbia SRB 51475 POLYGON ((18.82982 45.90887, 18.82984 45.90888...
173 622137.0 Europe Montenegro MNE 5542 POLYGON ((20.07070 42.58863, 19.80161 42.50009...
174 1794248.0 Europe Kosovo KOS 7926 POLYGON ((20.59025 41.85541, 20.52295 42.21787...
175 1394973.0 North America Trinidad and Tobago TTO 24269 POLYGON ((-61.68000 10.76000, -61.10500 10.890...
176 11062113.0 Africa S. Sudan SSD 11998 POLYGON ((30.83385 3.50917, 29.95350 4.17370, ...
# 5 registros seleccionados aleatoriamente
paises.sample(5)
pop_est continent name iso_a3 gdp_md_est geometry
127 8574832.0 Europe Switzerland CHE 703082 POLYGON ((9.59423 47.52506, 9.63293 47.34760, ...
10 18952038.0 South America Chile CHL 282318 MULTIPOLYGON (((-68.63401 -52.63637, -68.63335...
47 11333483.0 North America Cuba CUB 100023 POLYGON ((-82.26815 23.18861, -81.40446 23.117...
147 108116615.0 Asia Philippines PHL 376795 MULTIPOLYGON (((120.83390 12.70450, 120.32344 ...
156 7044636.0 South America Paraguay PRY 38145 POLYGON ((-58.16639 -20.17670, -57.87067 -20.7...

Selección de columnas#

Las columnas que se despliegan en un geodataframe pueden especificarse mediante una lista.

# Despliegue de las columnas con el nombre del país y su población
paises[["name", "pop_est"]]
name pop_est
0 Fiji 889953.0
1 Tanzania 58005463.0
2 W. Sahara 603253.0
3 Canada 37589262.0
4 United States of America 328239523.0
... ... ...
172 Serbia 6944975.0
173 Montenegro 622137.0
174 Kosovo 1794248.0
175 Trinidad and Tobago 1394973.0
176 S. Sudan 11062113.0

177 rows × 2 columns

Selección de filas#

# Países con población estimada mayor o igual a mil millones
paises[paises["pop_est"] >= 1000000000]
pop_est continent name iso_a3 gdp_md_est geometry
98 1.366418e+09 Asia India IND 2868929 POLYGON ((97.32711 28.26158, 97.40256 27.88254...
139 1.397715e+09 Asia China CHN 14342903 MULTIPOLYGON (((109.47521 18.19770, 108.65521 ...

Selección de filas y columnas en la misma expresión#

# Columnas de nombre del país y su población 
# para filas con población estimada mayor o igual a mil millones
paises.loc[paises["pop_est"] >= 1000000000, ["name", "pop_est"]]
name pop_est
98 India 1.366418e+09
139 China 1.397715e+09

Operaciones de análisis#

plot() - mapeo#

El método geopandas.GeoDataFrame.plot() genera un mapa de un geodataframe mediante matplotlib.

# Mapa básico
paises.plot()
<AxesSubplot:>
../../_images/geopandas_33_1.png

Si se especifica una columna con el argumento column, el mapa se colorea de acuerdo con los valores de esa columna.

# Mapa de coropletas de la columna
# correspondiente al estimado de población
paises.plot(column = "pop_est", legend=True)
<AxesSubplot:>
../../_images/geopandas_35_1.png

Mapa de coropletas con una paleta de colores del sitio ColorBrewer, creado por Cynthia Brewer, y un esquema de clasificación basado en cuantiles.

# Mapa de coropletas con paleta de colores y esquema de clasificación
paises.plot(column = "pop_est", 
            legend=True,
            cmap='OrRd', 
            scheme='quantiles',
            figsize=(20, 20)
            )
<AxesSubplot:>
../../_images/geopandas_37_1.png

Mapa con múltiples capas.

# Geodataframe de ciudades de Natural Earth
ciudades = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))

# Mapa base de países
base = paises.plot(color='white', edgecolor='black', figsize=(20, 20))

# Capa de ciudades
ciudades.plot(ax=base, marker='o', color='red', markersize=8)
<AxesSubplot:>
../../_images/geopandas_39_1.png

Ejercicios#

  1. Descargue del Sistema Nacional de Información Territorial (SNIT) las siguientes capas, en el CRS WGS84.

  • Provincias.

  • Cantones.

  • Áreas silvestres protegidas (ASP).

  • Red vial (escala 1:200000).

  1. Cargue cada capa en un geodataframe.

  2. Examine la estructura y el contenido de cada conjunto de datos.

  3. Despliegue algunos mapas para cada capa, utilizando las funciones de matplotlib y geopandas.

  4. Genere mapas que presenten la capa de red vial con las otras tres.

Ejemplo de análisis: distribución de murciélagos en ASP de Costa Rica#

En los siguientes ejemplos, se utilizará un conjunto de registros de presencia de murciélagos (orden Chiroptera) de Costa Rica, en formato CSV, obtenido a través de una consulta al portal de la Infraestructura de Información Mundial en Biodiversidad (GBIF). También se utilizará la capa de ASP del Sistema Nacional de Áreas Protegidas de Costa Rica (Sinac).

Como resultado, se obtiene un mapa que muestra la cantida de especies de murciélagos en cada ASP.

Carga de datos#

Murciélagos#

Ya que los archivos de valores separados por comas (CSV) no tienen un formato geoespacial (SHP, GPKG, GeoJSON u otro), los datos de murciélagos se cargan primero en un dataframe normal (i.e. sin geometrías).

# Carga de registros de presencia de murciélagos en un dataframe
murcielagos = pd.read_csv("datos/gbif/murcielagos.csv", sep="\t")

# Despliegue de los datos
murcielagos
gbifID datasetKey occurrenceID kingdom phylum class order family genus species ... identifiedBy dateIdentified license rightsHolder recordedBy typeStatus establishmentMeans lastInterpreted mediaType issue
0 3925367874 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13766... Animalia Chordata Mammalia Chiroptera Emballonuridae Rhynchonycteris Rhynchonycteris naso ... weisswolf 2022-10-05T18:17:08 CC_BY_NC_4_0 weisswolf weisswolf NaN NaN 2022-10-15T16:09:18.161Z StillImage COORDINATE_ROUNDED
1 3925294399 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13810... Animalia Chordata Mammalia Chiroptera Emballonuridae Rhynchonycteris Rhynchonycteris naso ... Scott Hodgdon 2022-10-09T12:52:01 CC_BY_NC_4_0 genz genz NaN NaN 2022-10-15T16:07:56.890Z StillImage COORDINATE_ROUNDED
2 3925172153 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13792... Animalia Chordata Mammalia Chiroptera Phyllostomidae Uroderma Uroderma bilobatum ... botanicalpilot 2022-10-08T00:34:04 CC_BY_NC_4_0 botanicalpilot botanicalpilot NaN NaN 2022-10-15T15:36:33.801Z StillImage COORDINATE_ROUNDED
3 3923672667 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13757... Animalia Chordata Mammalia Chiroptera Phyllostomidae Ectophylla Ectophylla alba ... sergiovillegas 2022-10-04T21:25:33 CC_BY_NC_4_0 sergiovillegas sergiovillegas NaN NaN 2022-10-15T15:36:33.091Z StillImage COORDINATE_ROUNDED
4 3923593058 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13700... Animalia Chordata Mammalia Chiroptera Phyllostomidae Ectophylla Ectophylla alba ... Katharina Miller 2022-09-30T09:20:18 CC_BY_NC_4_0 Katharina Miller Katharina Miller NaN NaN 2022-10-15T15:46:30.036Z StillImage COORDINATE_ROUNDED
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
13465 45849434 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12726 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.251Z NaN INSTITUTION_COLLECTION_MISMATCH
13466 45849433 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12725 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.249Z NaN INSTITUTION_COLLECTION_MISMATCH
13467 45849432 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12724 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.251Z NaN INSTITUTION_COLLECTION_MISMATCH
13468 45849431 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12723 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.250Z NaN INSTITUTION_COLLECTION_MISMATCH
13469 45849415 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:10637 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN NaN CC0_1_0 NaN Arnold, Keith A. NaN Native 2022-09-09T07:01:21.329Z NaN COORDINATE_REPROJECTED;INSTITUTION_COLLECTION_...

13470 rows × 50 columns

Luego, con el método geopandas.points_from_xy(), se crea una columna de geometrías de puntos, con base en las columnas decimalLongitude y decimalLatitude.

# Geodataframe creado a partir del dataframe
murcielagos = gpd.GeoDataFrame(murcielagos, 
                               geometry=gpd.points_from_xy(murcielagos.decimalLongitude, 
                                                           murcielagos.decimalLatitude),
                               crs="EPSG:4326")

# Despliegue de los datos (incluyendo geometrías)
murcielagos
gbifID datasetKey occurrenceID kingdom phylum class order family genus species ... dateIdentified license rightsHolder recordedBy typeStatus establishmentMeans lastInterpreted mediaType issue geometry
0 3925367874 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13766... Animalia Chordata Mammalia Chiroptera Emballonuridae Rhynchonycteris Rhynchonycteris naso ... 2022-10-05T18:17:08 CC_BY_NC_4_0 weisswolf weisswolf NaN NaN 2022-10-15T16:09:18.161Z StillImage COORDINATE_ROUNDED POINT (-83.46987 8.87901)
1 3925294399 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13810... Animalia Chordata Mammalia Chiroptera Emballonuridae Rhynchonycteris Rhynchonycteris naso ... 2022-10-09T12:52:01 CC_BY_NC_4_0 genz genz NaN NaN 2022-10-15T16:07:56.890Z StillImage COORDINATE_ROUNDED POINT (-84.48173 10.48954)
2 3925172153 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13792... Animalia Chordata Mammalia Chiroptera Phyllostomidae Uroderma Uroderma bilobatum ... 2022-10-08T00:34:04 CC_BY_NC_4_0 botanicalpilot botanicalpilot NaN NaN 2022-10-15T15:36:33.801Z StillImage COORDINATE_ROUNDED POINT (-84.14411 9.38935)
3 3923672667 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13757... Animalia Chordata Mammalia Chiroptera Phyllostomidae Ectophylla Ectophylla alba ... 2022-10-04T21:25:33 CC_BY_NC_4_0 sergiovillegas sergiovillegas NaN NaN 2022-10-15T15:36:33.091Z StillImage COORDINATE_ROUNDED POINT (-84.04603 10.41495)
4 3923593058 50c9509d-22c7-4a22-a47d-8c48425ef4a7 https://www.inaturalist.org/observations/13700... Animalia Chordata Mammalia Chiroptera Phyllostomidae Ectophylla Ectophylla alba ... 2022-09-30T09:20:18 CC_BY_NC_4_0 Katharina Miller Katharina Miller NaN NaN 2022-10-15T15:46:30.036Z StillImage COORDINATE_ROUNDED POINT (-84.19692 10.58924)
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
13465 45849434 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12726 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.251Z NaN INSTITUTION_COLLECTION_MISMATCH POINT (-84.05000 9.95000)
13466 45849433 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12725 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.249Z NaN INSTITUTION_COLLECTION_MISMATCH POINT (-84.05000 9.95000)
13467 45849432 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12724 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.251Z NaN INSTITUTION_COLLECTION_MISMATCH POINT (-84.05000 9.95000)
13468 45849431 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:12723 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN CC0_1_0 NaN Gardner, Alfred L. NaN Native 2022-09-09T07:01:20.250Z NaN INSTITUTION_COLLECTION_MISMATCH POINT (-84.05000 9.95000)
13469 45849415 847e2306-f762-11e1-a439-00145eb45e9a urn:catalog:LSUMZ:Mammals:10637 Animalia Chordata Mammalia Chiroptera Phyllostomidae Anoura Anoura geoffroyi ... NaN CC0_1_0 NaN Arnold, Keith A. NaN Native 2022-09-09T07:01:21.329Z NaN COORDINATE_REPROJECTED;INSTITUTION_COLLECTION_... POINT (-84.81674 10.30111)

13470 rows × 51 columns

Ahora que los datos de murciélagos están en un geodataframe, pueden desplegarse en un mapa.

# Mapa
murcielagos.plot(figsize=(20, 20))
<AxesSubplot:>
../../_images/geopandas_51_1.png

Áreas silvestres protegidas (ASP)#

Como los datos de ASP sí están en un formato geoespacial (ej. GeoJSON), pueden cargarse directamente en un geodataframe.

# Carga de polígonos de ASP
asp = gpd.read_file("datos/sinac/asp.geojson", sep="\t")

# Despliegue tabular de los datos
asp
codigo nombre_asp cat_manejo estatus siglas_cat nombre_ac siglas_ac descripcio a_creacion n_creacion ... area_km_2 version_2 area_hecta grupo begin end area_3 ha_2 sector geometry
0 V03 Gandoca Manzanillo Refugio Nacional de Vida Silvestre Mixto RNVS Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1985 DE_16614_MAG ... None None None None NaN NaN NaN NaN None POLYGON ((-82.64798 9.63982, -82.64790 9.63975...
1 V03 Gandoca Manzanillo Refugio Nacional de Vida Silvestre Mixto RNVS Area de Conservacion La Amistad Caribe ACLAC Area marina protegida 1985 DE_16614_MAG ... None None None None NaN NaN NaN NaN None POLYGON ((-82.70297 9.66306, -82.70103 9.66254...
2 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area marina protegida 1970 DE_1236-A ... None None None None NaN NaN NaN NaN None POLYGON ((-82.62743 9.81309, -82.78927 9.67376...
3 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1970 DE_1236-A ... None None None None NaN NaN NaN NaN None POLYGON ((-82.81154 9.73568, -82.81160 9.73563...
4 B09 Bicentenario de la República - Pájaro Campana Reserva Biologica Estatal RB Area de Conservacion La Amistad Pacifico ACLAP Area terrestre protegida 2021 DE_42615_MINAE ... None None None None NaN NaN NaN NaN None POLYGON ((-82.77351 8.94507, -82.81050 8.95856...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
169 P10 Santa Rosa Parque Nacional Estatal PN Area de Conservacion Guanacaste ACG Area marina protegida 1966 Ley_3694 ... None None None None NaN NaN NaN NaN None POLYGON ((-85.66202 10.73569, -85.66240 10.735...
170 P07 Marino las Baulas de Guanacaste Parque Nacional Estatal PN Area de Conservacion Tempisque ACT Area marina protegida 1991 DE_20518_MIRENEM ... None None None None NaN NaN NaN NaN None POLYGON ((-85.86542 10.34860, -85.86536 10.348...
171 P20 Isla del Coco Parque Nacional Estatal PN Marina Cocos ACMC Isla 1978 DE_ 8748_A ... None None None None NaN NaN NaN NaN None POLYGON ((-87.04703 5.55545, -87.04703 5.55491...
172 P20 Isla del Coco Parque Nacional Estatal PN Marina Cocos ACMC Area marina protegida 2022 DE-43368-MINAE ... None None None None NaN NaN NaN NaN None POLYGON ((-86.36701 4.52901, -88.98701 4.52902...
173 A01 Montes Submarinos Area Marina de Manejo Estatal AMM Marina Cocos ACMC Area Marina de Manejo 2022 DE-43368-MINAE ... None None None None NaN NaN NaN NaN None POLYGON ((-86.03201 6.57101, -86.03402 2.31691...

174 rows × 37 columns

# Mapa de ASP
asp.plot(figsize=(20, 20))
<AxesSubplot:>
../../_images/geopandas_55_1.png

Ahora, ambas capas pueden mostrarse en un mismo mapa.

# Capa base de países
base = asp.plot(color='white', edgecolor='black', figsize=(20, 20))

# Capa de murciélagos
murcielagos.plot(ax=base, marker='o', color='red', markersize=8)
<AxesSubplot:>
../../_images/geopandas_57_1.png

Conteo de especies en cada ASP#

Con el método geopandas.sjoin(), se realiza una unión espacial o spatial join de las tablas de ASP y de murciélagos. Esto produce un geodataframe con una fila por cada registro de murciélagos, la cual contiene también la información del ASP en donde se ubica el registro.

En este caso, se conservan solo las filas en donde hay intersección de las geometrías de ambas tablas. O sea, aquellos registros de murciélagos que se ubican en un ASP. Se excluyen los registros ubicados fuera de las ASP.

# Join espacial de las capas de ASP y murciélagos
asp_murcielagos = asp.sjoin(murcielagos)

asp_murcielagos
codigo nombre_asp cat_manejo estatus siglas_cat nombre_ac siglas_ac descripcio a_creacion n_creacion ... identifiedBy dateIdentified license rightsHolder recordedBy typeStatus establishmentMeans lastInterpreted mediaType issue
0 V03 Gandoca Manzanillo Refugio Nacional de Vida Silvestre Mixto RNVS Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1985 DE_16614_MAG ... Jakob Fahr 2020-10-30T18:48:10 CC_BY_NC_4_0 Cameron Eckert Cameron Eckert NaN NaN 2022-10-15T15:19:51.786Z StillImage COORDINATE_ROUNDED
0 V03 Gandoca Manzanillo Refugio Nacional de Vida Silvestre Mixto RNVS Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1985 DE_16614_MAG ... Ryan Shofner 2020-08-15T04:01:47 CC_BY_NC_4_0 Ryan Shofner Ryan Shofner NaN NaN 2022-10-15T15:16:49.656Z StillImage COORDINATE_ROUNDED
3 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1970 DE_1236-A ... Luis F. Aguirre 2014-06-30T19:11:41 CC_BY_NC_4_0 Trent Pearce Trent Pearce NaN NaN 2022-10-15T15:36:13.557Z NaN NaN
3 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1970 DE_1236-A ... NaN NaN CC_BY_NC_4_0 Stichting Observation International NaN NaN NaN 2022-09-15T16:35:50.269Z NaN COORDINATE_ROUNDED;OCCURRENCE_STATUS_INFERRED_...
3 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1970 DE_1236-A ... NaN NaN CC_BY_NC_4_0 Stichting Observation International NaN NaN NaN 2022-09-15T16:35:13.840Z NaN COORDINATE_ROUNDED;OCCURRENCE_STATUS_INFERRED_...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
167 P10 Santa Rosa Parque Nacional Estatal PN Area de Conservacion Guanacaste ACG Area terrestre protegida 1966 Ley_3694 ... Madeleine Mullon 2020-10-22T00:00:00 CC_BY_NC_4_0 President and Fellows of Harvard College Judith Marie Chupasko NaN NaN 2022-10-20T12:41:27.078Z NaN COORDINATE_ROUNDED;INSTITUTION_MATCH_FUZZY;COL...
167 P10 Santa Rosa Parque Nacional Estatal PN Area de Conservacion Guanacaste ACG Area terrestre protegida 1966 Ley_3694 ... Judith Marie Chupasko 2002-01-07T00:00:00 CC_BY_NC_4_0 President and Fellows of Harvard College Judith Marie Chupasko NaN NaN 2022-10-20T12:41:09.347Z NaN COORDINATE_ROUNDED;INSTITUTION_MATCH_FUZZY;COL...
167 P10 Santa Rosa Parque Nacional Estatal PN Area de Conservacion Guanacaste ACG Area terrestre protegida 1966 Ley_3694 ... Jakob Fahr 2022-02-22T15:15:09 CC_BY_NC_4_0 iprabhu iprabhu NaN NaN 2022-10-15T15:31:05.696Z StillImage COORDINATE_ROUNDED
170 P07 Marino las Baulas de Guanacaste Parque Nacional Estatal PN Area de Conservacion Tempisque ACT Area marina protegida 1991 DE_20518_MIRENEM ... NaN NaN CC0_1_0 NaN USACR NaN Native 2022-09-08T23:55:59.749Z NaN COORDINATE_REPROJECTED;COLLECTION_MATCH_FUZZY
170 P07 Marino las Baulas de Guanacaste Parque Nacional Estatal PN Area de Conservacion Tempisque ACT Area marina protegida 1991 DE_20518_MIRENEM ... Frank Izaguirre 2018-02-06T19:18:12 CC_BY_NC_4_0 Frank Izaguirre Frank Izaguirre NaN NaN 2022-10-15T15:38:34.276Z StillImage COORDINATE_ROUNDED

2333 rows × 88 columns

# Estructura
asp_murcielagos.info()
<class 'geopandas.geodataframe.GeoDataFrame'>
Int64Index: 2333 entries, 0 to 170
Data columns (total 88 columns):
 #   Column                            Non-Null Count  Dtype   
---  ------                            --------------  -----   
 0   codigo                            2333 non-null   object  
 1   nombre_asp                        2333 non-null   object  
 2   cat_manejo                        2333 non-null   object  
 3   estatus                           2333 non-null   object  
 4   siglas_cat                        2333 non-null   object  
 5   nombre_ac                         2333 non-null   object  
 6   siglas_ac                         2333 non-null   object  
 7   descripcio                        2333 non-null   object  
 8   a_creacion                        2333 non-null   int64   
 9   n_creacion                        2333 non-null   object  
 10  area                              2333 non-null   float64 
 11  area_km                           2333 non-null   float64 
 12  version                           2333 non-null   object  
 13  fid                               0 non-null      float64 
 14  ha                                0 non-null      float64 
 15  codigo_2                          0 non-null      object  
 16  nombre_a_1                        0 non-null      object  
 17  cat_mane_1                        0 non-null      object  
 18  estatus_2                         0 non-null      object  
 19  siglas_c_1                        0 non-null      object  
 20  nombre_ac_                        0 non-null      object  
 21  siglas_ac_                        0 non-null      object  
 22  descripc_1                        0 non-null      object  
 23  a_creaci_1                        0 non-null      object  
 24  n_creaci_1                        0 non-null      object  
 25  normativa                         0 non-null      object  
 26  area_2                            0 non-null      object  
 27  area_km_2                         0 non-null      object  
 28  version_2                         0 non-null      object  
 29  area_hecta                        0 non-null      object  
 30  grupo                             0 non-null      object  
 31  begin                             0 non-null      float64 
 32  end                               0 non-null      float64 
 33  area_3                            0 non-null      float64 
 34  ha_2                              0 non-null      float64 
 35  sector                            0 non-null      object  
 36  geometry                          2333 non-null   geometry
 37  index_right                       2333 non-null   int64   
 38  gbifID                            2333 non-null   int64   
 39  datasetKey                        2333 non-null   object  
 40  occurrenceID                      2281 non-null   object  
 41  kingdom                           2333 non-null   object  
 42  phylum                            2333 non-null   object  
 43  class                             2333 non-null   object  
 44  order                             2333 non-null   object  
 45  family                            2320 non-null   object  
 46  genus                             2318 non-null   object  
 47  species                           2247 non-null   object  
 48  infraspecificEpithet              327 non-null    object  
 49  taxonRank                         2333 non-null   object  
 50  scientificName                    2333 non-null   object  
 51  verbatimScientificName            2333 non-null   object  
 52  verbatimScientificNameAuthorship  766 non-null    object  
 53  countryCode                       2333 non-null   object  
 54  locality                          1928 non-null   object  
 55  stateProvince                     2016 non-null   object  
 56  occurrenceStatus                  2333 non-null   object  
 57  individualCount                   311 non-null    float64 
 58  publishingOrgKey                  2333 non-null   object  
 59  decimalLatitude                   2333 non-null   float64 
 60  decimalLongitude                  2333 non-null   float64 
 61  coordinateUncertaintyInMeters     1510 non-null   float64 
 62  coordinatePrecision               12 non-null     float64 
 63  elevation                         266 non-null    float64 
 64  elevationAccuracy                 236 non-null    float64 
 65  depth                             6 non-null      float64 
 66  depthAccuracy                     6 non-null      float64 
 67  eventDate                         2297 non-null   object  
 68  day                               2152 non-null   float64 
 69  month                             2296 non-null   float64 
 70  year                              2297 non-null   float64 
 71  taxonKey                          2333 non-null   int64   
 72  speciesKey                        2247 non-null   float64 
 73  basisOfRecord                     2333 non-null   object  
 74  institutionCode                   2018 non-null   object  
 75  collectionCode                    2167 non-null   object  
 76  catalogNumber                     2201 non-null   object  
 77  recordNumber                      953 non-null    object  
 78  identifiedBy                      704 non-null    object  
 79  dateIdentified                    660 non-null    object  
 80  license                           2333 non-null   object  
 81  rightsHolder                      771 non-null    object  
 82  recordedBy                        2102 non-null   object  
 83  typeStatus                        0 non-null      object  
 84  establishmentMeans                968 non-null    object  
 85  lastInterpreted                   2333 non-null   object  
 86  mediaType                         448 non-null    object  
 87  issue                             2246 non-null   object  
dtypes: float64(21), geometry(1), int64(4), object(62)
memory usage: 1.6+ MB
# Mapa de ASP en las que hay registros de murciélagos
asp_murcielagos.plot(figsize=(20, 20))
<AxesSubplot:>
../../_images/geopandas_62_1.png

Seguidamente, se cuenta la cantidad de especies que hay en cada ASP.

# Conteo de especies en cada ASP
conteo_asp_especies = asp_murcielagos.groupby("nombre_asp").species.nunique()
conteo_asp_especies = conteo_asp_especies.reset_index() # para convertir la serie a dataframe

# Cambio de nombre de columna
conteo_asp_especies.rename(columns = {'species': 'especies'}, inplace = True)

# Despliegue de ASP por cantidad de especies
conteo_asp_especies.sort_values(by="especies", ascending=False)
nombre_asp especies
27 Golfo Dulce 54
1 Arenal Monteverde 32
45 Palo Verde 30
15 Corcovado 28
3 Barra del Colorado 27
34 La Selva 27
51 Santa Rosa 18
4 Braulio Carrillo 17
52 Tapanti-Macizo de la Muerte 15
54 Tortuguero 12
13 Chirripo 11
35 La Tirimbina 11
31 Internacional La Amistad 11
28 Guanacaste 10
49 Rio Macho 9
37 Los Santos 9
5 Cabo Blanco 9
43 Osa 8
16 Cordillera Volcanica Central 8
48 Rincon de la Vieja 7
33 La Ensenada 7
20 Curi cancha 7
42 Miravalles-Jorge Manuel Dengo 6
46 Piedras Blancas 6
38 Manuel Antonio 5
2 Barra Honda 5
53 Terraba-Sierpe 4
9 Carara 4
56 Volcan Poas 4
6 Cahuita 4
57 Volcan Turrialba 4
26 Golfito 3
41 Marino las Baulas de Guanacaste 2
39 Maquenque 2
29 Hacienda El Viejo 2
7 Caletas Ario 2
25 Gandoca Manzanillo 2
12 Cerros de La Carpintera 2
14 Cipanci 2
17 Corredor Fronterizo 2
32 Isla del Cano 1
47 Punta Rio Claro 1
55 Volcan Irazu 1
8 Cano Negro 1
10 Carate 1
11 Cerro de Escazu 1
50 Rio Oro 1
18 Cuenca Rio Siquirres 1
36 Lapa Verde 1
44 Pacuare Matina 1
21 Curu 1
22 Diria 1
40 Marino Ballena 1
24 Finca Baru del Pacifico 1
30 Humedal lacustrino Rio Canas 1
0 Arenal 1
19 Cuenca del Rio Abangares 0
23 Estero Puntarenas y Manglares Asociados 0

El método pandas.DataFrame.join() se usa seguidamente para unir el geodataframe de ASP con el dataframe que contiene el conteo de especies por ASP. Como resultado, el geodataframe de ASP tiene ahora la columna con la cantidad de especies.

# Join para agregar la columna con el conteo a la capa de ASP
asp_especies = asp.join(conteo_asp_especies.set_index('nombre_asp'), on='nombre_asp')
asp_especies
codigo nombre_asp cat_manejo estatus siglas_cat nombre_ac siglas_ac descripcio a_creacion n_creacion ... version_2 area_hecta grupo begin end area_3 ha_2 sector geometry especies
0 V03 Gandoca Manzanillo Refugio Nacional de Vida Silvestre Mixto RNVS Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1985 DE_16614_MAG ... None None None NaN NaN NaN NaN None POLYGON ((-82.64798 9.63982, -82.64790 9.63975... 2.0
1 V03 Gandoca Manzanillo Refugio Nacional de Vida Silvestre Mixto RNVS Area de Conservacion La Amistad Caribe ACLAC Area marina protegida 1985 DE_16614_MAG ... None None None NaN NaN NaN NaN None POLYGON ((-82.70297 9.66306, -82.70103 9.66254... 2.0
2 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area marina protegida 1970 DE_1236-A ... None None None NaN NaN NaN NaN None POLYGON ((-82.62743 9.81309, -82.78927 9.67376... 4.0
3 P16 Cahuita Parque Nacional Estatal PN Area de Conservacion La Amistad Caribe ACLAC Area terrestre protegida 1970 DE_1236-A ... None None None NaN NaN NaN NaN None POLYGON ((-82.81154 9.73568, -82.81160 9.73563... 4.0
4 B09 Bicentenario de la República - Pájaro Campana Reserva Biologica Estatal RB Area de Conservacion La Amistad Pacifico ACLAP Area terrestre protegida 2021 DE_42615_MINAE ... None None None NaN NaN NaN NaN None POLYGON ((-82.77351 8.94507, -82.81050 8.95856... NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
169 P10 Santa Rosa Parque Nacional Estatal PN Area de Conservacion Guanacaste ACG Area marina protegida 1966 Ley_3694 ... None None None NaN NaN NaN NaN None POLYGON ((-85.66202 10.73569, -85.66240 10.735... 18.0
170 P07 Marino las Baulas de Guanacaste Parque Nacional Estatal PN Area de Conservacion Tempisque ACT Area marina protegida 1991 DE_20518_MIRENEM ... None None None NaN NaN NaN NaN None POLYGON ((-85.86542 10.34860, -85.86536 10.348... 2.0
171 P20 Isla del Coco Parque Nacional Estatal PN Marina Cocos ACMC Isla 1978 DE_ 8748_A ... None None None NaN NaN NaN NaN None POLYGON ((-87.04703 5.55545, -87.04703 5.55491... NaN
172 P20 Isla del Coco Parque Nacional Estatal PN Marina Cocos ACMC Area marina protegida 2022 DE-43368-MINAE ... None None None NaN NaN NaN NaN None POLYGON ((-86.36701 4.52901, -88.98701 4.52902... NaN
173 A01 Montes Submarinos Area Marina de Manejo Estatal AMM Marina Cocos ACMC Area Marina de Manejo 2022 DE-43368-MINAE ... None None None NaN NaN NaN NaN None POLYGON ((-86.03201 6.57101, -86.03402 2.31691... NaN

174 rows × 38 columns

# Mapeo
asp_especies.plot(column="especies", 
            legend=True,
            cmap='OrRd', 
            scheme='quantiles',
            figsize=(20, 20)
            )
<AxesSubplot:>
../../_images/geopandas_67_1.png

Ejercicios#

Desarrolle los siguientes mapas, primero en QGIS y luego en Python con las funciones de la biblioteca GeoPandas.

  1. Mapa de coropletas que muestre la cantidad de casos positivos de COVID en cantones de Costa Rica.

  2. Mapa de coropletas que muestre la cantidad de casos positivos de COVID en provincias de Costa Rica.

  3. Mapa de coropletas que muestre la cantidad de especies de murciélagos en cantones de Costa Rica.

  4. Mapa de coropletas que muestre la cantidad de especies de murciélagos en provincias de Costa Rica.

  5. Mapa de coropletas que muestre la densidad de la red vial ( * ) en cantones de Costa Rica ( ** ).

  6. Mapa de coropletas que muestre la densidad de la red vial ( * ) en provincias de Costa Rica.

Además de los mapas, visualice los resultados en tablas y gráficos, cuando le ayuden a verificar o comprender mejor el problema a resolver.

( * ) La densidad de la red vial para un polígono se define como:
km de longitud de red vial / km2 de área
Por ejemplo, si un cantón tiene 500 km de longitud de red vial y un área de 1000 km2, la densidad de su red vial es 0.5.

( ** ) Puede encontrar una solución al problema del cálculo de la densidad de la red vial en https://github.com/gf0657-programacionsig/2022-ii-densidad-redvial.

Recursos de interés#

Unión (join) de datos

Agrupación de datos

Superposición (overlay) de datos