Mis fotos del año 2004

Python
pyinaturalist
Español
Venezuela
Author

José R. Ferrer-Paris

Published

August 9, 2025

Modified

August 17, 2025

En el año 2004 estaba haciendo la transición de fotografía de películas (negativos y diapositivas) a las cámaras digitales. Mis contribuciones más antiguas a iNaturalist son de este año. A pesar de que en este año realicé algunos muestreos de campo para la iniciativa NeoMapas, son muy pocas las fotografías de plantas y animales que realicé, y aún no he cargado todas.

Para poner estas observaciones de 2004 en contexto temporal de mis contribuciones a iNat, pueden revisar este gráfico

Después de terminar de actualizar mis observaciones de 2010, he decidido repetir el proceso para el año 2004. Este documento me permite visualizar las fotos que ya están en iNaturalist y así evitar subir fotos por duplicado.

Cargar módulos en Python

Importamos los módulos necesarios:

import pandas as pd
from datetime import datetime
from pyinaturalist import get_observations
import ipyplot

Y declaramos una función útil para leer los datos temporales de la respuesta del API de iNat:

def as_date(x):
    if type(x) == str:
        y = datetime.strptime(x, "%Y-%m-%d").date()
    else:
        y = datetime.date(x)
    return(y)

Descargar observaciones de iNaturalist

Usamos get_observations con un intervalo de fechas que incluye todo el año 2010:

observations = get_observations(user_id='NeoMapas', 
                                d1="2004-01-01",
                                d2="2004-12-31",
                                per_page=1000)

Este número aumenta a medida que cargamos observaciones en iNat:

len(observations['results'])

11

Usamos este loop para guardar la información básica de cada observación:

records=list()
for obs in observations['results']:
    record = {
        'uri':obs['uri'],
        'location': obs['place_guess'],
        'species guess': obs['species_guess'],
        'Fecha_obs': as_date(obs['observed_on']),
        'Fecha_reg': as_date(obs['created_at'])
    }
    if len(obs['observation_photos'])>0:
        record['url'] = obs['observation_photos'][0]['photo']['url'].replace("square","medium")
        record['attribution'] = obs['observation_photos'][0]['photo']['attribution']
    records.append(record)

Y las transformamos en un marco de datos de pandas:

inat_obs=pd.DataFrame(records)

Resumen de las observaciones

Agrupamos las observaciones por la localidad y obtenemos una tabla resumen de las observaciones del año:

aggfuns = {
    'Fecha_obs': ["min", "max"],
    'Fecha_reg': ["min", "max"],
    'species guess': ['count',pd.Series.nunique],
           }
inat_obs.groupby('location').agg(aggfuns).sort_values(('Fecha_obs','min'))

Fecha_obs Fecha_reg species guess
min max min max count nunique
location
92Q7+W9P, Parroquia Macarao 1204, Miranda, Venezuela 2004-04-13 2004-04-13 2025-07-28 2025-07-28 1 1
San Pedro del Rio, Táchira, Venezuela 2004-08-29 2004-08-29 2020-08-19 2020-08-19 1 1
Camatagua 2335, Aragua, Venezuela 2004-09-05 2004-09-05 2020-08-19 2020-08-19 3 3
Aricagua, 5119, Mérida, Venezuela 2004-09-11 2004-09-11 2020-08-19 2020-08-19 1 1
Campo Elías, Mérida, Venezuela 2004-09-11 2004-09-12 2020-08-19 2020-08-19 2 2
Monsenor Iturriza, Falcón, Venezuela 2004-09-30 2004-09-30 2025-07-27 2025-07-27 2 2
Buchivacoa, Falcón, Venezuela 2004-10-02 2004-10-02 2023-11-18 2023-11-18 1 1

Filtrar por fecha

Con estas líneas de código podemos filtrar por fecha de observación:

ss = inat_obs['Fecha_obs'].apply(str) == '2004-10-02'
images = inat_obs.loc[ss,'url']
labels = inat_obs.loc[ss,'species guess']
ipyplot.plot_images(list(images), list(labels), max_images=60,)


Bulky Anole

https://inaturalist-open-data.s3.amazonaws.com/photos/335643969/medium.jpeg

O si preferimos podemos filtrar por fecha en que la observación fue añadida (registrada) en iNat:

ss = inat_obs['Fecha_reg'].apply(str) == '2020-08-19'
images = inat_obs.loc[ss,'url']
labels = inat_obs.loc[ss,'species guess']
ipyplot.plot_images(list(images), list(labels), max_images=60,)


Red Peacock

https://inaturalist-open-data.s3.amazonaws.com/photos/90839883/medium.jpg

New World Checkered-Skippers

https://inaturalist-open-data.s3.amazonaws.com/photos/90839867/medium.jpg

Zahnspinner

https://inaturalist-open-data.s3.amazonaws.com/photos/90839853/medium.jpg

White-spotted Satyr

https://inaturalist-open-data.s3.amazonaws.com/photos/90838159/medium.jpeg

anthuriums

https://inaturalist-open-data.s3.amazonaws.com/photos/90835882/medium.jpg

Espeletia lindenii

https://inaturalist-open-data.s3.amazonaws.com/photos/90835859/medium.jpg

Espeletia neriifolia

https://inaturalist-open-data.s3.amazonaws.com/photos/90835852/medium.jpg

Filtrar por localidad

Si queremos filtrar por localidad, simplemente tenemos que cambiar la primera línea:

ss = inat_obs['location'] == 'Camatagua 2335, Aragua, Venezuela'
images = inat_obs.loc[ss,'url']
labels = inat_obs.loc[ss,'species guess']
ipyplot.plot_images(list(images), list(labels), max_images=60,)


Red Peacock

https://inaturalist-open-data.s3.amazonaws.com/photos/90839883/medium.jpg

New World Checkered-Skippers

https://inaturalist-open-data.s3.amazonaws.com/photos/90839867/medium.jpg

Zahnspinner

https://inaturalist-open-data.s3.amazonaws.com/photos/90839853/medium.jpg

Progreso

Muchos años después todavía estoy en el proceso de registrar todas las fotos de mis viajes del año 2012:

aggfuns = {
    'Fecha_obs': ["min", "max"],
    'location': ['count',pd.Series.nunique],
    'species guess': [pd.Series.nunique],
           }
inat_obs.groupby('Fecha_reg').agg(aggfuns)

Fecha_obs location species guess
min max count nunique nunique
Fecha_reg
2020-08-19 2004-08-29 2004-09-12 7 4 7
2023-11-18 2004-10-02 2004-10-02 1 1 1
2025-07-27 2004-09-30 2004-09-30 2 1 2
2025-07-28 2004-04-13 2004-04-13 1 1 1

Todas las observaciones

Y cierro aquí con todas las imágenes de las observaciones de este año:

images = inat_obs.sort_values('Fecha_obs')['url']
labels = inat_obs.sort_values('Fecha_obs')['species guess']
ipyplot.plot_images(list(images), list(labels), max_images=200,)


Lieinix nemesis

https://inaturalist-open-data.s3.amazonaws.com/photos/543821546/medium.jpg

White-spotted Satyr

https://inaturalist-open-data.s3.amazonaws.com/photos/90838159/medium.jpeg

Red Peacock

https://inaturalist-open-data.s3.amazonaws.com/photos/90839883/medium.jpg

New World Checkered-Skippers

https://inaturalist-open-data.s3.amazonaws.com/photos/90839867/medium.jpg

Zahnspinner

https://inaturalist-open-data.s3.amazonaws.com/photos/90839853/medium.jpg

anthuriums

https://inaturalist-open-data.s3.amazonaws.com/photos/90835882/medium.jpg

Espeletia lindenii

https://inaturalist-open-data.s3.amazonaws.com/photos/90835859/medium.jpg

Espeletia neriifolia

https://inaturalist-open-data.s3.amazonaws.com/photos/90835852/medium.jpg

Great Egret

https://inaturalist-open-data.s3.amazonaws.com/photos/543203348/medium.jpg

Scarlet Ibis

https://inaturalist-open-data.s3.amazonaws.com/photos/543203348/medium.jpg

Bulky Anole

https://inaturalist-open-data.s3.amazonaws.com/photos/335643969/medium.jpeg