import pandas as pd
import folium
from datetime import datetime, timedelta
from pyinaturalist import (
Observation,
get_observations,
pprint,
)
import ipyplot
from itertools import compressA visit to Abu Dhabi
Abu Dhabi
Python
pyinaturalist
Folium
A summary of my iNaturalist observations during a visit to Abu Dhabi for the IUCN World Conservation Congress.
Load Python modules
Download iNaturalist observations
From the end of May to the first week of June 2025
observations = get_observations(user_id='NeoMapas',
d1="2025-10-01",
d2="2025-10-16",
per_page=1000)len(observations['results'])
pprint(observations)ID Taxon ID Taxon Observed on User Location ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 321831714 2926 Genus Streptopelia Oct 15, 2025 neomapas Abu Dhabi, AE (Turtle-Doves And Collared-Doves) 321831658 4933 Genus Egretta (Small Egrets Oct 15, 2025 neomapas Abu Dhabi, AE And Herons) 321831607 75723 Avicennia marina (Grey Oct 15, 2025 neomapas Abu Dhabi, AE Mangrove) 321831583 3879 Tringa totanus (Common Oct 15, 2025 neomapas Abu Dhabi, AE Redshank) 321831535 128828 Eriphia smithii (Red-Eyed Reef Oct 15, 2025 neomapas Abu Dhabi, AE Crab) 321831507 128828 Eriphia smithii (Red-Eyed Reef Oct 15, 2025 neomapas Abu Dhabi, AE Crab) 321831446 47190 Family Grapsidae (Shore Crabs) Oct 15, 2025 neomapas Abu Dhabi, AE 321831408 Oct 15, 2025 neomapas Abu Dhabi, AE 321831388 92437 Genus Terapon Oct 15, 2025 neomapas Abu Dhabi, AE 321831357 47178 Class Actinopterygii Oct 15, 2025 neomapas Abu Dhabi, AE (Ray-Finned Fishes) 321831337 3879 Tringa totanus (Common Oct 15, 2025 neomapas Abu Dhabi, AE Redshank) 321831291 1312955 Genus Aphaniops Oct 15, 2025 neomapas Abu Dhabi, AE 321831281 47178 Class Actinopterygii Oct 15, 2025 neomapas Abu Dhabi, AE (Ray-Finned Fishes) 321831250 47178 Class Actinopterygii Oct 15, 2025 neomapas Abu Dhabi, AE (Ray-Finned Fishes) 321822183 340403 Pluchea dioscoridis (Barnouf) Oct 14, 2025 neomapas Abu Dhabi, AE 321821555 52734 Genus Cyperus (Flatsedges) Oct 14, 2025 neomapas Abu Dhabi, AE 321821517 783660 Subfamily Zygophylloideae Oct 14, 2025 neomapas Abu Dhabi, AE 321821499 14590 Pycnonotus leucotis Oct 14, 2025 neomapas Abu Dhabi, AE (White-Eared Bulbul) 321821465 14590 Pycnonotus leucotis Oct 14, 2025 neomapas Abu Dhabi, AE (White-Eared Bulbul) 321821437 8034 Corvus ruficollis Oct 14, 2025 neomapas Abu Dhabi, AE (Brown-Necked Raven) 321818046 47178 Class Actinopterygii Oct 15, 2025 neomapas Abu Dhabi, AE (Ray-Finned Fishes) 321817954 4871 Vanellus indicus (Red-Wattled Oct 15, 2025 neomapas Abu Dhabi, AE Lapwing) 321817913 204454 Acridotheres tristis (Common Oct 15, 2025 neomapas Abu Dhabi, AE Myna) 321817877 53843 Brephidium exilis (Western Oct 15, 2025 neomapas Abu Dhabi, AE Pygmy-Blue) 321817854 67688 Suborder Caelifera Oct 15, 2025 neomapas Abu Dhabi, AE (Grasshoppers, Locusts, And Allies) 321817824 68484 Genus Colotis (Tips) Oct 15, 2025 neomapas Abu Dhabi, AE 321817795 424574 Colotis phisadia (Blue-Spotted Oct 15, 2025 neomapas Abu Dhabi, AE Arab) 321813483 7706 Genus Prinia (Prinias) Oct 10, 2025 neomapas Abu Dhabi, AE 321813463 14590 Pycnonotus leucotis Oct 10, 2025 neomapas Abu Dhabi, AE (White-Eared Bulbul) 321813446 7251 Order Passeriformes (Perching Oct 10, 2025 neomapas Abu Dhabi, AE Birds) 321813416 204454 Acridotheres tristis (Common Oct 10, 2025 neomapas Abu Dhabi, AE Myna) 321813407 7998 Genus Corvus (Crows And Oct 10, 2025 neomapas Abu Dhabi, AE Ravens) 321813395 144422 Genus Euodice (Typical Oct 10, 2025 neomapas Abu Dhabi, AE Silverbills) 321813383 2926 Genus Streptopelia Oct 10, 2025 neomapas Abu Dhabi, AE (Turtle-Doves And Collared-Doves) 321813362 2926 Genus Streptopelia Oct 10, 2025 neomapas Abu Dhabi, AE (Turtle-Doves And Collared-Doves) 321560593 78555 Phoenix dactylifera (Date Oct 14, 2025 neomapas Central District - Al Ain Palm) Oasis - Abu Dhabi - United Arab Emirates 321560329 20969 Upupa epops (Common Hoopoe) Oct 14, 2025 neomapas Abu Dhabi, AE 321560323 5361 Neophron percnopterus Oct 14, 2025 neomapas United Arab Emirates (Egyptian Vulture) 321560316 120917 Calotropis procera (Giant Oct 14, 2025 neomapas Abu Dhabi, AE Milkweed) 321557217 145350 Euodice malabarica (Indian Oct 14, 2025 neomapas Abu Dhabi, AE Silverbill) 321557206 33903 Complex Pristurus rupestris Oct 14, 2025 neomapas Abu Dhabi, AE (Species Complex: Rock Semaphore Gecko) 321557148 67714 Genus Capparis (Caperbushes) Oct 14, 2025 neomapas Abu Dhabi, AE 321557116 497859 Tecomella undulata (Desert Oct 14, 2025 neomapas United Arab Emirates Teak) 321557104 5361 Neophron percnopterus Oct 14, 2025 neomapas United Arab Emirates (Egyptian Vulture) 321557057 69143 Subfamily Myrmicinae Oct 14, 2025 neomapas Abu Dhabi, AE (Myrmicine Ants) 321557027 901280 Colotis phisadia phisadia Oct 14, 2025 neomapas Abu Dhabi, AE 321556975 47434 Family Poaceae (Grasses) Oct 14, 2025 neomapas Abu Dhabi, AE 320681751 8031 Corvus splendens (House Crow) Oct 10, 2025 neomapas Mubarak Bin Mohammed Street, Abu Dhabi, Abu Dhabi, AE 319884336 34505 Hemidactylus flaviviridis Oct 10, 2025 neomapas Corniche Street, Abu Dhabi, (Northern House Gecko) Abu Dhabi, AE
Map of observations
map = folium.Map(tiles="Esri NatGeoWorldMap")fg = folium.FeatureGroup(name="iNaturalist observations", control=True, attribution="observers @ iNaturalist").add_to(map)
popup_text = """<img src='{url}'>
<caption><i>{species}</i> observed on {observed_on} / {attribution}</caption> {desc}
"""
for obs in observations['results']:
if obs['quality_grade'] == 'research':
if obs['description'] is None:
desc = ""
else:
desc = obs['description']
pincolor = 'green'
else:
desc = "Observation is not research quality grade."
pincolor = 'gray'
fg.add_child(
folium.Marker(
location=obs['location'],
popup=popup_text.format(
species=obs['species_guess'],
observed_on=obs['observed_on'],
desc=desc,
url = obs['observation_photos'][0]['photo']['url'],
attribution = obs['observation_photos'][0]['photo']['attribution']),
icon=folium.Icon(color=pincolor),
)
)
folium.LayerControl().add_to(map)<folium.map.LayerControl object at 0x126a378f0>
map.fit_bounds(map.get_bounds())
mapMake this Notebook Trusted to load map: File -> Trust Notebook
Travel log
records=list()
for obs in observations['results']:
record = {'quality': obs['quality_grade'],
'description': obs['description'],
'location': obs['place_guess'],
'longitude': obs['location'][1],
'latitude': obs['location'][0],
'species guess': obs['species_guess'],
'Fecha': obs['observed_on'],
}
if len(obs['observation_photos'])>0:
record['url'] = obs['observation_photos'][0]['photo']['url']
record['attribution'] = obs['observation_photos'][0]['photo']['attribution']
records.append(record)inat_obs=pd.DataFrame(records)inat_obs["dia"]=inat_obs.Fecha.apply(datetime.date)inat_obs.groupby('dia').agg({'species guess': ['count',pd.Series.nunique]})| species guess | ||
|---|---|---|
| count | nunique | |
| dia | ||
| 2025-10-10 | 10 | 9 |
| 2025-10-14 | 18 | 16 |
| 2025-10-15 | 20 | 15 |
my_observations = Observation.from_json_list(observations)images = [obs.photos[0].small_url for obs in my_observations]
labels = [str(obs) for obs in my_observations]Playas de Abu Dhabi
Explore observations on iNaturalist
ss = [datetime.date(obs.observed_on).strftime('%d/%m/%Y') in ['10/10/2025',] for obs in my_observations]
ipyplot.plot_images(list(compress(images, ss)), list(compress(labels, ss)), max_images=60,)Visita a Al Ain
ss = [datetime.date(obs.observed_on).strftime('%Y-%m-%d') in ['2025-10-14'] for obs in my_observations]
ipyplot.plot_images(list(compress(images, ss)), list(compress(labels, ss)), max_images=60,)Last day in Abu Dhabi
ss = [datetime.date(obs.observed_on).strftime('%Y-%m-%d') in ['2025-10-15'] for obs in my_observations]
ipyplot.plot_images(list(compress(images, ss)), list(compress(labels, ss)), max_images=60,)