A visit to Tajikistan

Tajikistan
Python
pyinaturalist
Folium
Autor/a

José R. Ferrer-Paris

Fecha de publicación

12 de junio de 2025

Fecha de última modificación

22 de julio de 2025

A summary of my iNaturalist observations during a visit to Tajikistan for the Internation Conference on Glacier Preservation.

Load Python modules

import pandas as pd
import folium
from datetime import datetime, timedelta
from pyinaturalist import (
    Observation,
    get_observations,
    #pprint,
)
import ipyplot
from itertools import compress

Download iNaturalist observations

From the end of May to the first week of June 2025

observations = get_observations(user_id='NeoMapas', 
                                d1="2025-05-27",
                                d2="2025-06-06",
                                per_page=1000)
len(observations['results'])

33

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 0x105d1c500>
map.fit_bounds(map.get_bounds())
map

Make 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-05-28 13 12
2025-05-31 1 1
2025-06-01 9 9
2025-06-02 9 9
2025-06-03 1 1
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]

Dushanbe and Hissor Fortress

Observations from our first day in Tajikistan:

Explore observations on iNaturalist

ss = [datetime.date(obs.observed_on).strftime('%d/%m/%Y') in ['28/05/2025',] for obs in my_observations]
ipyplot.plot_images(list(compress(images, ss)), list(compress(labels, ss)), max_images=60,)


Observation(id=287555579, taxon=Taxon(id=47219, full_name=Apis mellifera (Western Honey Bee)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517053821/small.jpg

Observation(id=287554558, taxon=Taxon(id=49996, full_name=Family Anthomyiidae (Root-Maggot Flies)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517051883/small.jpg

Observation(id=287553058, taxon=Taxon(id=490837, full_name=Oxythyrea cinctella (Middle Eastern Flower Scarab)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517049414/small.jpg

Observation(id=287552808, taxon=Taxon(id=84694, full_name=Genus Diplazon), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517049027/small.jpg

Observation(id=287552607, taxon=Taxon(id=57678, full_name=Genus Lasioglossum), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517048651/small.jpg

Observation(id=287551549, taxon=Taxon(id=13851, full_name=Passer montanus (Eurasian Tree Sparrow)), observed_on=May 28, 2025, username=neomapas, place_guess=Hisor, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517045881/small.jpg

Observation(id=287440206, taxon=Taxon(id=1455922, full_name=Spilopelia senegalensis (Laughing Dove)), observed_on=May 28, 2025, username=neomapas, place_guess=Hisor, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516837100/small.jpg

Observation(id=285978405, taxon=Taxon(id=204454, full_name=Acridotheres tristis (Common Myna)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Rudaki, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/514066867/small.jpg

Observation(id=285976985, taxon=Taxon(id=322498, full_name=Genus Muscina), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/514064669/small.jpg

Observation(id=285976187, taxon=Taxon(id=52910, full_name=Family Sarcophagidae (Flesh Flies And Satellite Flies)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/514063142/small.jpg

Observation(id=285975107, taxon=Taxon(id=49996, full_name=Family Anthomyiidae (Root-Maggot Flies)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Rudaki, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/514060079/small.jpg

Observation(id=285972030, taxon=Taxon(id=2969, full_name=Streptopelia decaocto (Eurasian Collared-Dove)), observed_on=May 28, 2025, username=neomapas, place_guess=Hisor, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/514055160/small.jpg

Observation(id=285970270, taxon=Taxon(id=55401, full_name=Pieris brassicae (Large White)), observed_on=May 28, 2025, username=neomapas, place_guess=Dushanbe, Rudaki, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/514051738/small.jpg

Siyoma Gorge

ss = [datetime.date(obs.observed_on).strftime('%Y-%m-%d') in ['2025-06-01'] for obs in my_observations]
ipyplot.plot_images(list(compress(images, ss)), list(compress(labels, ss)), max_images=60,)


Observation(id=287549332, taxon=Taxon(id=47574, full_name=Genus Juniperus (Junipers)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Varzob District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517042365/small.jpg

Observation(id=287549331, taxon=Taxon(id=133251, full_name=Genus Tettigonia), observed_on=Jun 01, 2025, username=neomapas, place_guess=Varzob District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517042052/small.jpg

Observation(id=287549326, taxon=Taxon(id=87231, full_name=Genus Cardiophorus), observed_on=Jun 01, 2025, username=neomapas, place_guess=Varzob District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517041536/small.jpg

Observation(id=287547296, taxon=Taxon(id=57485, full_name=Parnassius mnemosyne (Clouded Apollo)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Varzob District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517039219/small.jpg

Observation(id=287545982, taxon=Taxon(id=1473092, full_name=Oreomecon crocea (Ice Poppy)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Safed dara, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517036717/small.jpg

Observation(id=287544798, taxon=Taxon(id=889089, full_name=Bos grunniens (Domestic Yak)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Vahdat District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517034110/small.jpg

Observation(id=287543675, taxon=Taxon(id=53196, full_name=Genus Rumex (Docks And Sorrels)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Vahdat District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/517032331/small.jpg

Observation(id=287488662, taxon=Taxon(id=61295, full_name=Aporia crataegi (Black-Veined White)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Varzob District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516929381/small.jpg

Observation(id=287488128, taxon=Taxon(id=70355, full_name=Genus Eurydema (Cabbage Bugs, Caper Bugs And Allies)), observed_on=Jun 01, 2025, username=neomapas, place_guess=Varzob District, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516928384/small.jpg

Paseo a Tigrovaya Balka

ss = [datetime.date(obs.observed_on).strftime('%Y-%m-%d') in ['2025-06-02','2025-06-03'] for obs in my_observations]
ipyplot.plot_images(list(compress(images, ss)), list(compress(labels, ss)), max_images=60,)


Observation(id=287477444, taxon=Taxon(id=11901, full_name=Hirundo rustica (Barn Swallow)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Jilikul, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516906241/small.jpg

Observation(id=287476151, taxon=Taxon(id=47126, full_name=Kingdom Plantae (Plants)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Jilikul, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516903737/small.jpg

Observation(id=287475317, taxon=Taxon(id=5173, full_name=Circus aeruginosus (Western Marsh Harrier)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Qabodiyon, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516902526/small.jpg

Observation(id=287473587, taxon=Taxon(id=49358, full_name=Family Myrmeleontidae (Antlions And Owlflies)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Jilikul, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516899672/small.jpg

Observation(id=287471508, taxon=Taxon(id=125514, full_name=Genus Zizeeria), observed_on=Jun 02, 2025, username=neomapas, place_guess=Jilikul, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516893895/small.jpg

Observation(id=287465444, taxon=Taxon(id=112442, full_name=Selysiothemis nigra (Black Pennant)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Jilikul, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516883530/small.jpg

Observation(id=287464484, taxon=Taxon(id=53905, full_name=Mantis religiosa (European Mantis)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Jilikul, Khatlon, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516881757/small.jpg

Observation(id=287462513, taxon=Taxon(id=1545769, full_name=Varanus caspius (Caspian Monitor)), observed_on=Jun 03, 2025, username=neomapas, place_guess=Jilikul, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516878338/small.jpg

Observation(id=287448693, taxon=Taxon(id=42134, full_name=Sus scrofa (Wild Boar)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Qabodiyon, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516852289/small.jpg

Observation(id=287433091, taxon=Taxon(id=6638, full_name=Apus apus (Common Swift)), observed_on=Jun 02, 2025, username=neomapas, place_guess=Dushanbe, Tajikistan)

https://inaturalist-open-data.s3.amazonaws.com/photos/516822391/small.jpg