Patrones de distribución altitudinales de anfibios en Guatemala¶

Integrantes: Rosa Roldán, Habibi Orellana, Isabel Martínez

Descripción del proyecto y justificación¶

Los anfibios conforman el grupo de vertebrados mayormente amenazado a nivel mundial. El 41% de todas las especies evaluadas se encuentran bajo alguna categoría de amenaza, según la Unión Internacional para la Conservación de la Naturaleza –IUCN- (IUCN, 2024).

Los patrones de distribución de la diversidad biológica han sido objeto de estudio a lo largo de los años. Particularmente, se ha registrado que la distribución puede estar influenciada por factores históricos, evolutivos, restricciones de área y climáticos (Fu et al., 2006; Gutiérrez-Rodríguez et al., 2017). Siendo estos últimos de especial importancia para los anfibios, ya que son animales ectotermos que dependen de factores climáticos para el desarrollo de sus actividades. Estos factores climáticos varían a través de rangos altitudinales, por ello en este estudio, se propone analizar los patrones de distribución de anfibios en Guatemala. Este análisis servirá como base para estudiar los procesos detrás de estos patrones y sí, especialmente ocurren en respuesta al cambio climático, puesto que los rangos altitudinales de la fauna pueden cambiar (Sillero, 2021).

Antecedentes:¶

El estudio de este importante grupo ha llevado a utilizar la ciencia de datos, una herramienta que se ha implementado recientemente en el análisis y resolución de problemas ecológicos y ambientales. Un ejemplo de ello es con la Clase Amphibia y los efectos del cambio climático en este grupo. Riddell y colaboradores (2019) analizaron la tasa de perdida de agua en respuesta a la temperatura que experimentan las salamandras durante la época fría y principios de primavera, como potencial respuesta al cambio climático. Utilizando Python para realizar mapas de hotspot de temperatura con mayor riesgo a la desecación de las salamandras. Encontrando que las salamandras tienen una gran plasticidad para evitar la desecación.

Otro ejemplo de la aplicación de Python, es el de Olalla-Tárraga y colaboradores (2011) quienes investigaron con cuáles variables ambientales (Temperatura, precipitación, latitud, etc.) fue y era más probable la adaptación de mamíferos y anfibios, y de sus respectivos ancestros. El autor, utilizó Python para realizar los mapas de distribución de mamíferos y anfibios con base a su actual tolerancia al frío. Encontrando que los anfibios han mantenido su nicho ecológico pese a su sensibilidad fisiológica y limitada capacidad de dispersión.

El cambio climático es una de las principales amenazas de los anfibios; particularmente porque estos animales son sensibles a los cambios en la temperatura y humedad. Relacionado a ello, algunas especies han migrado a áreas más húmedas y frías en búsqueda de hábitats como en parches de bosques o en lo alto de las montañas (Re:wild et al., 2023). Relacionado con la elevación, Corier y colaboradores (2019) encontraron que en las Sierras Pampeanas Centrales, las dos especies de anfibios que vivían a mayores altitudes eran más vulnerables a la extición por el cambio climático. En otras investigaciones de distribución a lo largo de gradientes altitudinales, la tendencia para la mayoría de grupos taxonómicos, incluidos los anfibios, es la hipótesis del Dominio medio, en el que la riqueza disminuye desde el medio hacia los bordes (Wang et.al., 2009).

Descripción del problema y el objetivo¶

En Guatemala se encuentran 46 especies endémicas de anfibios, de 143 especies presentes en el país. Aunque se conoce que el cambio climático afecta a las especies, no se ha profundizado en los patrones de distribución con relación a la altitud y por tanto, su vulnerabilidad a los efectos del cambio climático.

La comprensión de los patrones y procesos relacionados con la diversidad de anfibios es uno de los primeros pasos hacia la conservación de las especies. Por ello, en este estudio, se propone describir el patrón de distribución de géneros de anfibios presentes en Guatemala y su relación con la altitud .

Descripción del conjunto de datos a utilizar con referencia formal a la fuente¶

Registros de especies de anfibios presentes en Guatemala, obtenidos a partir de especímenes depositados en colecciones científicas. Referencia: Sistema Global de Información sobre Biodiversidad (GBIF) GBIF.org (03 June 2024) GBIF Occurrence Download https://doi.org/10.15468/dl.4ux96e

Preprocesamiento y visualización de los datos:¶

In [ ]:
!pip install numpy
!pip install pandas
!pip install seaborn
!pip install scikit-learn
!pip install matplotlib
!pip install ydata-profiling
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (1.25.2)
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (2.0.3)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2023.4)
Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas) (2024.1)
Requirement already satisfied: numpy>=1.21.0 in /usr/local/lib/python3.10/dist-packages (from pandas) (1.25.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)
Requirement already satisfied: seaborn in /usr/local/lib/python3.10/dist-packages (0.13.1)
Requirement already satisfied: numpy!=1.24.0,>=1.20 in /usr/local/lib/python3.10/dist-packages (from seaborn) (1.25.2)
Requirement already satisfied: pandas>=1.2 in /usr/local/lib/python3.10/dist-packages (from seaborn) (2.0.3)
Requirement already satisfied: matplotlib!=3.6.1,>=3.4 in /usr/local/lib/python3.10/dist-packages (from seaborn) (3.7.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (4.52.4)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.4.5)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (24.0)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.2->seaborn) (2023.4)
Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.2->seaborn) (2024.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.4->seaborn) (1.16.0)
Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (1.2.2)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.10/dist-packages (from scikit-learn) (1.25.2)
Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-learn) (1.11.4)
Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn) (1.4.2)
Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn) (3.5.0)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (3.7.1)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (4.52.4)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.4.5)
Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.25.2)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (24.0)
Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
Collecting ydata-profiling
  Downloading ydata_profiling-4.8.3-py2.py3-none-any.whl (359 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 359.5/359.5 kB 6.5 MB/s eta 0:00:00
Requirement already satisfied: scipy<1.14,>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (1.11.4)
Requirement already satisfied: pandas!=1.4.0,<3,>1.1 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (2.0.3)
Requirement already satisfied: matplotlib<3.9,>=3.2 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (3.7.1)
Requirement already satisfied: pydantic>=2 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (2.7.2)
Requirement already satisfied: PyYAML<6.1,>=5.0.0 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (6.0.1)
Requirement already satisfied: jinja2<3.2,>=2.11.1 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (3.1.4)
Collecting visions[type_image_path]<0.7.7,>=0.7.5 (from ydata-profiling)
  Downloading visions-0.7.6-py3-none-any.whl (104 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.8/104.8 kB 10.8 MB/s eta 0:00:00
Requirement already satisfied: numpy<2,>=1.16.0 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (1.25.2)
Collecting htmlmin==0.1.12 (from ydata-profiling)
  Downloading htmlmin-0.1.12.tar.gz (19 kB)
  Preparing metadata (setup.py) ... done
Collecting phik<0.13,>=0.11.1 (from ydata-profiling)
  Downloading phik-0.12.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (686 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 686.1/686.1 kB 11.0 MB/s eta 0:00:00
Requirement already satisfied: requests<3,>=2.24.0 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (2.31.0)
Requirement already satisfied: tqdm<5,>=4.48.2 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (4.66.4)
Requirement already satisfied: seaborn<0.14,>=0.10.1 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (0.13.1)
Collecting multimethod<2,>=1.4 (from ydata-profiling)
  Downloading multimethod-1.11.2-py3-none-any.whl (10 kB)
Requirement already satisfied: statsmodels<1,>=0.13.2 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (0.14.2)
Collecting typeguard<5,>=3 (from ydata-profiling)
  Downloading typeguard-4.3.0-py3-none-any.whl (35 kB)
Collecting imagehash==4.3.1 (from ydata-profiling)
  Downloading ImageHash-4.3.1-py2.py3-none-any.whl (296 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.5/296.5 kB 13.5 MB/s eta 0:00:00
Requirement already satisfied: wordcloud>=1.9.1 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (1.9.3)
Collecting dacite>=1.8 (from ydata-profiling)
  Downloading dacite-1.8.1-py3-none-any.whl (14 kB)
Requirement already satisfied: numba<1,>=0.56.0 in /usr/local/lib/python3.10/dist-packages (from ydata-profiling) (0.58.1)
Requirement already satisfied: PyWavelets in /usr/local/lib/python3.10/dist-packages (from imagehash==4.3.1->ydata-profiling) (1.6.0)
Requirement already satisfied: pillow in /usr/local/lib/python3.10/dist-packages (from imagehash==4.3.1->ydata-profiling) (9.4.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2<3.2,>=2.11.1->ydata-profiling) (2.1.5)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (1.2.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (4.52.4)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (1.4.5)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (24.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (2.8.2)
Requirement already satisfied: llvmlite<0.42,>=0.41.0dev0 in /usr/local/lib/python3.10/dist-packages (from numba<1,>=0.56.0->ydata-profiling) (0.41.1)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas!=1.4.0,<3,>1.1->ydata-profiling) (2023.4)
Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas!=1.4.0,<3,>1.1->ydata-profiling) (2024.1)
Requirement already satisfied: joblib>=0.14.1 in /usr/local/lib/python3.10/dist-packages (from phik<0.13,>=0.11.1->ydata-profiling) (1.4.2)
Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2->ydata-profiling) (0.7.0)
Requirement already satisfied: pydantic-core==2.18.3 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2->ydata-profiling) (2.18.3)
Requirement already satisfied: typing-extensions>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from pydantic>=2->ydata-profiling) (4.12.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.24.0->ydata-profiling) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.24.0->ydata-profiling) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.24.0->ydata-profiling) (2.0.7)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.24.0->ydata-profiling) (2024.2.2)
Requirement already satisfied: patsy>=0.5.6 in /usr/local/lib/python3.10/dist-packages (from statsmodels<1,>=0.13.2->ydata-profiling) (0.5.6)
Requirement already satisfied: attrs>=19.3.0 in /usr/local/lib/python3.10/dist-packages (from visions[type_image_path]<0.7.7,>=0.7.5->ydata-profiling) (23.2.0)
Requirement already satisfied: networkx>=2.4 in /usr/local/lib/python3.10/dist-packages (from visions[type_image_path]<0.7.7,>=0.7.5->ydata-profiling) (3.3)
Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from patsy>=0.5.6->statsmodels<1,>=0.13.2->ydata-profiling) (1.16.0)
Building wheels for collected packages: htmlmin
  Building wheel for htmlmin (setup.py) ... done
  Created wheel for htmlmin: filename=htmlmin-0.1.12-py3-none-any.whl size=27080 sha256=7e346929b220e593a7f79959886f96b952a8b37d3ab262891827f9b2f1682168
  Stored in directory: /root/.cache/pip/wheels/dd/91/29/a79cecb328d01739e64017b6fb9a1ab9d8cb1853098ec5966d
Successfully built htmlmin
Installing collected packages: htmlmin, typeguard, multimethod, dacite, imagehash, visions, phik, ydata-profiling
Successfully installed dacite-1.8.1 htmlmin-0.1.12 imagehash-4.3.1 multimethod-1.11.2 phik-0.12.4 typeguard-4.3.0 visions-0.7.6 ydata-profiling-4.8.3
In [ ]:
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets
from ydata_profiling import ProfileReport
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
%matplotlib inline

Procesamiento de datos:¶

In [ ]:
#Importar datos desde archivo csv
df = pd.read_csv('Anfibios_guatemala.csv', on_bad_lines='skip')
display (df)
gbifID\tdatasetKey\toccurrenceID\tkingdom\tphylum\tclass\torder\tfamily\tgenus\tspecies\tinfraspecificEpithet\ttaxonRank\tscientificName\tverbatimScientificName\tverbatimScientificNameAuthorship\tcountryCode\tlocality\tstateProvince\toccurrenceStatus\tindividualCount\tpublishingOrgKey\tdecimalLatitude\tdecimalLongitude\tcoordinateUncertaintyInMeters\tcoordinatePrecision\televation\televationAccuracy\tdepth\tdepthAccuracy\teventDate\tday\tmonth\tyear\ttaxonKey\tspeciesKey\tbasisOfRecord\tinstitutionCode\tcollectionCode\tcatalogNumber\trecordNumber\tidentifiedBy\tdateIdentified\tlicense\trightsHolder\trecordedBy\ttypeStatus\testablishmentMeans\tlastInterpreted\tmediaType\tissue
621067328\t9cd0014c-b7b1-4ed1-bef7-0225acfa4ef2\turn:catalog:SMNS:Herpetologie:2260\tAnimalia\tChordata\tAmphibia\tCaudata\tPlethodontidae\tBolitoglossa\t\t\tGENUS\tBolitoglossa Duméril Bibron & Duméril 1854\tBolitoglossa\t\tGT\tGuatemala\t\tPRESENT\t\t99ea0c90-61e5-11dc-a64c-b8a03c50a862\t15.75\t-90.25\t272837.0\t\t\t\t\t\t1879\t\t\t1879\t2431243\t\tPRESERVED_SPECIMEN\tSMNS\tHerpetologie\t2260\t\t\t\tCC_BY_NC_4_0\t\tSarg F.\t\tnative\t2024-04-29T09:24:29.358Z\t\tCOL...
621067316\t9cd0014c-b7b1-4ed1-bef7-0225acfa4ef2\turn:catalog:SMNS:Herpetologie:2247\tAnimalia\tChordata\tAmphibia\tGymnophiona\tDermophiidae\tDermophis\tDermophis mexicanus\t\tSPECIES\tDermophis mexicanus (Duméril & Bibron 1841)\tDermophis mexicanus\t\tGT\tCahabon\tAlta Verapaz\tPRESENT\t\t99ea0c90-61e5-11dc-a64c-b8a03c50a862\t15.56667\t-89.81667\t3568.0\t\t\t\t\t\t1885\t\t\t1885\t2430910\t2430910\tPRESERVED_SPECIMEN\tSMNS\tHerpetologie\t2247\t\t\t\tCC_BY_NC_4_0\t\tSarg F.\t\tnative\t2024-04-29T09:24:29.350Z\t\tCOLLECTION_MATCH_NONE NaN
621067314\t9cd0014c-b7b1-4ed1-bef7-0225acfa4ef2\turn:catalog:SMNS:Herpetologie:2245\tAnimalia\tChordata\tAmphibia\tGymnophiona\tDermophiidae\tGymnopis\tGymnopis syntrema\t\tSPECIES\tGymnopis syntrema (Cope 1866)\tGymnopis syntrema\t\tGT\tGuatemala\t\tPRESENT\t\t99ea0c90-61e5-11dc-a64c-b8a03c50a862\t15.75\t-90.25\t272837.0\t\t\t\t\t\t1881\t\t\t1881\t2430979\t2430979\tPRESERVED_SPECIMEN\tSMNS\tHerpetologie\t2245\t\t\t\tCC_BY_NC_4_0\t\tSarg F.\t\tnative\t2024-04-29T09:24:29.364Z\t\tCOLLECTION_MATCH_NONE NaN
621067296\t9cd0014c-b7b1-4ed1-bef7-0225acfa4ef2\turn:catalog:SMNS:Herpetologie:2227\tAnimalia\tChordata\tAmphibia\tAnura\tCraugastoridae\tCraugastor\tCraugastor rugulosus\t\tSPECIES\tEleutherodactylus rugulosus (Cope 1870)\tEleutherodactylus rugulosus\t\tGT\tGuatemala\t\tPRESENT\t\t99ea0c90-61e5-11dc-a64c-b8a03c50a862\t15.75\t-90.25\t272837.0\t\t\t\t\t\t1881\t\t\t1881\t2430832\t2430830\tPRESERVED_SPECIMEN\tSMNS\tHerpetologie\t2227\t\t\t\tCC_BY_NC_4_0\t\tSarg F.\t\tnative\t2024-04-29T09:24:29.386Z\t\tCOLLECTION_MATCH_NONE NaN
621067027\t9cd0014c-b7b1-4ed1-bef7-0225acfa4ef2\turn:catalog:SMNS:Herpetologie:2033\tAnimalia\tChordata\tAmphibia\tAnura\tRanidae\tLithobates\tLithobates pipiens\t\tSPECIES\tRana pipiens Schreber 1782\tRana pipiens\t\tGT\tAlta Verapaz\tAlta Verapaz\tPRESENT\t\t99ea0c90-61e5-11dc-a64c-b8a03c50a862\t15.6\t-90.08333\t87568.0\t\t\t\t\t\t1880\t\t\t1880\t2427186\t2427185\tPRESERVED_SPECIMEN\tSMNS\tHerpetologie\t2033\t\t\t\tCC_BY_NC_4_0\t\tSarg F.\t\tnative\t2024-04-29T09:24:29.524Z\t\tCOLLECTION_MATCH_NONE NaN
... ... ... ...
1061341529\t8935e64a-f762-11e1-a439-00145eb45e9a\thttp://arctos.database.museum/guid/UCM:Herp:22159?seid=2488891\tAnimalia\tChordata\tAmphibia\tAnura\tHylidae\tDendropsophus\tDendropsophus ebraccatus\t\tSPECIES\tDendropsophus ebraccatus (Cope 1874)\tDendropsophus ebraccatus\t\tGT\tSayaxche\tPeten\tPRESENT\t\t4cadac10-3e7b-11d9-8439-b8a03c50a862\t16.53923\t-90.18926\t96000.0\t\t\t\t\t\t1963-08-11/1963-08-13\t\t8\t1963\t2428420\t2428420\tPRESERVED_SPECIMEN\tUCM\tHerp\tUCM:Herp:22159\t\tEduardo C. Welling\t\tCC0_1_0\t\tCollector(s): Eduardo C. Welling\t\t\t2024-05-10T07:15:28.187Z\t\tGEODETIC_DATUM_ASSUMED_WGS84;CONTINENT_DERIVED_FROM_COORDINATES;INSTITUTION_MATCH_FUZZY;COLLECTION_MATCH_FUZZY NaN NaN
1061341520\t8935e64a-f762-11e1-a439-00145eb45e9a\thttp://arctos.database.museum/guid/UCM:Herp:22155?seid=2488859\tAnimalia\tChordata\tAmphibia\tAnura\tBufonidae\tIncilius\tIncilius valliceps\t\tSPECIES\tIncilius valliceps (Wiegmann 1833)\tIncilius valliceps\t\tGT\tSayaxche\tPeten\tPRESENT\t\t4cadac10-3e7b-11d9-8439-b8a03c50a862\t16.53923\t-90.18926\t96000.0\t\t\t\t\t\t1963-08-11/1963-08-13\t\t8\t1963\t2422389\t2422389\tPRESERVED_SPECIMEN\tUCM\tHerp\tUCM:Herp:22155\t\tEmily Braker\t2019-04-04T00:00:00\tCC0_1_0\t\tCollector(s): Eduardo C. Welling\t\t\t2024-05-10T07:15:32.635Z\t\tGEODETIC_DATUM_ASSUMED_WGS84;CONTINENT_DERIVED_FROM_COORDINATES;INSTITUTION_MATCH_FUZZY;COLLECTION_MATCH_FUZZY NaN NaN
1061341508\t8935e64a-f762-11e1-a439-00145eb45e9a\thttp://arctos.database.museum/guid/UCM:Herp:22172?seid=2488938\tAnimalia\tChordata\tAmphibia\tAnura\tHylidae\tSmilisca\tSmilisca baudinii\t\tSPECIES\tSmilisca baudinii (Duméril & Bibron 1841)\tSmilisca baudinii\t\tGT\tSayaxche\tPeten\tPRESENT\t\t4cadac10-3e7b-11d9-8439-b8a03c50a862\t16.53923\t-90.18926\t96000.0\t\t\t\t\t\t1963-08-11/1963-08-13\t\t8\t1963\t2428680\t2428680\tPRESERVED_SPECIMEN\tUCM\tHerp\tUCM:Herp:22172\t\tEmily Braker\t2019-04-04T00:00:00\tCC0_1_0\t\tCollector(s): Eduardo C. Welling\t\t\t2024-05-10T07:15:37.080Z\t\tGEODETIC_DATUM_ASSUMED_WGS84;CONTINENT_DERIVED_FROM_COORDINATES;INSTITUTION_MATCH_FUZZY;COLLECTION_MATCH_FUZZY NaN NaN
1061341504\t8935e64a-f762-11e1-a439-00145eb45e9a\thttp://arctos.database.museum/guid/UCM:Herp:22157?seid=2488861\tAnimalia\tChordata\tAmphibia\tAnura\tBufonidae\tIncilius\tIncilius valliceps\t\tSPECIES\tIncilius valliceps (Wiegmann 1833)\tIncilius valliceps\t\tGT\tSayaxche\tPeten\tPRESENT\t\t4cadac10-3e7b-11d9-8439-b8a03c50a862\t16.53923\t-90.18926\t96000.0\t\t\t\t\t\t1963-08-11/1963-08-13\t\t8\t1963\t2422389\t2422389\tPRESERVED_SPECIMEN\tUCM\tHerp\tUCM:Herp:22157\t\tEmily Braker\t2019-04-04T00:00:00\tCC0_1_0\t\tCollector(s): Eduardo C. Welling\t\t\t2024-05-10T07:15:41.503Z\t\tGEODETIC_DATUM_ASSUMED_WGS84;CONTINENT_DERIVED_FROM_COORDINATES;INSTITUTION_MATCH_FUZZY;COLLECTION_MATCH_FUZZY NaN NaN
1061341483\t8935e64a-f762-11e1-a439-00145eb45e9a\thttp://arctos.database.museum/guid/UCM:Herp:22142?seid=2488928\tAnimalia\tChordata\tAmphibia\tAnura\tRhinophrynidae\tRhinophrynus\tRhinophrynus dorsalis\t\tSPECIES\tRhinophrynus dorsalis Duméril & Bibron 1841\tRhinophrynus dorsalis\t\tGT\tSayaxche\tPeten\tPRESENT\t\t4cadac10-3e7b-11d9-8439-b8a03c50a862\t16.53923\t-90.18926\t96000.0\t\t\t\t\t\t1963-08-11/1963-08-13\t\t8\t1963\t2426369\t2426369\tPRESERVED_SPECIMEN\tUCM\tHerp\tUCM:Herp:22142\t\tEduardo C. Welling\t\tCC0_1_0\t\tCollector(s): Eduardo C. Welling\t\t\t2024-05-10T07:15:40.680Z\t\tGEODETIC_DATUM_ASSUMED_WGS84;CONTINENT_DERIVED_FROM_COORDINATES;INSTITUTION_MATCH_FUZZY;COLLECTION_MATCH_FUZZY NaN NaN

17165 rows × 1 columns

In [ ]:
df = pd.read_csv('Anfibios_guatemala.csv', delimiter='\t')
<ipython-input-7-117b5b48f580>:1: DtypeWarning: Columns (43,46,48) have mixed types. Specify dtype option on import or set low_memory=False.
  df = pd.read_csv('Anfibios_guatemala.csv', delimiter='\t')
In [ ]:
#Informe con pandas-profiling
profile = ProfileReport(df, title="Registros de anfibios de Guatemala en colecciones científicas", explorative=True)

#Mostrar el informe en un notebook
profile.to_notebook_iframe()
Summarize dataset:   0%|          | 0/5 [00:00<?, ?it/s]
Generate report structure:   0%|          | 0/1 [00:00<?, ?it/s]
Render HTML:   0%|          | 0/1 [00:00<?, ?it/s]
In [ ]:
df.describe()
Out[ ]:
gbifID individualCount decimalLatitude decimalLongitude coordinateUncertaintyInMeters coordinatePrecision elevation elevationAccuracy depth depthAccuracy day month year taxonKey speciesKey
count 2.132400e+04 1768.000000 21324.000000 21324.000000 18337.000000 159.000000 13116.000000 12912.000000 1.0 1.0 19458.000000 19960.000000 20797.000000 2.132400e+04 2.031800e+04
mean 1.333174e+09 3.758484 15.136067 -91.272721 12160.113752 0.000953 2264.048429 30.302021 0.0 0.0 15.369051 6.401052 1970.313218 3.253992e+06 2.639862e+06
std 6.605474e+08 5.638109 0.520511 0.865940 72401.025923 0.008225 728.050654 40.062686 NaN NaN 8.954761 2.850401 19.088412 2.268763e+06 1.036484e+06
min 2.231961e+08 0.000000 13.801667 -92.146228 3.000000 0.000010 0.000000 0.000000 0.0 0.0 1.000000 1.000000 1865.000000 9.520000e+02 2.421778e+06
25% 1.145401e+09 1.000000 14.930000 -91.870000 1000.000000 0.000010 1946.000000 0.000000 0.0 0.0 8.000000 5.000000 1970.000000 2.430910e+06 2.430856e+06
50% 1.145430e+09 1.000000 14.944080 -91.733333 3000.000000 0.000010 2450.000000 12.500000 0.0 0.0 15.000000 7.000000 1973.000000 2.431323e+06 2.431306e+06
75% 1.145485e+09 4.000000 15.412550 -90.912340 3470.000000 0.000010 2750.000000 50.000000 0.0 0.0 24.000000 8.000000 1977.000000 2.431410e+06 2.431387e+06
max 4.850667e+09 49.000000 17.486306 -88.339167 999999.000000 0.100000 3718.570000 400.000000 0.0 0.0 31.000000 12.000000 2022.000000 1.136217e+07 1.121335e+07
In [ ]:
df.shape
Out[ ]:
(21324, 50)
In [ ]:
# Retornar el número de valores únicos en cada columna del dataframe df\
df.nunique( )
Out[ ]:
gbifID                              21324
datasetKey                             29
occurrenceID                        21233
kingdom                                 1
phylum                                  1
class                                   1
order                                   3
family                                 13
genus                                  45
species                               161
infraspecificEpithet                    8
taxonRank                               5
scientificName                        257
verbatimScientificName                443
verbatimScientificNameAuthorship       83
countryCode                             1
locality                             2070
stateProvince                          54
occurrenceStatus                        1
individualCount                        41
publishingOrgKey                       28
decimalLatitude                      1519
decimalLongitude                     1506
coordinateUncertaintyInMeters         618
coordinatePrecision                     3
elevation                             531
elevationAccuracy                      51
depth                                   1
depthAccuracy                           1
eventDate                            1699
day                                    31
month                                  12
year                                   95
taxonKey                              257
speciesKey                            161
basisOfRecord                           1
institutionCode                        24
collectionCode                         21
catalogNumber                       21306
recordNumber                        17094
identifiedBy                           70
dateIdentified                        235
license                                 3
rightsHolder                            8
recordedBy                            776
typeStatus                              3
establishmentMeans                      1
lastInterpreted                      9320
mediaType                               1
issue                                  80
dtype: int64

Gráficos¶

Figura 1. Mapa de calor de fatos faltantes¶

In [ ]:
#datos faltantes

import seaborn as sns
import matplotlib.pyplot as plt

mask = df.isnull()

sns.heatmap(mask, cbar=False,  cmap='viridis')
plt.xlabel('Columnas')
plt.ylabel('Filas')
plt.title('Mapa de Calor de Datos Faltantes')
Out[ ]:
Text(0.5, 1.0, 'Mapa de Calor de Datos Faltantes')
No description has been provided for this image
In [ ]:
missing_values = df.isnull()

missing_summary = df.isnull().sum()
print("Resumen de valores faltantes por columna:")
print(missing_summary)
Resumen de valores faltantes por columna:
gbifID                                  0
datasetKey                              0
occurrenceID                           91
kingdom                                 0
phylum                                  0
class                                   0
order                                   0
family                                  5
genus                                  10
species                              1006
infraspecificEpithet                20068
taxonRank                               0
scientificName                          0
verbatimScientificName                 15
verbatimScientificNameAuthorship    19927
countryCode                             0
locality                               65
stateProvince                         199
occurrenceStatus                        0
individualCount                     19556
publishingOrgKey                        0
decimalLatitude                         0
decimalLongitude                        0
coordinateUncertaintyInMeters        2987
coordinatePrecision                 21165
elevation                            8208
elevationAccuracy                    8412
depth                               21323
depthAccuracy                       21323
eventDate                             462
day                                  1866
month                                1364
year                                  527
taxonKey                                0
speciesKey                           1006
basisOfRecord                           0
institutionCode                        19
collectionCode                         17
catalogNumber                           0
recordNumber                         3408
identifiedBy                         4154
dateIdentified                       4936
license                                 0
rightsHolder                        20783
recordedBy                            599
typeStatus                          20877
establishmentMeans                  19779
lastInterpreted                         0
mediaType                           19152
issue                                   9
dtype: int64

Figura 2. Mapa de ubicación geografica de los anfibios.¶

In [ ]:
import pandas as pd
import matplotlib.pyplot as plt


cols_to_include = [col for col in range(43)] + [col for col in range(44, 46)] + [col for col in range(47, 48)]


df = pd.read_csv('Anfibios_guatemala.csv', delimiter='\t', usecols=cols_to_include)


df = df.dropna(subset=['decimalLatitude', 'decimalLongitude'])


plt.figure(figsize=(10, 6))
plt.scatter(df['decimalLongitude'], df['decimalLatitude'], alpha=0.5)
plt.xlabel('Longitud')
plt.ylabel('Latitud')
plt.title('Ubicación de los datos geográficos')
plt.grid(True)
plt.show()
No description has been provided for this image

Figura 3. Mapa de correlación entre géneros de anfibios y elevación.¶

In [ ]:
import pandas as pd
import matplotlib.pyplot as plt

cols_to_include = [col for col in range(43)] + [col for col in range(44, 46)] + [col for col in range(47, 48)]

df = pd.read_csv('Anfibios_guatemala.csv', delimiter='\t', usecols=cols_to_include)
df = df.dropna(subset=['genus', 'elevation'])

plt.figure(figsize=(10, 6))
plt.scatter(df['genus'], df['elevation'], alpha=0.5)
plt.xlabel('Género')
plt.ylabel('Elevación')
plt.title('Correlación entre género y elevación')
plt.xticks(rotation=90)
plt.grid(True)
plt.show()
No description has been provided for this image

Figura 4. Distribución de familias de anfibios por año y elevación¶

In [ ]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('Anfibios_guatemala.csv', delimiter='\t')
df = df.dropna(subset=['year', 'elevation', 'family'])

unique_families = df['family'].unique()
num_families = len(unique_families)

color_palette = sns.color_palette("hls", num_families)
color_dict = dict(zip(unique_families, color_palette))

plt.figure(figsize=(12, 8))
sns.scatterplot(x='year', y='elevation', hue='family', data=df, palette=color_dict, alpha=0.6, s=100)

plt.xlabel('Año de Colecta')
plt.ylabel('Elevación')
plt.title('Distribución de familias de anfibios por año y elevación')

plt.legend(title='Familias', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.grid(True)
plt.show()
<ipython-input-55-c82b103af38a>:5: DtypeWarning: Columns (43,46,48) have mixed types. Specify dtype option on import or set low_memory=False.
  df = pd.read_csv('Anfibios_guatemala.csv', delimiter='\t')
No description has been provided for this image

Descripción de los resultados obtenidos¶

Se utitlizaron datos obtenidos del portal -GBIF- y se realizó un mapa de calor de datos faltantes (figura 1). Se observa que hay muchos datos faltantes dentro de nuestro data set. Cabe notar, que existen varios registros (8,208) que no cuentan con el dato de elevación, lo que restringe nuestro estudio. Por otro lado, solamente 5 y 10 registros no cuentan con el dato de familia y género, respectivamente, lo cual facilitó nuestro análisis a ese nivel.

En la figura 2, se observó que si bien hay varios registros de anfibios a nivel nacional, aún existen varias localidades en los que existen vacíos de información. Por ejemplo, en la región sur de Petén y la región central del país.

En la figura 3, se observó que la mayor cantidad de registros de géneros de anfibios se encuentran entre 500 a 2,000 msnm, lo cual se relaciona con la estadística descriptiva, en el que la media es de ~ 2,264 msnm y la mediana de 2,450 msnm. Ésto puede explicarse por la hipótesis del Dominio medio, en la se plantea que la riqueza disminuye desde el medio altitudinal hacia los bordes (Wang et.al., 2009). Sin embargo, se requieren estudios con un diseño experimental que permita poner a prueba esta hipótesis.

Se observó que los géneros Inicilus, Bolitoglossa, Craugrastor y Plectrohyla tenían rangos de distribución en elevaciones variadas, que oscilaban entre más de 500 y 3500 metros sobre el nivel del mar (msnm), como se muestra en la Figura 3. A diferencia de los otros géneros, que estaban dispersos y no presentaban una tendencia marcada en cuanto a la elevación. En el caso del género Pseudoeurycea se observó que su rango de distribución iba desde más de 2000 hasta más de 3500 msnm. Ningún otro género superaba los 3500 msnm.Pseudoeurycea, junto con Bolitoglossa, pertenecía a la familia Plethodontidae.

En la Figura 4 se observó que la familia Plethodontidae fue una de las más colectadas entre los años 1960 y 1980, encontrándose principalmente en un rango de elevación de 1000 a >3500 msnm. De nuevo, fue la más colectada entre los años 2000 y 2020, aunque su rango de elevación disminuyó a <500 msnm y a <3500 msnm. También la familia Craugastoridea fue una de las más colectadas en el período de 2000 a 2020, entre un rango de 500 a >2500 msnm. Sin embargo, para esta familia, entre 1690 y 1980 se observa menos volumen de observaciones reportadas en un rago de 1000 y 2000 msnm.

Conclusiones¶

La distribución altitudinal de los anfibios de Guatemala muestran un patrón semejante a la hipótesis del Dominio medio, en el que hay una mayor riqueza en elevaciones intermedias.

En Guatemala, el género Pseudoeurycea se encuentra en elevaciones mayores, en comparación al resto de géneros analizados.

A partir de los años 2000, los anfibios de la familia Plethodontidae se han reportado en elevaciones más bajas, en comparación con años anteriores.

Identificar las regiones donde no sé conoce la biovidersidad de anfibios es relevante para proteger este grupo, pues se debe buscar integrar estas áreas en los esfuerzos de conservación que se realizan o puedan realizarse.

Referencias bibliográficas¶

Fu, C., Hua, X., Li, J., Chang, Z., Pu, Z., & Chen, J. (2006). Elevational patterns of frog species richness and endemic richness in the Hengduan Mountains, China: geometric contraints, area and climate effects. Ecography, 29, 919-927.

Gutiérrez-Rodríguez, J., Barbosa, M.A., & Martínez-Solano, I. (2017). Present and past climatic effects on the current distribution and genetic diversity of the Iberian spadefoot toad (Pelobates cultripes): an integrative approach. Journal of Biogeography, 44, 245–258.

IUCN 2024. The IUCN Red List of Threatened Species. Version 2023-1. https://www.iucnredlist.org

Re:wild, Synchronicity Earth, IUCN SSC Amphibian Specialist Group. (2023). State of the World's Amphibians: The Second Global Amphibian Assessment. Texas, USA: Re:wild.

Sillero, N. (2021). Climate change in action: local elevational shifts on Iberian amphibians and reptiles. Reg Environ Change 21, 101. https://doi.org/10.1007/s10113-021-01831-w

Wang, X., Fang, J.& Tang, Z. (2009). The mid-domain effect hypothesis: models, evidence and limitations[J]. Biodiv Sci, 17(6): 568-578.