geopandas: paquete para manipulación y análisis de datos vectoriales
Contents
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:>

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:>

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:>

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:>

Ejercicios#
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).
Cargue cada capa en un geodataframe.
Examine la estructura y el contenido de cada conjunto de datos.
Despliegue algunos mapas para cada capa, utilizando las funciones de matplotlib y geopandas.
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:>

Á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:>

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:>

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:>

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:>

Ejercicios#
Desarrolle los siguientes mapas, primero en QGIS y luego en Python con las funciones de la biblioteca GeoPandas.
Mapa de coropletas que muestre la cantidad de casos positivos de COVID en cantones de Costa Rica.
Mapa de coropletas que muestre la cantidad de casos positivos de COVID en provincias de Costa Rica.
Mapa de coropletas que muestre la cantidad de especies de murciélagos en cantones de Costa Rica.
Mapa de coropletas que muestre la cantidad de especies de murciélagos en provincias de Costa Rica.
Mapa de coropletas que muestre la densidad de la red vial ( * ) en cantones de Costa Rica ( ** ).
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