Regional observation stats¶
This example shows how to get some general statistics on all observations in a given region. See https://www.inaturalist.org/places to find place IDs.
[1]:
from time import sleep
import altair as alt
import pandas as pd
from IPython.display import Image
from pyinaturalist.node_api import (
get_observations,
get_observation_species_counts,
get_observation_observers,
get_observation_identifiers,
)
from pyinaturalist.request_params import ICONIC_TAXA
# Adjustable values
PLACE_ID = 6
PLACE_NAME = 'Alaska'
General stats¶
Total observations, unique taxa, identifiers, and observers
[2]:
total_observations = get_observations(
place_id=PLACE_ID,
verifiable=True,
per_page=0,
)['total_results']
print(f'Total observations: {total_observations}')
total_taxa = get_observation_species_counts(
place_id=PLACE_ID,
verifiable=True,
per_page=0,
)['total_results']
print(f'Total taxa observed: {total_taxa}')
total_identifiers = get_observation_identifiers(place_id=PLACE_ID, per_page=0)['total_results']
print(f'Total identifiers: {total_identifiers}')
total_observers = get_observation_observers(place_id=PLACE_ID, per_page=0)['total_results']
print(f'Total observers: {total_observers}')
Total observations: 160888
Total taxa observed: 5868
Total identifiers: 5003
Total observers: 5972
Stats by iconic taxon¶
Show a breakdown of observations and taxa observed for each of the iconic taxa (major species groups), using their corresponding icons on iNaturalist. Here are a couple helper functions to make this easier:
[3]:
THROTTLING_DELAY = 1.0 # Time to wait in between subsequent requests
TAXON_IMAGE_URL = 'https://raw.githubusercontent.com/inaturalist/inaturalist/main/app/assets/images/iconic_taxa/{taxon}-75px.png'
iconic_taxa = list(ICONIC_TAXA.values())
iconic_taxa.remove('Unknown')
# Run one search for each iconic taxon
def get_iconic_taxa_counts(function):
iconic_taxa_counts = {}
for taxon_name in iconic_taxa:
total_taxon_observations = function(
place_id=PLACE_ID,
iconic_taxa=taxon_name,
verifiable=True,
per_page=0,
)['total_results']
iconic_taxa_counts[taxon_name] = total_taxon_observations
print(f'Total results for {taxon_name}: {total_taxon_observations}')
if taxon_name != iconic_taxa[-1]:
sleep(THROTTLING_DELAY)
return iconic_taxa_counts
def get_iconic_icon(taxon_name):
return TAXON_IMAGE_URL.format(taxon=taxon_name.lower())
Observations¶
[4]:
total_observations_by_iconic_taxon = get_iconic_taxa_counts(get_observations)
# Create a chart, sorted by number of observations, using the appropriate iNaturalist icons
observations_df = pd.DataFrame([
{'iconic taxon': k, 'observations': v, 'img': get_iconic_icon(k)}
for k, v in total_observations_by_iconic_taxon.items()
])
alt.Chart(
observations_df,
title=f'Verifiable observations in {PLACE_NAME} by iconic taxon',
width=750,
height=500,
).mark_image().encode(
x=alt.X('iconic taxon:N', sort='-y'),
y='observations:Q',
url='img'
)
Total results for Animalia: 9427
Total results for Aves: 28266
Total results for Amphibia: 380
Total results for Reptilia: 4
Total results for Mammalia: 9825
Total results for Actinopterygii: 2215
Total results for Mollusca: 5810
Total results for Arachnida: 1882
Total results for Insecta: 17786
Total results for Plantae: 63246
Total results for Fungi: 20499
Total results for Chromista: 951
Total results for Protozoa: 479
[4]:
Taxa¶
[5]:
total_taxa_by_iconic_taxon = get_iconic_taxa_counts(get_observation_species_counts)
# Create a chart, sorted by number of observations, using the appropriate iNaturalist icons
taxa_df = pd.DataFrame([
{'iconic taxon': k, 'unique taxa': v, 'img': get_iconic_icon(k)}
for k, v in total_taxa_by_iconic_taxon.items()
])
alt.Chart(
taxa_df,
title=f'Unique taxa observed in {PLACE_NAME} by iconic taxon',
width=750,
height=500,
).mark_image().encode(
x=alt.X('iconic taxon:N', sort='-y'),
y='unique taxa:Q',
url='img'
)
Total results for Animalia: 550
Total results for Aves: 346
Total results for Amphibia: 7
Total results for Reptilia: 2
Total results for Mammalia: 80
Total results for Actinopterygii: 143
Total results for Mollusca: 295
Total results for Arachnida: 131
Total results for Insecta: 1196
Total results for Plantae: 1791
Total results for Fungi: 1195
Total results for Chromista: 96
Total results for Protozoa: 26
[5]:
[6]:
# Including the rendered image so the chart will display outside Jupyter, e.g. on GitHub's notebook viewer
Image('images/total_observations_by_iconic_taxon.png')
[6]:
[7]:
Image('images/total_taxa_by_iconic_taxon.png')
[7]: