PROYECTO FINAL¶
Moscas de las flores: descubriendo su distribución con la ayuda de la ciencia ciudadana¶
Estudiantes:
- Rosa María Estrada Hernández
- Luis Andrés Arévalo Rodríguez
Descripción del proyecto y justificación.
Las moscas de las flores (Syrphidae) son un grupo de insectos diversos, ecológicamente importantes, que proveen numerosos servicios ecosistémicos como polinizadores, controladores biológicos y descomponedores. Actualmente la distribución geográfica en América no está bien documentada. La falta de información sobre la distribución de estas moscas dificulta la toma de decisiones informadas sobre su conservación y manejo. Este proyecto pretende utilizar datos de ciencia ciudadana de la plataforma de iNaturalist para comprender la distribución en Centro América de la familia Syrphidae teniendo representación de géneros y especies en todo el continente Americano
Antecedentes
Biología de Syrphidae
Los Syrphidae comúnmente llamados moscas de las flores (flower flies), pueden observarse alrededor o posados en las flores en búsqueda de alimento (néctar o polen), machos en búsqueda de hembras para reproducirse, hembras explorando sitios adecuados para la ovoposición. Las larvas pueden encontrarse en ambientes acuáticos (por ejemplo, Eristalis sp.) o terrestres. En cuanto sus hábitos alimenticios, son muy diversos, algunas especies son saprófagas especializadas en material vegetal o depredadoras de grupos de Formicidae (Hymenoptera) o Sternorrhyncha (Hemiptera) (Thompson et al., 2010; Rodríguez-Gasol et. al., 2020). Debido a esta gran diversidad en su biología, estas moscas son consideradas de gran importancia por los servicios ecosistémicos que ofrecen. Algunas especies son utilizadas en invernaderos para la polinización de flores, otras son empleadas como controladores biológicos de plagas en plantaciones de cultivos agrícolas (Sommaggio, 1999; Thompson et al., 2010; Rodríguez-Gasol et. al., 2020).
Morfología de Syrphidae
Los Sírfidos tienen un rango de tamaño entre 4-35mm, son fácilmente distinguibles de otros dípteros por **la presencia de la “vena espuria” ** en sus alas. Su apariencia suele ser llamativa y agradable a la vista, usualmente con marcas de colores vibrantes en el abdomen. De hecho, algunas especies presentan mimetismo batesiano, imitando color y forma de abejas (Apidae) y avispas (Vespidae) para confundir a sus depredadores (Sommaggio, 1999)
Taxonomía de Syrphidae
La familia Syrphidae se caracteriza por su gran diversidad de especies, cuenta con más de 6,000 especies descritas en todo el mundo. Está constituida por tres subfamilias: Eristalinae, Microdontinae y Syrphinae (Sommaggio, 1999; Rodríguez-Gasol et al., 2020). La subfamilia Eristalinae está conformada por 160 géneros y 4,260 especies. La subfamilia Syrphinae es la segunda subfamilia con mayor representación, está conformada por 87 géneros y 2049 especies. La subfamilia Microdontinae está conformada por 41 géneros y 512 especies (Vockeroth, 1969; Thompson et al., 2010). En la region Neotropical se registran 1600 especies agrupadas en 60 géneros(Thompson, 1999)
La entomología y la ciencia de datos
Con el incremento de información disponible en diversos medios digitales, la forma de recopilar información se ha transformado y renovado. En la actualidad, Big Data se ha convertido en una parte integral de la sociedad moderna. Haciendo uso de estas nuevas herramientas la entomología ha intentado responder algunas preguntas importantes ¿Están disminuyendo las poblaciones de insectos?, ¿Con cuánta rapidez está disminuyendo la diversidad de insectos?, ¿Cómo responden los insectos al cambio climático? ¿Cuáles son los patrones de dispersión de las plagas agrícolas o insectos vectores de enfermedades? (Lee, 2024)
Actualmente la digitalización de colecciones entomológicas, ha llevado a resolver cómo alojar una gran cantidad de información importante ya contenida en una ficha para cada especie a ser de conocimiento público y que pueda ser utilizada por los investigadores. Sin embargo, esta no es una tarea sencilla debido al volumen de datos, por ejemplo, el National Museum of Natural History, del Instituto Smithsonian se estima que contiene alrededor de 34 millones de insectos, de los cuales solo 421,698 registros se encuentran disponibles a través de plataformas como GBIF (Short et. al., 2018).
El camino sigue siendo extenso hacia la completa digitalización, de la cantidad, la calidad y la disponibilidad de datos. En la última década se ha logrado un aumento importante de los datos de las colecciones, lo que ha permitido utilizar herramientas de modelado de nichos ecológicos, capaces de analizar esa gran cantidad de datos de distribución de los especímenes, detectando cambios y logrando predecir tendencias futuras en el rango de insectos (Short et. al. 2018). Un ejemplo de ello serían las abejas, los esfuerzos en digitalizar los datos de un taxón han permitido aportar información valiosa sobre la distribución de las especies, efectos del cambio climático y evolución (Short et. al., 2018)
Por otra parte, tenemos la ciencia ciudadana, una herramienta invaluable para el estudio de la biodiversidad y la biogeografía. Específicamente se puede notar el impacto de plataformas como iNaturalist donde converge la colaboración entre naturalistas (científicos profesionales y ciudadanos), con este nuevo enfoque los ciudadanos ya son parte activa de un proceso científico. Es de tomar en cuenta que plataformas como esta cuentan con algunos sesgos propios de la toma de datos, siendo conscientes de las limitaciones y alcances de los datos (Lee, 2024).
Es probable que en el caso de la entomología se presenten más registros de aquellos insectos que sean más grandes, llamativos tanto en su color o forma y que por la misma dinámica estos sean fotografiados para reconocer su origen o la curiosidad de si representan un posible peligro. Otro de los aspectos a considerar es la distribución de observaciones, que regularmente suceden en lugares con altas densidades poblacionales, con personas que tienen un mayor conocimiento sobre estas herramientas, a diferencia de aquellos lugares menos concurridos o accesibles que presentan una menor cantidad de registros o ausencia de estos (Lee, 2024).
Se puede observar cómo los esfuerzos de digitalización de un taxón pueden aportar información valiosa sobre la distribución de las especies y el cambio climático. En Dinamarca Olsen et. al., (2020) realizó un estudio explorando la respuesta fenológica de los sírfidos daneses (Syrphidae) al continuo aumento de las temperaturas anuales, para ello utilizaron datos digitalizados del Natural History Museum Aarhus (NHMA) y del Natural History Museum of Denmark (NHMD), registros de datos de ciencia ciudadana provenientes del Atlas of Danish Hoverflies que forma parte del Naturbasen, que es el proyecto de ciencia ciudadana más grande de Dinamarca, utilizado desde el 2001.
Los desafíos presentes son igualados por las oportunidades que la liberación y recopilación de datos pueden desbloquear, las preguntas de investigación que se pueden abordar son incontables (Short et. al., 2018).
Descripción del problema y objetivos
En la sociedad humana los insectos son observados como plagas y vectores de enfermedades, pero estos representan un papel muy importante y esencial dentro de nuestros ecosistemas, como polinizadores, descomponedores, controladores biológicos y otros aspectos que son propios de las dinámicas del ecosistema. El estudio de la distribución de las especies es fundamental para comprender la biodiversidad y los servicios ecosistémicos que ofrecen. Sin embargo, la obtención de datos de distribución precisos y completos puede ser un desafío, especialmente para grupos de organismos diversos y ampliamente distribuidos como las moscas de las flores (Syrphidae).
Las moscas de las flores son un grupo de insectos con una gran diversidad de especies, sin embargo, su distribución geográfica aún no está bien documentada, en la mayoría de países de América. La falta de información sobre la distribución de las moscas de las flores dificulta la toma de decisiones informadas sobre su conservación y manejo; sería difícil saber si una especie está en peligro de extinción o si necesita protección especial.
La ciencia ciudadana puede ser una herramienta valiosa para recopilar datos de distribución de insectos. Sin embargo, también tienen limitaciones, como estar sesgados hacia áreas con mayor actividad de observadores o hacia especies que son más fáciles de observar. Este estudio tiene como objetivo utilizar datos de ciencia ciudadana de iNaturalist para estimar la distribución de las especies de la familia Syrphidae en Centro América.
Objetivos
General:
- Comprender la distribución de las especies de la familia Syrphidae en Centro América utilizando datos de ciencia ciudadana de iNaturalist.
Específicos:
- Determinar la cantidad de especies reportadas en Centro América y el número de registros para cada una de ellas.
- Analizar la distribución de las especies por país en Centro América.
- Determinar la cantidad de especies de acuerdo con sus hábitos alimenticios.
- Crear mapa de distribución geográfica para las especies con la mayor cantidad de registros.
Descripción del conjunto de datos a utilizar con referencia formal a la fuente
Se utilizó como fuente de datos la página de iNaturalist(2024, mayo 24). En primera instancia se realizó una búsqueda en la página sobre la cantidad de observaciones, que sean grado de investigación, para Syrphidae en Centro América. Aplicados los filtros se obtuvo un total de 507 registros con grado de investigación, procedimos a descargarlos de la página y se aplicaron nuevamente las opciones de la información que deseábamos utilizar en el archivo csv a descargar.
Referencias bibliográficas
Lee, L. (2024, febrero 26). How can we use big data from iNaturalist to address important questions in Entomology? [Berkeley D-Lab]. Retrieved from https://dlab.berkeley.edu/
iNaturalist. (2024, mayo 24). Conjunto de observaciones de Syrphidae en Centro América, iNaturalist. https://www.inaturalist.org/.
Olsen, K., Holm, T. E., Pape, T., & Simonsen, T. J. (2020). Natural history museum collection and citizen science data show advancing phenology of Danish hoverflies (Insecta: Diptera, Syrphidae) with increasing annual temperature. PloS one, 15(5).
Rodríguez-Gasol, N., Alins, G., Veronesi, E. R., & Wratten, S. (2020). The ecology of predatory hoverflies as ecosystem-service providers in agricultural systems. Biological Control, 151, 104405.
Short, A. E. Z., Dikow, T., & Moreau, C. S. (2018). Entomological collections in the age of big data. Annual Review of Entomology, 63, 513-530.
Sommaggio, D. (1999). Syrphidae: can they be used as environmental bioindicators?. Agriculture, ecosystems & environment, 74(1-3), 343-356.
Thompson, FC. (1999). A key to the genera of the flower flies (Diptera: Syrphidae) of the Neotropical Region including descriptions of new genera and species and a glossary of taxonomic terms used. Contributions on Entomology International, 3, 321-378.
Thompson, F. C., Rotheray, G. E., & Zumbado, M. A. (2010). Syrphidae (flower flies) en B.V. Brown (Ed.), Manual of Central American Diptera(Vol. 2, pp. 763-792). NRC Research Press.
Vockeroth, J. R. (1969). A revision of the genera of the Syrphini (Diptera: Syrphidae). The Memoirs of the Entomological Society of Canada, 101(S62), 5-176.
Importación de Datos y Análisis Exploratorio de Datos (EDA) inicial¶
#importamos las bibliotecas necesarias
!pip install geodatasets
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import geopandas as gpd
import geodatasets
Collecting geodatasets Downloading geodatasets-2023.12.0-py3-none-any.whl (19 kB) Requirement already satisfied: pooch in /usr/local/lib/python3.10/dist-packages (from geodatasets) (1.8.1) Requirement already satisfied: platformdirs>=2.5.0 in /usr/local/lib/python3.10/dist-packages (from pooch->geodatasets) (4.2.2) Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from pooch->geodatasets) (24.0) Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.10/dist-packages (from pooch->geodatasets) (2.31.0) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->pooch->geodatasets) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->pooch->geodatasets) (3.7) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->pooch->geodatasets) (2.0.7) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->pooch->geodatasets) (2024.2.2) Installing collected packages: geodatasets Successfully installed geodatasets-2023.12.0
#cargamos la base de datos de interés en un dataframe
df_original = pd.read_csv("syrphidae.csv")
#creamos otro df que será copia del original para ir sobreescribiendo la copia
df= df_original
#Revisamos que la cantidad de filas y columnas correspondan con las que ya conocemos que contiene el archivo csv.
df.shape
(507, 50)
Limpieza y transformación de datos¶
#Imprimimos el contenido del indice para luego sobreescribir el df
#Sobreescribimos el df para seleccionar la información a trabajar
#Imprimos nuevamente el indice del df para confirmar que ha sido sobreescrito con lo seleccionado.
print("Antes", df.columns)
print('\n')
df= df[["latitude", "longitude", "place_country_name", "place_state_name", "taxon_subfamily_name", "taxon_genus_name", "taxon_species_name", "scientific_name", "common_name"]]
print("Despues", df.columns)
Antes Index(['latitude', 'longitude', 'place_country_name', 'place_state_name', 'taxon_subfamily_name', 'taxon_genus_name', 'taxon_species_name', 'scientific_name', 'common_name'], dtype='object') Despues Index(['latitude', 'longitude', 'place_country_name', 'place_state_name', 'taxon_subfamily_name', 'taxon_genus_name', 'taxon_species_name', 'scientific_name', 'common_name'], dtype='object')
#revisamos el tipo de datos de cada columna
df_datos= df.dtypes
print(df_datos)
latitude float64 longitude float64 place_country_name object place_state_name object taxon_subfamily_name object taxon_genus_name object taxon_species_name object scientific_name object common_name object dtype: object
#Revisamos si existen valores nulos para las columnas
df.isnull().sum()
latitude 0 longitude 0 place_country_name 1 place_state_name 1 taxon_subfamily_name 0 taxon_genus_name 0 taxon_species_name 6 scientific_name 0 common_name 136 dtype: int64
#ubicamos la fila especifica del valor nulo para la variable 'place_country_name'
fila_nan= df['place_country_name'].isna()
print(df.loc[fila_nan])
latitude longitude place_country_name place_state_name \ 33 7.536764 -90.175779 NaN NaN taxon_subfamily_name taxon_genus_name taxon_species_name \ 33 Syrphinae Toxomerus Toxomerus politus scientific_name common_name 33 Toxomerus politus Mosca del maíz
#Verificamos las coordenadas, están en lugar remoto del pacífico de CA
# desplegamos toda la información del df_original para acceder al url del registro
#la persona que registró ha hecho una mala ubicación, el registro real es de USA
print(df_original.iloc[33])
id 17941595 observed_on_string Sun Oct 28 2018 12:00:24 GMT-0500 (CDT) observed_on 2018-10-28 time_observed_at 2018-10-28 17:00:24 UTC time_zone Central Time (US & Canada) user_id 865665 user_login rosew1122 user_name NaN created_at 2018-10-29 19:37:43 UTC updated_at 2020-08-24 22:19:17 UTC quality_grade research license NaN url https://www.inaturalist.org/observations/17941595 image_url https://static.inaturalist.org/photos/27412814... sound_url NaN tag_list NaN description NaN num_identification_agreements 2 num_identification_disagreements 0 captive_cultivated False oauth_application_id 3.0 place_guess North Pacific Ocean, , , latitude 7.536764 longitude -90.175779 positional_accuracy 2931896.0 private_place_guess NaN private_latitude NaN private_longitude NaN public_positional_accuracy 2931896.0 geoprivacy NaN taxon_geoprivacy NaN coordinates_obscured False positioning_method NaN positioning_device NaN place_town_name NaN place_county_name NaN place_state_name NaN place_country_name NaN place_admin1_name NaN place_admin2_name NaN species_guess Maize Calligrapher scientific_name Toxomerus politus common_name Mosca del maíz iconic_taxon_name Insecta taxon_id 146632 taxon_subfamily_name Syrphinae taxon_genus_name Toxomerus taxon_genushybrid_name NaN taxon_species_name Toxomerus politus taxon_subspecies_name NaN Name: 33, dtype: object
#Eliminamos el registro 33
df.drop(33, inplace=True)
#nos da la advertencia que estamos eliminado filas de una copia del df, pero si lo ejecutó.
#revisamos cuales son las filas con los datos NaN en la columna especies
species_nan= df['taxon_species_name'].isna()
print(df.loc[species_nan])
latitude longitude place_country_name place_state_name \ 6 16.763000 -91.146000 Mexico Chiapas 38 9.068365 -79.365929 Panama Panamá 89 10.324192 -84.816266 Costa Rica Puntarenas 103 10.213774 -83.789787 Costa Rica Limón 111 8.700151 -83.202426 Costa Rica Puntarenas 308 9.119023 -79.713649 Panama Colón taxon_subfamily_name taxon_genus_name taxon_species_name \ 6 Syrphinae Toxomerus NaN 38 Eristalinae Palpada NaN 89 Syrphinae Leucopodella NaN 103 Eristalinae Ornidia NaN 111 Syrphinae Toxomerus NaN 308 Eristalinae Palpada NaN scientific_name common_name 6 Toxomerus musicus NaN 38 Palpada Moscas de felpa 89 Leucopodella NaN 103 Ornidia Moscas joya verde 111 Toxomerus Moscas calígrafas 308 Palpada Moscas de felpa
#revisamos en el df original el url de cada registro para confirmar que no habían datos faltantes a la hora de importar el archivo
#encontramos las id de las especies hasta genero por la calidad de la fotos.
sp_nan= df_original['taxon_species_name'].isna()
sp_filtradas = df_original.loc[sp_nan]
print(sp_filtradas['url'])
6 https://www.inaturalist.org/observations/5951808 38 https://www.inaturalist.org/observations/20765617 89 https://www.inaturalist.org/observations/38408560 103 https://www.inaturalist.org/observations/45579071 111 https://www.inaturalist.org/observations/48561051 308 https://www.inaturalist.org/observations/10516... Name: url, dtype: object
#reemplazamos NaN por el valor unknow
df['taxon_species_name'].fillna('unknow', inplace=True)
#aunque el nombre común no sea un valor tan necesario, solo aspectos descriptivos del documento
#le sustituiremos los NaN por el valor 'flower_fly' que es el nombre común de la familia
df['common_name'].fillna('flower_fly', inplace=True)
#revisamos si aparecen valores nulos
df.isnull().sum()
latitude 0 longitude 0 place_country_name 0 place_state_name 0 taxon_subfamily_name 0 taxon_genus_name 0 taxon_species_name 0 scientific_name 0 common_name 0 dtype: int64
#confirmamos la cantidad de filas y columnas del df después de la limpieza y transformación de datos
df.shape
(506, 9)
#Filtramos el df por país para aseguranos que solamente analizaremos registros de paises de Centro América
paises = {"Guatemala", "El Salvador", "Honduras", "Nicaragua", "Costa Rica", "Panama"}
df= df[df['place_country_name'].isin(paises)]
paises_listado=(df['place_country_name']).value_counts()
print(paises_listado)
place_country_name Honduras 175 Costa Rica 120 Nicaragua 68 Guatemala 55 Panama 52 El Salvador 11 Name: count, dtype: int64
#confirmamos la cantidad de filas y columnas del df después de la limpieza
df.shape
(481, 9)
Aspectos generales de la distribución de subfamilias¶
#utilizamos groupby para agrupar el df por la columna subfamila
#contabilizamos las especies con nunique para que solo cuente 1 vez el registro
#reset_index para que el resultado se presente como un nuevo df donde cada subfamilia es una fila
sp_subfamilia= df.groupby('taxon_subfamily_name')['scientific_name'].nunique().reset_index()
print(sp_subfamilia)
taxon_subfamily_name scientific_name 0 Eristalinae 34 1 Microdontinae 2 2 Syrphinae 23
cod_subfamilia= {"Eristalinae": 1, "Microdontinae":2, "Syrphinae":3}
n_subfamilia= sp_subfamilia['taxon_subfamily_name'].replace(cod_subfamilia)
# Tamaño del gráfico.
plt.figure(figsize=(4, 4))
#formato del grafico
leyenda= ["Microdontinae", "Syrphinae", "Eristalinae"]
colores= ['#9370DB','#FFD700','#9ACD32'] #utilizamos colores de la paleta disponible para HTML
explode = (0.1, 0, 0)
wedgeprops= {'linewidth': 1.5,'edgecolor': 'black'}
# Crear la gráfica de pastel
plt.pie(n_subfamilia, labels= leyenda, explode= explode, colors= colores, wedgeprops= wedgeprops, autopct='%1.1f%%')
# Título del gráfico
plt.title('Distribucion de especies por subfamilia')
plt.show()
#agrupamos el df por pais y filtramos por subfamilia
pais_subfamilia= df.groupby('place_country_name')['taxon_subfamily_name'].nunique().reset_index()
print(pais_subfamilia)
place_country_name taxon_subfamily_name 0 Costa Rica 3 1 El Salvador 3 2 Guatemala 2 3 Honduras 3 4 Nicaragua 3 5 Panama 2
#aca agrupé a la inversa para ver cuantos paises y así saber cual era la subfamilia
pais_subfamilia2= df.groupby('taxon_subfamily_name')['place_country_name'].nunique().reset_index()
print(pais_subfamilia2)
taxon_subfamily_name place_country_name 0 Eristalinae 6 1 Microdontinae 4 2 Syrphinae 6
#se que es facil por deducción sacar donde no está, pero solo así logré ubicar el taxon aunque no de la forma que queria
df_filSubf= df[df['taxon_subfamily_name']== 'Microdontinae']
eri_subfamilia= df_filSubf.groupby('place_country_name')['taxon_subfamily_name'].nunique().reset_index()
print(eri_subfamilia)
place_country_name taxon_subfamily_name 0 Costa Rica 1 1 El Salvador 1 2 Honduras 1 3 Nicaragua 1
Objetivo 1: Determinar la cantidad de especies reportadas en Centro América y el número de registros para cada una de ellas.¶
#contabilizamos el numero de especies únicas - utilizamos nunique() para evitar que contabilice valores repetidos
sp_ca= df['scientific_name'].nunique()
#Contabilizamos el numero de registros, aca si utilizamos el value_counts ya que si nos interesan las repeticiones de la especie
sp_reg= df['scientific_name'].value_counts()
#imprimimos el valor con el mensaje de respuesta
print(f"El número de especies de moscas de la familia Syrphidae reportadas para Centro América es:\n {sp_ca}\n")
print(f"El número registros para las especies reportadas en Centro América es:\n {sp_reg}")
El número de especies de moscas de la familia Syrphidae reportadas para Centro América es: 59 El número registros para las especies reportadas en Centro América es: scientific_name Toxomerus politus 127 Ornidia obesa 81 Palpada furcata 35 Palpada mexicana 32 Toxomerus pulchellus 19 Asemosyrphus mexicanus 18 Copestylum tympanitis 15 Toxomerus pictus 14 Dioprosopa clavata 12 Copestylum sexmaculatum 10 Menidon falcatus 9 Palpada vinetorum 8 Meromacrus loewi 5 Allograpta obliqua 5 Eristalis tenax 5 Toxomerus bistrigus 5 Eristalis alleni 5 Toxomerus dispar 4 Palpada pusilla 4 Toxomerus virgulatus 4 Salpingogaster nigra 4 Eristalis gatesi 4 Lycastrirhyncha nitens 4 Toxomerus marginatus 3 Palpada fasciata 3 Toxomerus mutuus 2 Toxomerus floralis 2 Hybobathus phaeopterus 2 Palpada albifrons 2 Meromacrus anna 2 Meromacrus laconicus 2 Eristalis circe 2 Copestylum ornatum 2 Copestylum limbipenne 2 Lycopale woodi 2 Milesia pulchra 2 Palpada 2 Syrphus opinator 1 Rhinoprosopa nasuta 1 Palpada agrorum 1 Callicera duncani 1 Ocyptamus fuscipennis 1 Ocyptamus gastrostactus 1 Toxomerus 1 Polybiomyia schnablei 1 Mimocalla willistoni 1 Ornidia major 1 Mimocalla tristani 1 Fazia micrura 1 Palpada alhambra 1 Milesia bella 1 Mallota klepsvikae 1 Eristalinus taeniops 1 Ornidia 1 Rhinoprosopa zophina 1 Leucopodella 1 Meromacrus gloriosus 1 Polybiomyia schwarzi 1 Syrphipogon fucatissimus 1 Name: count, dtype: int64
# Gráfico de barras para mostrar el número de registros por especie de Syrphidae
# Para Centro América
barra = sp_reg.plot(kind = "barh", color = 'white', edgecolor = 'red', figsize = (15,10))
barra.set_title("Total de reportes de especies de Syrphidae\nen Centroamérica", fontsize = 20)
barra.set_ylabel("Especie", fontsize = 14)
barra.set_yticklabels(labels=sp_reg.index, fontdict = {'fontsize': 7.5})
barra.set_xlabel("Número de reportes", fontsize = 14)
barra.grid(axis = 'x', linestyle = '--', color= "black", alpha= 0.5)
Objetivo 2: Analizar la distribución de las especies por país en Centro América¶
Generar geoposición a partir de coordenadas (longitud y latitud) del dataframe¶
## Vamos a incluir las geoposiciones al dataframe, para poder generar mapas
geo = gpd.points_from_xy(df.longitude, df.latitude)
df_geo= gpd.GeoDataFrame(df, geometry=geo)
## Aquí es solo para verificar que se agregó la columna de coordenadas
print(df_geo)
latitude longitude place_country_name place_state_name \ 0 10.186062 -84.232017 Costa Rica Alajuela 1 14.565559 -89.347311 Guatemala Chiquimula 2 10.804979 -85.397586 Costa Rica Guanacaste 3 11.229722 -85.551120 Nicaragua Nicaragua 4 9.393755 -84.151476 Costa Rica Puntarenas .. ... ... ... ... 502 10.030168 -84.106430 Costa Rica Heredia 503 9.989997 -84.345917 Costa Rica Alajuela 504 9.612617 -82.704404 Costa Rica Limón 505 10.383321 -84.617994 Costa Rica Alajuela 506 9.407072 -84.160408 Costa Rica Puntarenas taxon_subfamily_name taxon_genus_name taxon_species_name \ 0 Eristalinae Eristalis Eristalis alleni 1 Syrphinae Salpingogaster Salpingogaster nigra 2 Eristalinae Ornidia Ornidia obesa 3 Eristalinae Polybiomyia Polybiomyia schwarzi 4 Eristalinae Ornidia Ornidia obesa .. ... ... ... 502 Eristalinae Ornidia Ornidia obesa 503 Eristalinae Ornidia Ornidia obesa 504 Eristalinae Ornidia Ornidia obesa 505 Eristalinae Ornidia Ornidia obesa 506 Eristalinae Ornidia Ornidia obesa scientific_name common_name geometry 0 Eristalis alleni flower_fly POINT (-84.23202 10.18606) 1 Salpingogaster nigra flower_fly POINT (-89.34731 14.56556) 2 Ornidia obesa Mosca joya verde POINT (-85.39759 10.80498) 3 Polybiomyia schwarzi flower_fly POINT (-85.55112 11.22972) 4 Ornidia obesa Mosca joya verde POINT (-84.15148 9.39375) .. ... ... ... 502 Ornidia obesa Mosca joya verde POINT (-84.10643 10.03017) 503 Ornidia obesa Mosca joya verde POINT (-84.34592 9.99000) 504 Ornidia obesa Mosca joya verde POINT (-82.70440 9.61262) 505 Ornidia obesa Mosca joya verde POINT (-84.61799 10.38332) 506 Ornidia obesa Mosca joya verde POINT (-84.16041 9.40707) [481 rows x 10 columns]
# Importamos el dataset naturalearth_lowres de geopandas
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# Y revisamos el nombre de las columnas que conforman el dataset
world.columns
<ipython-input-2-91a7b2547128>:2: FutureWarning: The geopandas.dataset module is deprecated and will be removed in GeoPandas 1.0. You can get the original 'naturalearth_lowres' data from https://www.naturalearthdata.com/downloads/110m-cultural-vectors/. world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
Index(['pop_est', 'continent', 'name', 'iso_a3', 'gdp_md_est', 'geometry'], dtype='object')
# Para extraer la región de Centro América, de nuestro interés
# Utilizamos la lista paises, que construimos antes para delimitar
CA = world[world.name.isin(paises)]
## Estas son dos formas de presentar el área de interés. Seguro utilizaremos la segunda
## de boundary, porque nos va a dejar plasmar los puntos de las diferentes observaciones
#print(CA.plot())
print(CA.boundary.plot(figsize = (15,9)))
Axes(0.193633,0.11;0.637734x0.77)
Dividir el mapa de Centro América para extraer cada país y representar los datos por país.¶
#creamos un nuevo df filtrando para especificamente Guatemala
gt_conteo_sp= df[df['place_country_name'] == "Guatemala"]
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de géneros.
gt_genero= gt_conteo_sp['taxon_genus_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de especies.
gt_especies_total= gt_conteo_sp['scientific_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades de los registros de especies.
gt_especies= gt_conteo_sp['scientific_name'].value_counts()
#Imprimimos los resultados de cada operación.
print(f"El total de generos de sírfidos reportados para Guatemala son: {gt_genero}\n")
print(f"El total de especies de sírfidos reportados para Guatemala son: {gt_especies_total}\n")
print(gt_especies)
El total de generos de sírfidos reportados para Guatemala son: 14 El total de especies de sírfidos reportados para Guatemala son: 20 scientific_name Asemosyrphus mexicanus 15 Toxomerus politus 10 Eristalis tenax 5 Palpada mexicana 4 Ornidia obesa 4 Palpada furcata 2 Dioprosopa clavata 2 Toxomerus bistrigus 1 Syrphus opinator 1 Eristalis circe 1 Rhinoprosopa nasuta 1 Mimocalla willistoni 1 Salpingogaster nigra 1 Toxomerus mutuus 1 Palpada pusilla 1 Copestylum ornatum 1 Milesia bella 1 Meromacrus loewi 1 Allograpta obliqua 1 Toxomerus pictus 1 Name: count, dtype: int64
## Aquí extraigo Guatemala, para poder representar únicamente las especies reportadas para GT
GT = df_geo[df_geo['place_country_name'] == "Guatemala"]
## Aquí gráfico la distribución de especies
lienzo = CA[CA['name'] == "Guatemala"].plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
GT.plot(ax = lienzo, column = 'scientific_name', marker = '*', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5), "fontsize": 6})
# Asignar título
lienzo.set_title('Observaciones de especies de SYRPHIDAE en Guatemala')
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 47.7222222222222, 'Longitud')
#creamos un nuevo df filtrando para especificamente El Salvador
es_conteo_sp= df[df['place_country_name'] == "El Salvador"]
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de géneros.
es_genero= es_conteo_sp['taxon_genus_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de especies.
es_especies_total= es_conteo_sp['scientific_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades de los registros de especies.
es_especies= es_conteo_sp['scientific_name'].value_counts()
#Imprimimos los resultados de cada operación.
print(f"El total de generos de sírfidos reportados para El Salvador son: {es_genero}\n")
print(f"El total de especies de sírfidos reportados para El Salvador son: {es_especies_total}\n")
print(es_especies)
El total de generos de sírfidos reportados para El Salvador son: 7 El total de especies de sírfidos reportados para El Salvador son: 9 scientific_name Toxomerus politus 3 Allograpta obliqua 1 Palpada mexicana 1 Toxomerus pictus 1 Menidon falcatus 1 Dioprosopa clavata 1 Palpada furcata 1 Copestylum sexmaculatum 1 Asemosyrphus mexicanus 1 Name: count, dtype: int64
## Aquí extraigo El Salvador, para poder representar únicamente las especies reportadas para GT
ES = df_geo[df_geo['place_country_name'] == "El Salvador"]
## Aquí gráfico la distribución de especies
lienzo = CA[CA['name'] == "El Salvador"].plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
ES.plot(ax = lienzo, column = 'scientific_name', marker = '*', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5), "fontsize": 6})
# Asignar título
lienzo.set_title('Observaciones de especies de SYRPHIDAE en El Salvador')
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 171.40953976830164, 'Longitud')
#creamos un nuevo df filtrando para especificamente Honduras
hn_conteo_sp= df[df['place_country_name'] == "Honduras"]
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de géneros.
hn_genero= hn_conteo_sp['taxon_genus_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de especies.
hn_especies_total= hn_conteo_sp['scientific_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades de los registros de especies.
hn_especies= hn_conteo_sp['scientific_name'].value_counts()
#Imprimimos los resultados de cada operación.
print(f"El total de generos de sírfidos reportados para Honduras son: {hn_genero}\n")
print(f"El total de especies de sírfidos reportados para Honduras son: {hn_especies_total}\n")
print(hn_especies)
El total de generos de sírfidos reportados para Honduras son: 13 El total de especies de sírfidos reportados para Honduras son: 26 scientific_name Toxomerus politus 106 Ornidia obesa 10 Palpada mexicana 10 Palpada furcata 7 Toxomerus pulchellus 7 Copestylum tympanitis 4 Toxomerus marginatus 3 Palpada vinetorum 3 Menidon falcatus 3 Dioprosopa clavata 2 Salpingogaster nigra 2 Copestylum sexmaculatum 2 Toxomerus bistrigus 2 Toxomerus pictus 2 Palpada pusilla 1 Callicera duncani 1 Eristalis circe 1 Palpada fasciata 1 Milesia pulchra 1 Toxomerus dispar 1 Asemosyrphus mexicanus 1 Toxomerus virgulatus 1 Polybiomyia schnablei 1 Copestylum ornatum 1 Palpada alhambra 1 Ocyptamus fuscipennis 1 Name: count, dtype: int64
## Aquí extraigo Honduras, para poder representar únicamente las especies para HN
HN = df_geo[df_geo['place_country_name'] == "Honduras"]
## Aquí gráfico la distribución de géneros
lienzo = CA[CA['name'] == "Honduras"].plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
HN.plot(ax = lienzo, column = 'scientific_name', marker = '*', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5), "fontsize": 6})
# Asignar título
lienzo.set_title('Observaciones de especies de SYRPHIDAE en Honduras')
#lienzo.axis("off")
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 185.19576723431214, 'Longitud')
#creamos un nuevo df filtrando para especificamente Nicaragua
ni_conteo_sp= df[df['place_country_name'] == "Nicaragua"]
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de géneros.
ni_genero= ni_conteo_sp['taxon_genus_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de especies.
ni_especies_total= ni_conteo_sp['scientific_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades de los registros de especies.
ni_especies= ni_conteo_sp['scientific_name'].value_counts()
#Imprimimos los resultados de cada operación.
print(f"El total de generos de sírfidos reportados para Nicaragua son: {ni_genero}\n")
print(f"El total de especies de sírfidos reportados para Nicaragua son: {ni_especies_total}\n")
print(ni_especies)
El total de generos de sírfidos reportados para Nicaragua son: 13 El total de especies de sírfidos reportados para Nicaragua son: 23 scientific_name Ornidia obesa 23 Palpada mexicana 7 Lycastrirhyncha nitens 4 Toxomerus pictus 4 Toxomerus pulchellus 3 Palpada vinetorum 3 Dioprosopa clavata 2 Meromacrus laconicus 2 Toxomerus politus 2 Copestylum limbipenne 2 Lycopale woodi 2 Palpada furcata 2 Palpada fasciata 2 Asemosyrphus mexicanus 1 Hybobathus phaeopterus 1 Toxomerus dispar 1 Polybiomyia schwarzi 1 Copestylum tympanitis 1 Palpada agrorum 1 Menidon falcatus 1 Salpingogaster nigra 1 Meromacrus gloriosus 1 Copestylum sexmaculatum 1 Name: count, dtype: int64
## Aquí extraigo NICARAGUA, para poder representar únicamente los géneros para NI
NI = df_geo[df_geo['place_country_name'] == "Nicaragua"]
## Aquí gráfico la distribución de géneros
lienzo = CA[CA['name'] == "Nicaragua"].plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
NI.plot(ax = lienzo, column = 'scientific_name', marker = '*', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5), "fontsize": 6})
# Asignar título
lienzo.set_title('Observaciones de especies de SYRPHIDAE en Nicaragua')
#lienzo.axis("off")
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 64.41652027474117, 'Longitud')
#creamos un nuevo df filtrando para especificamente Costa Rica
cr_conteo_sp= df[df['place_country_name'] == "Costa Rica"]
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de géneros.
cr_genero= cr_conteo_sp['taxon_genus_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de especies.
cr_especies_total= cr_conteo_sp['scientific_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades de los registros de especies.
cr_especies= cr_conteo_sp['scientific_name'].value_counts()
#Imprimimos los resultados de cada operación.
print(f"El total de generos de sírfidos reportados para Costa Rica son: {cr_genero}\n")
print(f"El total de especies de sírfidos reportados para Costa Rica son: {cr_especies_total}\n")
print(cr_especies)
El total de generos de sírfidos reportados para Costa Rica son: 19 El total de especies de sírfidos reportados para Costa Rica son: 31 scientific_name Ornidia obesa 37 Palpada furcata 17 Palpada mexicana 7 Eristalis alleni 5 Toxomerus pulchellus 5 Eristalis gatesi 4 Dioprosopa clavata 4 Toxomerus politus 4 Menidon falcatus 4 Meromacrus loewi 4 Copestylum tympanitis 3 Allograpta obliqua 3 Toxomerus pictus 3 Copestylum sexmaculatum 2 Toxomerus virgulatus 2 Ocyptamus gastrostactus 1 Toxomerus bistrigus 1 Ornidia major 1 Mimocalla tristani 1 Milesia pulchra 1 Fazia micrura 1 Ornidia 1 Hybobathus phaeopterus 1 Palpada pusilla 1 Toxomerus 1 Mallota klepsvikae 1 Eristalinus taeniops 1 Rhinoprosopa zophina 1 Leucopodella 1 Palpada vinetorum 1 Syrphipogon fucatissimus 1 Name: count, dtype: int64
## Aquí extraigo Costa Rica, para poder representar únicamente los géneros para CR
CR = df_geo[df_geo['place_country_name'] == "Costa Rica"]
## Aquí gráfico la distribución de géneros
lienzo = CA[CA['name'] == "Costa Rica"].plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
CR.plot(ax = lienzo, column = 'scientific_name', marker = '*', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5), "fontsize": 6})
# Asignar título
lienzo.set_title('Observaciones de especies de SYRPHIDAE en Costa Rica')
#lienzo.axis("off")
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 78.20063983056295, 'Longitud')
#creamos un nuevo df filtrando para especificamente Panama
pa_conteo_sp= df[df['place_country_name'] == "Panama"]
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de géneros.
pa_genero= pa_conteo_sp['taxon_genus_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades totales de especies.
pa_especies_total= pa_conteo_sp['scientific_name'].nunique()
#creamos un nuevo df y filtramos para contabilizar las cantidades de los registros de especies.
pa_especies= pa_conteo_sp['scientific_name'].value_counts()
#Imprimimos los resultados de cada operación.
print(f"El total de generos de sírfidos reportados para Panama son: {pa_genero}\n")
print(f"El total de especies de sírfidos reportados para Panama son: {pa_especies_total}\n")
print(pa_especies)
El total de generos de sírfidos reportados para Panama son: 6 El total de especies de sírfidos reportados para Panama son: 19 scientific_name Copestylum tympanitis 7 Ornidia obesa 7 Palpada furcata 6 Copestylum sexmaculatum 4 Toxomerus pulchellus 4 Toxomerus pictus 3 Palpada mexicana 3 Meromacrus anna 2 Toxomerus politus 2 Palpada albifrons 2 Toxomerus floralis 2 Toxomerus dispar 2 Palpada 2 Toxomerus bistrigus 1 Palpada vinetorum 1 Toxomerus virgulatus 1 Toxomerus mutuus 1 Dioprosopa clavata 1 Palpada pusilla 1 Name: count, dtype: int64
## Aquí extraigo Panamá, para poder representar únicamente los géneros para PA
PA = df_geo[df_geo['place_country_name'] == "Panama"]
## Aquí gráfico la distribución de géneros
lienzo = CA[CA['name'] == "Panama"].plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
PA.plot(ax = lienzo, column = 'scientific_name', marker = '*', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5), "fontsize": 6})
# Asignar título
lienzo.set_title('Observaciones de especies de SYRPHIDAE en Panama')
#lienzo.axis("off")
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 203.8983018964459, 'Longitud')
#designamos la especie que tiene mas registros, obtuvimos ese resultado en el objetivo 1
sp_mayor_registro= 'Toxomerus politus'
#agrupamos datos por pais para contabilizar los registros
pais_especie= df[df['scientific_name']== sp_mayor_registro].groupby('place_country_name')['scientific_name'].count().reset_index()
#identificamos el pais con la mayor cantidad de registros
for index, fila in pais_especie.iterrows():
pais= fila['place_country_name']
cantidad= fila['scientific_name']
print(pais_especie, '\n')
print(f'Honduras es el pais que presenta la mayor cantidad de registros con 106 para la especie {sp_mayor_registro}')
place_country_name scientific_name 0 Costa Rica 4 1 El Salvador 3 2 Guatemala 10 3 Honduras 106 4 Nicaragua 2 5 Panama 2 Honduras es el pais que presenta la mayor cantidad de registros con 106 para la especie Toxomerus politus
Mapa de distribución de reportes de Toxomerus politus en Centro América
Tpolitus = df_geo[df_geo['scientific_name'] == "Toxomerus politus"]
lienzo = CA.plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
Tpolitus.plot(ax = lienzo, marker = '*', column = 'scientific_name', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5)})
# Asignar título
lienzo.set_title('Distribución de reportes de\nToxomerus politus en Centro América')
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 125.39054831442634, 'Longitud')
Mapa de distribución de reportes de Ornidia obesa en Centro América
## Me cuentas que te parece este mapa
Oobesa = df_geo[df_geo['scientific_name'] == "Ornidia obesa"]
lienzo = CA.plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
Oobesa.plot(ax = lienzo, marker = '*', column = 'scientific_name', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (1, 0.5)})
# Asignar título
lienzo.set_title('Distribución de reportes de\nOrnidia obesa en Centro América')
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 125.39054831442634, 'Longitud')
Mapa de distribución de reportes de Toxomerus politus y Ornidia obesa en Centro América
## Me cuentas que te parece este mapa
mayores_sp = df_geo[df_geo['scientific_name'].isin({"Toxomerus politus", "Ornidia obesa"})]
lienzo = CA.plot(
figsize = (7,7),
color="white",
edgecolor="#556B2F",
linewidth = 0.6
)
mayores_sp.plot(ax = lienzo, marker = '*', column = 'scientific_name', alpha = 0.5, legend=True,
legend_kwds={"loc": "center left", "bbox_to_anchor": (0.7, 0.7), 'fontsize': 7})
# Asignar título
lienzo.set_title('Distribución de reportes de\nToxomerus politus y Ornidia obesa en Centro América')
#lienzo.axis("off")
#Labels
lienzo.set_ylabel("Latitud")
lienzo.set_xlabel("Longitud")
Text(0.5, 125.39054831442634, 'Longitud')
Objetivo 4. Determinar la cantidad de especies de acuerdo con sus hábitos alimenticios.¶
#asignamos S para saprofago y D para depredador
siglas=["S", "D"]
#creamos un diccionario con las especies de acuerdo a la categoria
saprofagos= {"Copestylum", "Dioprosopa", "Eristalinus", "Eristalis","Mallota", "Meromacrus", "Milesia", "Ornidia", "Palpada"}
depredadores= {'Allograpta', 'Asemosyrphus', 'Callicera', 'Fazia', 'Hybobathus', 'Leucopodella', 'Lycastrirhyncha', 'Lycopale', 'Menidon', 'Mimocalla', 'Ocyptamus', 'Polybiomyia', 'Rhinoprosopa', 'Salpingogaster', 'Syrphipogon', 'Syrphus', 'Toxomerus'}
#Funcion categorizar
#utilizaremos los generos para asignar los valores
def asignar_habito_alimenticio(fila):
if fila["taxon_genus_name"] in saprofagos:
return "S"
elif fila ["taxon_genus_name"] in depredadores:
return "D"
else:
return "No_asignado"
# Aplicar la función a cada fila y agregar una nueva columna
df["habito_alimenticio"] = df.apply(asignar_habito_alimenticio, axis=1)
#revisamos si existen valores nulos para la nueva columna creada
df.isnull().sum()
latitude 0 longitude 0 place_country_name 0 place_state_name 0 taxon_subfamily_name 0 taxon_genus_name 0 taxon_species_name 0 scientific_name 0 common_name 0 habito_alimenticio 0 dtype: int64
#creamos un df nuevo para filtrar los generos cuya casilla de especie dice 'unknow'
df_filtrado= df[df['taxon_species_name'] != 'unknow']
#creamos un nuevo df para eliminar los duplicados que aparecen de las especies
df_unica= df_filtrado.drop_duplicates(['taxon_species_name'])
#contabilizamos las especies de acuerdo al habito alimenticio
sp_habito= df_unica['habito_alimenticio'].value_counts()
print(sp_habito)
habito_alimenticio D 28 S 27 Name: count, dtype: int64
#revisamos el listado de las especies contadas por habito alimenticio.
#sp_habitos= df_unica.groupby('taxon_species_name')[['habito_alimenticio']].value_counts()
#print(sp_habito)
# Tamaño del gráfico
plt.figure(figsize=(4, 4))
#asignamos colores
colores= ['#ffd100', '#556B2F']
# Crear gráfico de barras
sp_habito.plot(kind='barh', color=colores)
# Título del gráfico
plt.title("Distribución de especies por habito alimenticio")
# Etiqueta del eje Y
plt.ylabel('Habito alimenticio')
# Etiqueta del eje X
plt.xlabel('Cantidad de especies')
plt.grid(alpha=0.4)
plt.show()
# Tamaño del gráfico.
plt.figure(figsize=(4, 4))
#formato del grafico
leyenda= ["Depredador: 28 especies", "Saprofago: 27 especies"]
colores= ['#FFD700', '#D2B48C'] #utilizamos colores de la paleta disponible para HTML
explode = (0, 0.05)
wedgeprops= {'linewidth': 2,'edgecolor': 'black','alpha': 0.9}
# Crear la gráfica de pastel
plt.pie(sp_habito, labels= leyenda, explode= explode, colors= colores, wedgeprops= wedgeprops, autopct='%1.1f%%')
# Título del gráfico
plt.title('Distribucion de especies por habito alimenticio')
plt.show()
Conclusiones¶
*La distribución en términos de proporción de subfamilias para Centroamérica, es similar a lo documentado en la literatura
*Los registros de las especies pueden estar influenciados por la uso de la zona y la actividad de las personas
*El uso de la herramienta Python permite analizar conjuntos de datos de diferente tamaño de forma multifuncional.
*El uso de la plataforma Colab permite el uso interactivo y colaborativo entre pequeños y grandes grupos.