Proyecto Final del Curso Introducción a Python


Título: Análisis exploratorio de datos de registros de especies de la familia Hylidae para su uso en la generación de información sobre biodiversidad por medio de herramientas de ciencia de datos.

Estudiantes: Hersson Ramírez Molina y Sylvia Rodríguez Abarca

Descripción del proyecto y justificación

En el presente documento se analiza un dataset proveniente de la plataforma de ciencia ciudadana iNaturalist, la cual ha demostrado ser una fuente de datos confiable sobre biodiversidad, así como otras plataformas de libre acceso como GBIF o eBird (Gattarola et al., 2019), con las que es posible alimentar la cantidad de información existente sobre la biodiversidad del mundo. Este tipo de plataformas de libre acceso se han venido utilizando como una herramienta para la generación de conocimiento, siendo una forma de obtención de datos que requiere de un bajo presupuesto, evitando así la inversión necesaria para metodologías de colecta de datos en campo (Forti & Szabo, 2023). Por ende, son también una herramienta muy valiosa para los procesos de enseñanza en cuanto a ciencia de datos (Heberling et al., 2021). El conjunto de datos descargado de la plataforma se basa en reportes de la familia de ranas Hylidae en Costa Rica, los cuales fueron analizados para ver variables como cantidad de especies reportadas de dicha familia en el país y en cada una de sus provincias, así como la cantidad de reportes para el país y de la misma forma para cada una de las provincias. Además, se analiza el estado de los reportes de cada especie con el fin de observar la cantidad de datos confirmados a nivel de investigación y la cantidad de registros que aún necesitan ser identificadas, con el fin de evidenciar la cantidad de datos utilizable a nivel científico al momento de la descarga del conjunto de datos. Así mismo se intenta analizar la posibilidad de que podría existir una dificultad en la identificación de algunas especies según sus rasgos morfológicos.

Antecedentes

Junto con el desarrollo de la tecnología ha crecido un nuevo paradigma para la generación e integración de información sobre biodiversidad, con el que es posible desarrollar información científica y aportar al estado y conservación de muchas especies alrededor del mundo (Soberón & Peterson, 2012; Zhang, 2017; Heberling et al., 2021; Wangyal, 2022). La utilización de los conjuntos de datos llamados macrodatos ha venido a ofrecer una manera valiosa de aportar información y llenar vacíos en muchos ámbitos relacionados con la biodiversidad (Zhang, 2017). Un ejemplo de la utilidad de estas herramientas es la posibilidad de contar con el esfuerzo de la población en general por medio de la ciencia ciudadana, usando conjuntos de datos tomados por ciudadanos de un lugar para responder millones de interrogantes sobre biodiversidad, como lo realizan los investigadores Forti y Szabo (2023), quienes analizan un conjunto de datos provenientes de iNaturalist con el objetivo de observar la situación de un grupo de anfibios en Brasil.

Descripción del problema y objetivo

El grupo de los anfibios ha sido ampliamente utilizado como indicador de la calidad ambiental debido a las características sensibles con las que cuentan y las muchas amenazas a las que se enfrentan, como su dependencia a los cuerpos de agua para completar su ciclo de vida y la calidad de la misma (Barreto, 2021; Laufer, 2021). Por lo que nuestro objetivo es evaluar la calidad de los datos de reportes de la familia de ranas Hylidae, con el fin de averiguar su potencial para la evaluación del estado de sus poblaciones en el país por medio de herramientas de análisis de datos.

Descripción de los datos.

Se utilizó un conjunto de datos descargado de iNaturalist, el cual contiene todos los registros de presencia de especies de ranas de la familia Hylidae en Costa Rica. De dicho conjunto de datos fueron selecciondas para el análisis las columnas con información de su identificación (especie), la provincia en dónde se registró, las coordenadas (latitud y longitud) y el grado de calidad del registro.

iNaturalist community. Observaciones de la familia Hylidae de Costa Rica. Exportada de https://costarica.inaturalist.org en 30 de mayo de 2024.

In [43]:
import pandas as pd
# Leemos el archivo CSV en un DataFrame de pandas
df = pd.read_csv('Hylidae.csv')
In [44]:
# Mostramos las primeras 20 filas del DataFrame
df.head(20)
Out[44]:
id observed_on_string observed_on time_observed_at time_zone user_id user_login user_name created_at updated_at ... positioning_device place_county_name place_state_name species_guess scientific_name common_name iconic_taxon_name taxon_id taxon_class_name taxon_family_name
0 11957 2007-01-05 2007-01-05 NaN Pacific Time (US & Canada) 642 biosam Sam McNally 2011-03-03 20:04:37 UTC 2017-08-02 06:54:11 UTC ... manual Sarapiqui, Heredia Costa Rica Heredia Olive Snouted-Treefrog Scinax elaeochroa rana arborícola hocico oliva Amphibia 134631 Amphibia Hylidae
1 14994 Jan 6, 2002 2002-01-06 NaN Eastern Time (US & Canada) 1026 aamuir NaN 2011-04-21 23:32:10 UTC 2015-05-13 03:15:18 UTC ... NaN Golfito Puntarenas Drab Treefrog Smilisca sordida rana arborícola parda Amphibia 24276 Amphibia Hylidae
2 18207 2008-05-19 2008-05-19 NaN Eastern Time (US & Canada) 1325 jplarry J.P. Lawrence 2011-05-25 18:03:53 UTC 2018-07-19 02:37:53 UTC ... NaN Sarapiqui, Heredia Costa Rica Heredia Boana rufitela Boana rufitela Rana Arborícola de La Zona del Canal Amphibia 555152 Amphibia Hylidae
3 18208 2008-05-19 2008-05-19 NaN Eastern Time (US & Canada) 1325 jplarry J.P. Lawrence 2011-05-25 18:09:51 UTC 2018-09-11 05:29:17 UTC ... NaN Sarapiqui, Heredia Costa Rica Heredia Parachuting Red-eyed Leaf Frog Agalychnis saltator NaN Amphibia 23699 Amphibia Hylidae
4 18217 2008-05-21 2008-05-21 NaN Eastern Time (US & Canada) 1325 jplarry J.P. Lawrence 2011-05-25 18:43:40 UTC 2019-05-20 09:58:01 UTC ... NaN Sarapiqui, Heredia Costa Rica Heredia Olive Snouted Tree Frog Scinax elaeochroa rana arborícola hocico oliva Amphibia 134631 Amphibia Hylidae
5 18219 2008-05-22 2008-05-22 NaN Eastern Time (US & Canada) 1325 jplarry J.P. Lawrence 2011-05-25 18:45:24 UTC 2015-12-27 04:21:55 UTC ... NaN Sarapiqui, Heredia Costa Rica Heredia Rana-de árbol amarillenta Dendropsophus ebraccatus Rana arbórea amarillenta Amphibia 65349 Amphibia Hylidae
6 18442 2011-05-10 2011-05-10 NaN Central Time (US & Canada) 1335 cesarlba Cesar Barrio-Amorós 2011-05-26 22:39:54 UTC 2014-10-20 03:30:11 UTC ... NaN Heredia Heredia Agalychnis annae Agalychnis annae Rana de Cafetal Amphibia 23697 Amphibia Hylidae
7 18453 2010-06-25 2010-06-25 NaN Central Time (US & Canada) 1423 acpickard NaN 2011-05-27 01:48:42 UTC 2020-10-28 22:19:55 UTC ... NaN San Carlos Alajuela Yellow Treefrog Dendropsophus microcephalus Rana de árbol amarilla Amphibia 65373 Amphibia Hylidae
8 20180 2007-01-07 2007-01-07 NaN Pacific Time (US & Canada) 642 biosam Sam McNally 2011-06-04 23:15:41 UTC 2017-08-02 06:54:12 UTC ... manual Sarapiqui, Heredia Costa Rica Heredia Olive Snouted-Treefrog Scinax elaeochroa rana arborícola hocico oliva Amphibia 134631 Amphibia Hylidae
9 21424 2011-06-11 2011-06-11 NaN Central America 1236 victoracostachaves Víctor Acosta Chaves 2011-06-14 00:05:25 UTC 2021-09-23 21:14:14 UTC ... NaN Golfito Puntarenas Rosenberg's Gladiator Frog Boana rosenbergi rana arbórea de gladiadora Amphibia 555150 Amphibia Hylidae
10 22504 June 07, 2006 03:08 2006-06-07 2006-06-07 01:08:00 UTC Amsterdam 1948 bjsmit BJ Smit 2011-06-22 19:30:10 UTC 2022-08-03 08:37:43 UTC ... NaN Liberia Guanacaste Drab Tree Frog Smilisca sordida rana arborícola parda Amphibia 24276 Amphibia Hylidae
11 22507 June 11, 2006 03:19 2006-06-11 2006-06-11 01:19:00 UTC Amsterdam 1948 bjsmit BJ Smit 2011-06-22 19:36:54 UTC 2018-09-17 17:41:11 UTC ... NaN San Carlos Alajuela Masked Tree Frog Smilisca phaeota rana arborícola enmascarada Amphibia 24272 Amphibia Hylidae
12 22600 2006-06-12 2006-06-12 NaN Amsterdam 1948 bjsmit BJ Smit 2011-06-23 09:58:38 UTC 2018-09-17 17:40:45 UTC ... NaN Bagaces Guanacaste Olive Snouted-Treefrog Scinax elaeochroa rana arborícola hocico oliva Amphibia 134631 Amphibia Hylidae
13 22601 2006-06-14 2006-06-14 NaN Amsterdam 1948 bjsmit BJ Smit 2011-06-23 10:01:45 UTC 2017-04-16 00:11:14 UTC ... NaN La Unión Cartago Boulenger's Treefrog Scinax boulengeri rana arboricola narizona de boulenger Amphibia 24310 Amphibia Hylidae
14 22609 2006-06-25 2006-06-25 NaN Amsterdam 1948 bjsmit BJ Smit 2011-06-23 11:53:51 UTC 2018-08-28 14:54:50 UTC ... NaN Aguirre Puntarenas Rosenberg's Gladiator Frog Boana rosenbergi rana arbórea de gladiadora Amphibia 555150 Amphibia Hylidae
15 22625 2006-06-11 2006-06-11 NaN Amsterdam 1948 bjsmit BJ Smit 2011-06-23 16:35:57 UTC 2021-10-01 18:45:01 UTC ... NaN Bagaces Guanacaste Masked Tree Frog Smilisca phaeota rana arborícola enmascarada Amphibia 24272 Amphibia Hylidae
16 23598 2009-12-23 2009-12-23 NaN Central America 1236 victoracostachaves Víctor Acosta Chaves 2011-07-01 19:54:08 UTC 2021-09-23 21:14:14 UTC ... NaN Heredia Heredia Olive Snouted-Treefrog Scinax elaeochroa rana arborícola hocico oliva Amphibia 134631 Amphibia Hylidae
17 23601 2010-10-06 2010-10-06 NaN Central America 1236 victoracostachaves Víctor Acosta Chaves 2011-07-01 20:05:27 UTC 2021-09-23 21:14:14 UTC ... NaN Sarapiqui, Heredia Costa Rica Heredia Boana rufitela Boana rufitela Rana Arborícola de La Zona del Canal Amphibia 555152 Amphibia Hylidae
18 23666 2009-08-21 2009-08-21 NaN Central America 1236 victoracostachaves Víctor Acosta Chaves 2011-07-02 00:24:40 UTC 2021-09-23 21:14:14 UTC ... NaN Pococí Limón Rana-de árbol amarillenta Dendropsophus ebraccatus Rana arbórea amarillenta Amphibia 65349 Amphibia Hylidae
19 25160 2011-03-15 2011-03-15 NaN Pacific Time (US & Canada) 2246 redpine NaN 2011-07-16 15:52:42 UTC 2018-09-19 22:17:11 UTC ... NaN Coto Brus Puntarenas Drab Treefrog Smilisca sordida rana arborícola parda Amphibia 24276 Amphibia Hylidae

20 rows × 38 columns

In [45]:
# Mostramos las últimas 20 filas del DataFrame
df.tail(20)
Out[45]:
id observed_on_string observed_on time_observed_at time_zone user_id user_login user_name created_at updated_at ... positioning_device place_county_name place_state_name species_guess scientific_name common_name iconic_taxon_name taxon_id taxon_class_name taxon_family_name
16185 219203288 2024-05-28 19:21:45-06:00 2024-05-28 2024-05-29 01:21:45 UTC America/Costa_Rica 278652 paulerik Paul-Erik Bakland 2024-05-29 22:00:42 UTC 2024-05-30 18:26:03 UTC ... NaN San Carlos Alajuela Red-eyed Tree Frog Agalychnis callidryas Rana de árbol de ojos rojos Amphibia 23702 Amphibia Hylidae
16186 219223710 2024-05-28 20:42:18 2024-05-28 2024-05-29 02:42:18 UTC America/Costa_Rica 2589389 dapsang NaN 2024-05-30 00:03:10 UTC 2024-05-30 00:03:37 UTC ... gps Talamanca Limón Snouted Tree Frogs Scinax Ranas arborícolas trompudas Amphibia 24278 Amphibia Hylidae
16187 219232042 2024-05-29 18:56:32 2024-05-29 2024-05-30 00:56:32 UTC America/Costa_Rica 4261800 damian_bruno Sedona's 3D's 2024-05-30 00:57:32 UTC 2024-05-30 08:15:17 UTC ... gps Santa Cruz Guanacaste Smilisca baudinii Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16188 219244763 2024-05-29 20:12:47-06:00 2024-05-29 2024-05-30 02:12:47 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:23:37 UTC 2024-05-30 18:22:21 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16189 219244829 2024-05-29 20:11:48-06:00 2024-05-29 2024-05-30 02:11:48 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:24:06 UTC 2024-05-30 18:21:45 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16190 219244934 2024-05-29 20:10:18-06:00 2024-05-29 2024-05-30 02:10:18 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:24:59 UTC 2024-05-30 08:14:00 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16191 219245189 2024-05-29 20:09:10-06:00 2024-05-29 2024-05-30 02:09:10 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:26:50 UTC 2024-05-30 08:13:42 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16192 219245333 2024-05-29 20:07:25-06:00 2024-05-29 2024-05-30 02:07:25 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:27:51 UTC 2024-05-30 08:13:22 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16193 219245428 2024-05-29 20:06:30-06:00 2024-05-29 2024-05-30 02:06:30 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:28:37 UTC 2024-05-30 08:13:01 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16194 219247216 2024-05-29 20:05:34-06:00 2024-05-29 2024-05-30 02:05:34 UTC America/Costa_Rica 2600703 jennaceraso Jenna Ceraso 2024-05-30 02:42:39 UTC 2024-05-30 18:21:17 UTC ... NaN Santa Cruz Guanacaste Mexican Smilisca Smilisca baudinii Rana arborícola mexicana Amphibia 24277 Amphibia Hylidae
16195 219277315 2024-03-23 18:13:22 2024-03-23 2024-03-24 00:13:22 UTC America/Costa_Rica 5345354 jannik15 Jannik 2024-05-30 07:59:48 UTC 2024-05-30 18:19:32 UTC ... gps San Carlos Alajuela Rotaugenlaubfrosch Agalychnis callidryas Rana de árbol de ojos rojos Amphibia 23702 Amphibia Hylidae
16196 219311082 2024-05-29 22:16:58 2024-05-29 2024-05-30 04:16:58 UTC America/Costa_Rica 7841429 magcent NaN 2024-05-30 13:04:16 UTC 2024-05-30 21:50:56 UTC ... NaN Desamparados San José Rana de Cafetal Agalychnis annae Rana de Cafetal Amphibia 23697 Amphibia Hylidae
16197 219379440 2022-11-06 2022-11-06 NaN America/Costa_Rica 5709301 pedrovictoraf Pedro Víctor Albaladejo Fresnadillo 2024-05-30 18:50:30 UTC 2024-05-30 21:49:48 UTC ... NaN Pococí Limón Rana Deslizadora Agalychnis spurrelli Rana Deslizadora Amphibia 134927 Amphibia Hylidae
16198 219379604 2024-05-30 12:49:30 2024-05-30 2024-05-30 18:49:30 UTC America/Costa_Rica 3471495 marcemendez Marcela Mendez Zamora 2024-05-30 18:51:14 UTC 2024-05-30 21:49:27 UTC ... NaN Turrubares San José rana arbórea de gladiadora Boana rosenbergi rana arbórea de gladiadora Amphibia 555150 Amphibia Hylidae
16199 219382929 2023-01-19 20:21:25-06:00 2023-01-19 2023-01-20 02:21:25 UTC America/Costa_Rica 4955690 cassidyjimenez NaN 2024-05-30 19:06:38 UTC 2024-05-30 21:48:15 UTC ... NaN Pérez Zeledón San José Red-eyed Tree Frog Agalychnis callidryas Rana de árbol de ojos rojos Amphibia 23702 Amphibia Hylidae
16200 219426521 2024/05/26 1:08 AM 2024-05-26 2024-05-26 07:08:00 UTC America/Costa_Rica 6168763 sergiogarrido Sergio Garrido Villa 2024-05-30 23:01:50 UTC 2024-05-30 23:22:44 UTC ... NaN Golfito Puntarenas Trachycephalus vermiculatus Trachycephalus vermiculatus Rana Arborícola Vermiculada Amphibia 1148187 Amphibia Hylidae
16201 219453362 2024-05-30 18:59:00 2024-05-30 2024-05-31 00:59:00 UTC America/Costa_Rica 5902977 yanethcordero07 Jeanneth MC 2024-05-31 01:59:23 UTC 2024-05-31 02:32:40 UTC ... gps Buenos Aires Puntarenas rana arborícola enmascarada Smilisca phaeota rana arborícola enmascarada Amphibia 24272 Amphibia Hylidae
16202 219465674 2024-05-30 20:05:59-06:00 2024-05-30 2024-05-31 02:05:59 UTC America/Costa_Rica 278652 paulerik Paul-Erik Bakland 2024-05-31 03:41:39 UTC 2024-05-31 03:41:46 UTC ... NaN San Ramón Alajuela NaN Dendropsophus microcephalus Rana de árbol amarilla Amphibia 65373 Amphibia Hylidae
16203 219466730 2024-05-30 20:37:15-06:00 2024-05-30 2024-05-31 02:37:15 UTC America/Costa_Rica 278652 paulerik Paul-Erik Bakland 2024-05-31 03:50:20 UTC 2024-05-31 03:50:28 UTC ... NaN San Ramón Alajuela NaN Smilisca sordida rana arborícola parda Amphibia 24276 Amphibia Hylidae
16204 219466870 2024-05-30 20:38:46-06:00 2024-05-30 2024-05-31 02:38:46 UTC America/Costa_Rica 278652 paulerik Paul-Erik Bakland 2024-05-31 03:51:26 UTC 2024-05-31 03:51:36 UTC ... NaN San Ramón Alajuela NaN Dendropsophus ebraccatus Rana arbórea amarillenta Amphibia 65349 Amphibia Hylidae

20 rows × 38 columns

In [46]:
# Información general del DataFrame donde se pueden observar todas las columnas
# que lo componen, número de filas y la cantidad de datos no-nulos por columna
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16205 entries, 0 to 16204
Data columns (total 38 columns):
 #   Column                            Non-Null Count  Dtype  
---  ------                            --------------  -----  
 0   id                                16205 non-null  int64  
 1   observed_on_string                16205 non-null  object 
 2   observed_on                       16205 non-null  object 
 3   time_observed_at                  15210 non-null  object 
 4   time_zone                         16205 non-null  object 
 5   user_id                           16205 non-null  int64  
 6   user_login                        16205 non-null  object 
 7   user_name                         11264 non-null  object 
 8   created_at                        16205 non-null  object 
 9   updated_at                        16205 non-null  object 
 10  quality_grade                     16205 non-null  object 
 11  license                           10601 non-null  object 
 12  url                               16205 non-null  object 
 13  image_url                         16133 non-null  object 
 14  description                       1667 non-null   object 
 15  num_identification_agreements     16205 non-null  int64  
 16  num_identification_disagreements  16205 non-null  int64  
 17  place_guess                       16128 non-null  object 
 18  latitude                          16205 non-null  float64
 19  longitude                         16205 non-null  float64
 20  positional_accuracy               13635 non-null  float64
 21  private_latitude                  0 non-null      float64
 22  private_longitude                 0 non-null      float64
 23  public_positional_accuracy        13835 non-null  float64
 24  geoprivacy                        584 non-null    object 
 25  taxon_geoprivacy                  13089 non-null  object 
 26  coordinates_obscured              16205 non-null  bool   
 27  positioning_method                3427 non-null   object 
 28  positioning_device                3501 non-null   object 
 29  place_county_name                 16205 non-null  object 
 30  place_state_name                  16205 non-null  object 
 31  species_guess                     15547 non-null  object 
 32  scientific_name                   16205 non-null  object 
 33  common_name                       15281 non-null  object 
 34  iconic_taxon_name                 16205 non-null  object 
 35  taxon_id                          16205 non-null  int64  
 36  taxon_class_name                  16205 non-null  object 
 37  taxon_family_name                 16205 non-null  object 
dtypes: bool(1), float64(6), int64(5), object(26)
memory usage: 4.6+ MB
In [47]:
# Realizamos un resumen estadístico del dataframe de la famiñia Hylidae
df.describe()
Out[47]:
id user_id num_identification_agreements num_identification_disagreements latitude longitude positional_accuracy private_latitude private_longitude public_positional_accuracy taxon_id
count 1.620500e+04 1.620500e+04 16205.000000 16205.000000 16205.000000 16205.000000 1.363500e+04 0.0 0.0 1.383500e+04 1.620500e+04
mean 1.182438e+08 2.808640e+06 1.640049 0.017587 9.906405 -84.092520 8.588067e+03 NaN NaN 1.089986e+04 1.763843e+05
std 6.534110e+07 2.332418e+06 1.043707 0.133776 0.722171 0.714074 2.088923e+05 NaN NaN 2.074524e+05 3.102960e+05
min 1.195700e+04 1.000000e+00 0.000000 0.000000 8.225319 -85.995604 0.000000e+00 NaN NaN 0.000000e+00 2.354000e+04
25% 6.150219e+07 7.353580e+05 1.000000 0.000000 9.411895 -84.661718 1.400000e+01 NaN NaN 1.500000e+01 2.370200e+04
50% 1.277961e+08 2.262354e+06 2.000000 0.000000 10.204416 -84.054056 1.220000e+02 NaN NaN 1.870000e+02 2.427600e+04
75% 1.745532e+08 4.695197e+06 2.000000 0.000000 10.450328 -83.511078 6.115000e+02 NaN NaN 1.341000e+03 1.346310e+05
max 2.194669e+08 8.206970e+06 9.000000 2.000000 11.123827 -82.512459 2.254219e+07 NaN NaN 2.254219e+07 1.530492e+06
In [48]:
# Figura 1. Realizamos un gráfico para observar la cantidad de datos nulos por columna del df
import seaborn as sns
import matplotlib.pyplot as plt

# Mostramos los valores nulos para cada columna
print("Valores nulos por columna:")
print(df.isnull().sum())

# Hacemos un mapa de calor con los valores nulos por columna
sns.heatmap(df.isnull(), cbar=True, cmap='viridis')
plt.show()
Valores nulos por columna:
id                                      0
observed_on_string                      0
observed_on                             0
time_observed_at                      995
time_zone                               0
user_id                                 0
user_login                              0
user_name                            4941
created_at                              0
updated_at                              0
quality_grade                           0
license                              5604
url                                     0
image_url                              72
description                         14538
num_identification_agreements           0
num_identification_disagreements        0
place_guess                            77
latitude                                0
longitude                               0
positional_accuracy                  2570
private_latitude                    16205
private_longitude                   16205
public_positional_accuracy           2370
geoprivacy                          15621
taxon_geoprivacy                     3116
coordinates_obscured                    0
positioning_method                  12778
positioning_device                  12704
place_county_name                       0
place_state_name                        0
species_guess                         658
scientific_name                         0
common_name                           924
iconic_taxon_name                       0
taxon_id                                0
taxon_class_name                        0
taxon_family_name                       0
dtype: int64
No description has been provided for this image
In [49]:
# Seleccionamos las columnas de interés para nuestro análisis, descartando las
# columnas con muchos datos nulos
df_nuevo = df[['quality_grade', "latitude", "longitude", "place_state_name", "scientific_name"]]
print("\nNuevo DataFrame")
print(df_nuevo)
Nuevo DataFrame
      quality_grade   latitude  longitude place_state_name  \
0          research  10.430811 -84.005815          Heredia   
1          research   8.542727 -83.521683       Puntarenas   
2          research  10.430130 -84.007076          Heredia   
3          research  10.429954 -84.005673          Heredia   
4          research  10.429976 -84.005687          Heredia   
...             ...        ...        ...              ...   
16200      research   8.424047 -83.389432       Puntarenas   
16201      needs_id   8.892128 -83.147845       Puntarenas   
16202      needs_id  10.446312 -84.667420         Alajuela   
16203      needs_id  10.446350 -84.667450         Alajuela   
16204      needs_id  10.446413 -84.667405         Alajuela   

                   scientific_name  
0                Scinax elaeochroa  
1                 Smilisca sordida  
2                   Boana rufitela  
3              Agalychnis saltator  
4                Scinax elaeochroa  
...                            ...  
16200  Trachycephalus vermiculatus  
16201             Smilisca phaeota  
16202  Dendropsophus microcephalus  
16203             Smilisca sordida  
16204     Dendropsophus ebraccatus  

[16205 rows x 5 columns]
In [50]:
# Figura 2. Realizamos un diagrama de dispersión para explorar la distribución
# geográfica de las observaciones de Hylidae

x = df_nuevo["longitude"]
y = df_nuevo["latitude"]

plt.figure(figsize=(12, 10))
plt.scatter(x, y, alpha=0.7)
plt.title('Diagrama de dispersión de latitud y longitud para la familia ' + "Hylidae")
plt.xlabel('Longitud')
plt.ylabel('Latitud')
plt.grid(True)
plt.show()
No description has been provided for this image
In [51]:
# Observamos el número de valores únicos en cada columna del dataframe nuevo_df
df_nuevo.nunique( )
Out[51]:
quality_grade           2
latitude            13054
longitude           12880
place_state_name        7
scientific_name        53
dtype: int64
In [52]:
# Imprimimos la cantidad de ocurrencias de cada valor único en la columna
# 'scientific_name' que corresponderá al número de especies reportadas
especies = df_nuevo['scientific_name'].value_counts()
especies
Out[52]:
scientific_name
Agalychnis callidryas          4371
Smilisca phaeota               1816
Dendropsophus ebraccatus       1059
Boana rosenbergi                878
Scinax elaeochroa               870
Smilisca sordida                709
Smilisca                        597
Trachycephalus vermiculatus     593
Hylidae                         538
Boana rufitela                  486
Dendropsophus microcephalus     458
Smilisca baudinii               386
Smilisca manisorum              307
Scinax boulengeri               286
Duellmanohyla rufioculis        258
Agalychnis annae                256
Hylinae                         242
Cruziohyla sylviae              179
Agalychnis spurrelli            177
Agalychnis                      176
Tlalocohyla loquax              175
Scinax                          154
Scinax staufferi                150
Isthmohyla pseudopuma           137
Dendropsophus                   115
Triprion spinosus               100
Agalychnis saltator              99
Dendropsophus phlebodes          89
Boana                            89
Agalychnis lemur                 82
Smilisca puma                    69
Smilisca sila                    58
Duellmanohyla legleri            54
Tlalocohyla celeste              31
Duellmanohyla                    25
Trachycephalus                   24
Isthmohyla rivularis             20
Hyloscirtus palmeri              16
Isthmohyla lancasteri            14
Duellmanohyla uranochroa         12
Ecnomiohyla sukia                10
Isthmohyla                        9
Isthmohyla tica                   6
Phyllomedusinae                   4
Isthmohyla picadoi                4
Isthmohyla pictipes               3
Isthmohyla zeteki                 3
Isthmohyla angustilineata         3
Osteopilus septentrionalis        3
Ecnomiohyla                       2
Tlalocohyla                       1
Cruziohyla                        1
Ecnomiohyla fimbrimembra          1
Name: count, dtype: int64
In [53]:
# Figura 3. Creamos un gráfico de barras para vizualizar la cantidad de registros
# por especie de la familia Hylidae

# Tamaño del gráfico
plt.figure(figsize=(15, 6))

# Crear gráfico de barras
especies.plot(kind='bar')

# Título del gráfico
plt.title('Especies reportadas de la familia Hylidae')

# Etiqueta del eje Y
plt.ylabel('Especie')

# Etiqueta del eje X
plt.xlabel('Número de Registros')
plt.grid()
plt.show()
No description has been provided for this image
In [54]:
# Figura 4. Creamos un gráfico de barras para vizualizar la cantidad de registros
# por provincia de la familia Hylidae

provincias = df_nuevo.groupby('place_state_name')['scientific_name'].size()

# Tamaño del gráfico
plt.figure(figsize=(15, 10))

# Crear gráfico de barras
provincias.plot(kind='bar', color = "Grey")

# Título del gráfico
plt.title('Registros por provincia de la familia Hylidae')

# Etiqueta del eje Y
plt.ylabel('Registros')

# Etiqueta del eje X
plt.xlabel('Provincias')
plt.xticks(rotation=360)

plt.grid()
plt.show()
No description has been provided for this image
In [55]:
# Figura 5. Creamos un gráfico de barras para vizualizar la cantidad de registros
# de especies por provincia de la familia Hylidae

# Contar el número de especies únicas por provincia
unicas = df_nuevo.groupby('place_state_name')['scientific_name'].nunique()
print("Cantidad de especies reportadas por provincia:")
print(unicas)

# Crear el gráfico de barras
plt.figure(figsize=(15, 10))
unicas.plot(kind='barh')

# Añadir etiquetas y título
plt.xlabel('Provincias')
plt.ylabel('Cantidad de especies')
plt.title('Especies por provincia de la familia Hylidae')

# Mostrar el gráfico
plt.grid()
plt.show()
Cantidad de especies reportadas por provincia:
place_state_name
Alajuela      44
Cartago       33
Guanacaste    31
Heredia       36
Limón         34
Puntarenas    36
San José      34
Name: scientific_name, dtype: int64
No description has been provided for this image
In [56]:
# Accedemos a una columna de interés para observar la información que la conforma
df_nuevo['quality_grade']
Out[56]:
0        research
1        research
2        research
3        research
4        research
           ...   
16200    research
16201    needs_id
16202    needs_id
16203    needs_id
16204    needs_id
Name: quality_grade, Length: 16205, dtype: object
In [57]:
# Observamos los tipos de valores únicos que componen la columna de interés
valores_unicos = df_nuevo['quality_grade'].unique()
print(valores_unicos)
['research' 'needs_id']
In [58]:
# Figura 6. Creamos un gráfico de barras para vizualizar el estado de identificación
# de los registros de la familia Hylidae

# Contar el número de especies únicas por provincia
research = df_nuevo['quality_grade'].value_counts()
print("Estado de identificación de los registros de la familia Hylidae:")
print(research)

fig, ax = plt.subplots(figsize=(15, 10))
research.plot(kind='bar', color='green', ax=ax)

# Añadir etiquetas y título
ax.set_xlabel('Estado')
ax.set_ylabel('Cantidad de registros')
ax.set_title('Estado de identificación de los registros de la familia Hylidae')
etiquetas = ['Grado de Investigación', 'Necesita ID']
ax.set_xticklabels(etiquetas, rotation=360, ha='center')

# Mostrar el gráfico
plt.grid()
plt.show()
Estado de identificación de los registros de la familia Hylidae:
quality_grade
research    12761
needs_id     3444
Name: count, dtype: int64
No description has been provided for this image
In [59]:
# Creamos un dataframe para vizualizar el estado de identificación por
# especie de los registros de la familia Hylidae

grd = df_nuevo.groupby('scientific_name')['quality_grade'].value_counts()
print("Estado de identificación de los registros de la familia Hylidae:")
print(grd)
Estado de identificación de los registros de la familia Hylidae:
scientific_name              quality_grade
Agalychnis                   needs_id          171
                             research            5
Agalychnis annae             research          238
                             needs_id           18
Agalychnis callidryas        research         4196
                                              ... 
Tlalocohyla loquax           needs_id           12
Trachycephalus               needs_id           24
Trachycephalus vermiculatus  research          577
                             needs_id           16
Triprion spinosus            research          100
Name: count, Length: 89, dtype: int64
In [60]:
# Figura 7. Creamos un gráfico de barras para observar el estado de identificación
# por especie de los registros de la familia Hylidae
plt.figure(figsize=(10, 30))
grd.plot(kind='barh')

# Añadir etiquetas y título
plt.xlabel('Estado')
plt.ylabel('Cantidad de registros')
plt.title('Estado de identificación de los registros de la familia Hylidae')

# Mostrar el gráfico
plt.grid()
plt.show()
No description has been provided for this image

Descripción de los resultados obtenidos

Fueron descargados 16 205 registros de especies de ranas de la familia Hylidae. Con el análisis preliminar de los datos (Figura 1) se eliminaron las columnas que contenían una alta cantidad de datos nulos, además de las columnas que no se consideraron de interés según el objetivo, pasando de 38 a 5 columnas. Por lo que se decidió utilizar las 5 columnas mencionadas en la descripción de los datos, las cuales no contenían datos nulos.

Se observa que la ubicación de los registros, con respecto a la información de la longitud y la latitud, se encuentra bastante certera, habiendo una poca cantidad de datos fuera de la distribución real (Figura 2).

Se obtuvo la cantidad de registros por especie, según se observa en la Figura 3, siendo las siguientes especies las primeras 5 con más registros:

Agalychnis callidryas 4371 Smilisca phaeota 1816 Dendropsophus ebraccatus 1059 Boana rosenbergi 878 Scinax elaeochroa 870

Como se observa, la especie más registrada es Agalychnis callidryas, seguida de Smilisca phaeota y Dendropsophus ebraccatus, las cuales son especies fáciles de identificar gracias a sus características morfológicas, además de encontrarse ampliamente distribuidas en el país.

Se obtuvo además, la cantidad de registros por provincia, siendo la provincia de Puntarenas la que contiene mayor cantidad de registros de ranas de esta familia, seguida de la provincia de Alajuela. Por el contrario, la provincia con menor cantidad de registros es Cartago (Figura 4). Así mismo, se visualizó la cantidad de especies por provincia, donde Alajuela tiene una mayor riqueza con 44 especies, seguido de Heredia y Puntarenas con 36 especies cada una (Figura 5).

Por otro lado, al analizar el estado de identificación de cada registro, se observa que la mayor cantidad de los registros (12761) en el conjunto de datos alcanzaron el grado de investigación, como se observa en la figura 6, los cuales son datos con una alta confiabilidad taxonómica al momento de su descarga. La minoría de registros (3444) se encuentran aún pendientes de identificación.

En la figura 7 se logra visualizar que la mayoría de especies del género Smilisca, las cuales son similares morfológicamente, cuentan con una cantidad alta de registros que aún necesitan identificación, comparadas con la cantidad de registros que alcanzaron el grado de investigación. Caso contrario ocurre con las especies del género Agalychnis, las cuales cuentan con una proporción muy alta de sus registros en grado de investigación con respecto a los registros que aún necesitan una identificación.

Conclusiones

Los registros de las ranas de la familia Hylidae presentan una alta confiabilidad, tanto en su distribución geográfica como en su identificación taxonómica, para poder ser utilizados para generar conocimiento sobre el estado de sus poblaciones.

Los datos utilizados pueden ser funcionales para evaluar aspectos como densidad poblacional de las especies, identificación de especies raras o poco comunes, distribución geográfica, ecología, especies bioindicadoras, entre otros.

A través del análisis de registros por provincia puede evidenciarse los sitios en donde existe una necesidad de aumentar el esfuerzo para registrar datos sobre un grupo taxonómico específico.

Referencias

Barreto Blanco, M. P. (2021). Utilización de los anfibios como indicadores biológicos para evidenciar los niveles de contaminación en los ecosistemas colombianos.

Forti, L. R., & Szabo, J. K. (2023). The iNaturalist platform as a source of data to study amphibians in Brazil. Anais da Academia Brasileira de Ciências, 95, e20220828.

Grattarola, F., Botto, G., da Rosa, I., Gobel, N., González, E. M., González, J., ... & Pincheira-Donoso, D. (2019). Biodiversidata: An open-access biodiversity database for Uruguay. Biodiversity data journal, 7.

Heberling, J. M., Miller, J. T., Noesgaard, D., Weingart, S. B., & Schigel, D. (2021). Data integration enables global biodiversity synthesis. Proceedings of the National Academy of Sciences, 118(6), e2018093118.

Laufer, G., Gobel, N., Kacevas, N., Lado, I., Cortizas, S., Carabio, M., & Kolenc, F. (2021). Updating the distributions of four Uruguayan hylids (Anura: Hylidae): recent expansions or lack of sampling efforts. Amphibian and Reptile Conservation, 15(2), 228-237.

Soberón, J., & Peterson, T. (2004). Biodiversity informatics: managing and applying primary biodiversity data. Philosophical Transactions of the Royal Society of London. Series B: Biological Sciences, 359(1444), 689-698. Zhang, J. (2017). Biodiversity science and macroecology in the era of big data. Biodiversity Science, 25(4), 355-363.

Wangyal, J. T., Bower, D., Vernes, K., & Thinley, P. (2022). Employing citizen science to understand amphibian and reptile diversity and distribution in the Himalayan Kingdom of Bhutan. Global Ecology and Conservation, 37, e02157.