-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Data GBIF/iNaturalist => Synthese ? #2775
Comments
@nleguillarme et @DonovanMaillard, je vois ici que vous vous êtes déjà penchés sur la question :
|
Salut Sylvain, C'est touours prévu de mon coté, tant pour le GBIF que pour iNaturalist. Mais question de temps, je n'ai toujours pas pu m'y atteler. Mes espoirs pour fin 2023 s'amenuisent peu à peu ;) |
Salut Sylvain, Oui c'est toujours une idée qui est dans les tuyaux. à bientôt |
Pour moi iNaturalist est un outil et une communauté de contribution au GBIF (parmi plein d'autres dont l'INPN). Attention aussi au fait que les données de l'INPN sont versées régulièrement dans le GBIF donc on pourrait récupérer des données qu'on a déjà. De la même manière, il est souhaité pouvoir importer des données depuis l'INPN en interrogeant l'API d'OpenObs. |
On est d'accord ! (et c'est pour ça que je l'ai mis en premier dans le titre)
Oui, c'est un point d'attention à avoir, et je sais que le GBIF a développé des outils avancés de détection de doublons.
👍👍👍
Super !!! Merci @TheoLechemia 👍👍👍 Content de voir que le sujet ne déclenche pas de polémique 😀 Vive l'OpenData et les communs numériques 💚 |
Je me suis penché sur la question, et pour le moment je ne trouve aucune API qui retourne les obs complètes dans la doc des API d'OpenObs... |
Oui l'API INPN d'OpenObs n'est pas documentée actuellement et donc pas forcément prévue pour le moment pour être interroger directement pas des outils tiers ? Mais Amandine avait aussi commencé des tests et noté cela mais avec des mailles 10km - https://github.com/PnX-SI/Ressources-techniques/tree/master/SINP/open_obs |
Pas vraiment "open", "OpenObs" ? 😉 Dans tous les cas, il est préférable de pointer directement sur le GBIF, les données "Open" y seront dispo "brutes". Autant pointer sur le plus haut niveau, puis effectivement appliquer un filtre pour supprimer les données qui proviendraient de cette instance GeoNature, ou qui y auraient déjà été intégrées. |
Vous aviez pas déjà fait ca pour la Jamaïque ? Sinon oui, très preneur pour les territoire qui font un ABC, ils veulent des données. |
Si car c'est de l'opendata et on peut télécharger les données précises (non sensibles) comme prévu dans le SINP, donc c'est un super outil et une super avancée. Oui les données de iNaturalist remontent directement et bien dans le GBIF, mais ce qui est saisi dans un GeoNature ou les outils français, ou est intégré dans l'INPN ne remonte pas aussi simplement et rapidement dans le GBIF. Ensuite sur le fait d'intégrer les données de l'INPN ou du GBIF dans un GeoNature d'un parc, je ne pense pas qu'il y ait de règle ou de réponse unique. Pour ma part, je ne suis pas convaincu qu'un GeoNature territorial d'un parc national ou régional nécessite de réintégrer toutes les données existantes sur son territoire, tant qu'elles sont disponibles quelque part d'accessible et ouvert. Mais à terme, quand les flux, les API et les outils d'import automatiques seront disponibles, libre à chacun d'enrichir son GeoNature avec des données nationales ou internationales.
On avait fait un projet expérimental pour tester de récupérer toutes les données GBIF d'un pays (Jamaïque pour l'exemple) et d'une ville (Copenhague en complément) et de monter un GeoNature-atlas sur ces données. Les atlas GeoNature basés sur les données GBIF de Jamaïque et de Copenhague sont malheureusement éteints actuellement, car on avait besoin de ressources serveurs pour d'autres projet. :-) |
Oui oui, c'est évident : je lance le sujet, car je trouve que c'est important d'y réfléchir, mais je n'attends pas à ce que ce soit en place rapidement. Mais au moins, le débat est lancé (et justement, c'est important de le lancer puisque je lis quelques appréciations différentes dans la suite de ton message 😀)
Là, je suis moins d'accord, mais bien entendu, je ne suis qu'un "simple utilisateur" de GeoNature, avec la vision d'un naturaliste et/ou gestionnaire d'espace naturels. Pour un "gestionnaire d'espace naturels" il est utile d'avoir un outil de "monitoring" de son territoire d'étude. Ensuite, présenter un Atlas de la Biodiversité du PNR de Tartempion, avec des cartes de fiches espèces qui ne reflètent qu'une partie de la connaissance, alors que cette dernière est accessible, c'est quand même bien dommage (j'ai plusieurs observations sous iNaturalist de nouvelles espèces pour le territoire du PNR concerné, qui n'apparaissent donc pas dans les listings/cartes, alors qu'elles le devraient). Je pense, pour participer à de nombreux réseaux naturalistes, que de plus en plus de données viendront de cette plateforme (iNaturalist), et que les ignorer serait une "faute stratégique". Et comme ces données sont dans le GBIF (c'est une des raisons, après l'ergonomie, pour laquelle j'utilise iNaturalist), autant se connecter au GBIF directement, c'est la logique pour éviter d'avoir à multiplier les connexions à la multiplicités des instances/plateformes productrices. Non ? |
Il y a bien une doc développeurs avec certaines API, des exemples avec une doc swagger téléchargeables etc, mais seulement pour des routes qui synthétisent des données : statistiques, infos d'un taxon, statistiques par années etc : Pour le moment je n'ai pas trouvé d'API qui retourne des objets "occurrences" mais c'est peut être à venir. A voir aussi sur le projet source, open obs est basé sur un outil déployé dans d'autres pays.
Ca c'est des questions de positionnements qui dépendent des utilisateurs et des gestionnaires. Je gère plusieurs instances, certains ont besoin d'avoir leurs données dans une boite isolée pour leurs rendus, analyses etc, et d'avoir accès aux données des autres dans des outils distincts. D'autres veulent tout dans leur base pour avour tout au même endroit. Et certains sites protégés ne sont prospectés que par ou pour le gestionnaire puisque interdit aux autres. Les contextes et les besoins sont très variables et l'outil ne doit pas faire le choix à la place de son administrateur :) |
On est bien d'accord ! 😀
On donc, si l'administrateur d'une instance souhaite que son outil affiche les données OpenData, il faut anticiper cette demande.
Il va de soit que les données en OpenData externes ne doivent pas être mélangée avec les données de l'administrateur de l'instance. |
Oui oui, mais du coup on est plusieurs à s'y intéresser, et à le prévoir pour le GBif. Le soucis pour beaucoup d'entre nous c'est de trouver le temps de faire un truc qui fonctionne bien, qui soit facile à utiliser, et qui gère bien les questions des métadonnées, des doublons avec les données qu'on récupère localement etc :) Mais ça reste au programme ! |
Salut à tous, |
On a discuté récemment ici d'intégrer le référentiel taxonomique du GBIF à la place de Taxref : PnX-SI/TaxHub#318 En terme d'automatisation de cela il n'y a rien de nouveau à m connaissance. |
Merci Camille pour ta réponse.
Cela ne me semble pas pertinent pour le besoin identifié d'import dans une instance française/SINP. Le lien entre TAXREF et GBIF est déjà opérationnel à 96% : Il ne faut donc pas intégrer le référentiel du GBIF "à la place de Taxref", mais "en complément de TaxRef", en ajoutant par exemple à TaxHub un champ |
Je me permets à nouveau de relancer ce sujet. De mon côté, j'ai finalement découvert que la correspondance Par ailleurs, le GBIF dispose d'une API, et un module Python dédié : PyGBIF : https://github.com/gbif/pygbif De manière assez simple, j'ai pu récupérer via ce module les occurrences, en filtrant par exemple selon une emprise (bounding-box) et un jeu de donnée (Dataset "iNaturalist Research-grade Observations") Il me semble que tout est réuni pour que ce travail soit relativement "simple", si l'objectif est "juste" d'ajouter un jeu de données "GBIF" répondant à quelques filtres (spatiaux, taxonomiques, sources, ...). Reste quand même le gros travail de mise en correspondance des champs des occurrences, mais ce travail n'a pas besoin d'être exhaustif, puisque le lien vers la source permet d'avoir toutes les infos. Avant que je n'aille plus loin, n'étant pas véritablement développeur, je me permets de relancer la bouteille à la mer pour savoir si certains auraient déjà fait ce travail, et des bouts de code à partager ? Ou si ceux qui se seraient frottés à ce sujet ne voudraient pas profiter de ce fil pour partager les éventuelles difficultés rencontrés ? |
Merci, en effet il y a matière à regarder tout ça. Pour ma part, je ne peux et ne veux pas récupérer les données seules sans les métadonnées, ce qui complique un peu les choses. Je ne me suis pas repenché sur ce sujet pour le moment, je n'ai pas de deadline pour ça donc ça ne sera pas pour les prochaines semaines, |
Pour ce qui concerne les métadonnées, je pensais créer manuellement un jeu de donnée dédiée au Dataset "iNaturalist Research-grade Observations" Sinon, pour ceux que cela intéresse, voici déjà un code fonctionnel, basé sur une liste d'Observateurs "en dur". import csv
from pygbif import occurrences as occ
from datetime import datetime
# Export name for naming export file
exportname = 'iNaturalist_gbif_observers_list_ornearea'
# Bounding box (latitude/longitude) to limit area
min_latitude = 48.175391
max_latitude = 48.977037
min_longitude = -0.867335
max_longitude = 0.98335
# List of observers
observer_list = ['User1', 'User Toto', 'Sylvain Montagner'] # based on recordedBy field
# Search params
search_params = {
'country': 'FR', # France
'decimalLatitude': f'{min_latitude},{max_latitude}',
'decimalLongitude': f'{min_longitude},{max_longitude}',
'datasetKey': '50c9509d-22c7-4a22-a47d-8c48425ef4a7', # iNaturalist dataset
'limit': 300, # Limit of 300 occurrences per request
}
# Function to retrieve all occurrences with pagination
def get_all_occurrences(params, observers):
all_occurrences = []
for observer in observers:
offset = 0
params['recordedBy'] = observer
while True:
params['offset'] = offset
occurrences = occ.search(**params)
results = occurrences['results']
if not results:
break
all_occurrences.extend(results)
offset += len(results)
print(f"{offset} occurrences retrieved for observer {observer} ...")
return all_occurrences
# Retrieve all occurrences
all_occurrences = get_all_occurrences(search_params, observer_list)
# List all available fields
all_fields = set()
for occurrence in all_occurrences:
all_fields.update(occurrence.keys())
# Get current date and time for export name
current_datetime = datetime.now().strftime("%Y%m%d_%H%M%S")
# Save occurrences in a CSV file
output_file = f"occurrences_{exportname}_{current_datetime}.csv"
with open(output_file, mode='w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=list(all_fields))
writer.writeheader()
for occurrence in all_occurrences:
writer.writerow({field: occurrence.get(field, '') for field in all_fields})
print(f"occurrences have been recorded in the {output_file} file.") |
Via API2GNJ'ai commencé a bricoler un truc suite aux rencontres geonature, pour utiliser https://github.com/PnX-SI/api2GN gbif_parser.py
Pour le moment, je suis que a l'étape du POC https://api.gbif.org/v1/organization/28eb1a3f-1c15-4a95-931a-4af90ecb574d par contre je n'arrive pas a trouver l'uuid de l'observation et d'après les discutions c'était disponible 🤔 Avec ton exemple, je vais essayer de creuser dans les semaines qui viennent pour avoir un truc fonctionnel sur un secteur et les données provenant de Inaturalist. On a des conservateurs bénévoles qui préfèrent saisir sur cet outil et on voit jamais les données... je vais créer une branche dédiée bientôt. |
Trop bien ! Hésite pas à faire une PR sur le repo API2GN. J'ai hâte de tester ça |
Super : bravo @pierre56 😃 Même si la licence des données permettrait d'intégrer la totalité du jeu de données, l'intérêt, c'est que cela donne à l'observateur le choix d'intégrer ou non ses données d'autres plateforme dans son instance de saisie. |
Salut la Team GeoNature 😀
Longtemps que je ne suis pas passé ici, et désolé par avance si le sujet a déjà été évoqué.
Je n'administre plus aucune base GeoNature, mais je reste naturaliste et animé de la passion de saisir/valoriser mes observations, et à ce titre il m'arrive encore de saisir des observations sur plusieurs instances GeoNature.
Cependant, je dois avouer qu'en tant que photographe naturaliste, j'ai aussi été séduit par l'ergonomie et surtout la philosophie d'iNaturalist, qui selon moi est une révolution en la matière (je pourrai en parler des heures, mais ce n'est pas le lieu).
Finalement, que ce soit iNaturalist, le GBIF (ou d'autres plateformes que je ne connaitrais pas), il y a aujourd'hui un certain nombre de données naturalistes de qualité, librement accessibles (dans le cas d'iNaturalist ou GBIF, via une API par exemple).
De mon point de vue (mais j'accepte d'être contredit), ces données devraient être intégrées dans la synthèse d'une instance GeoNature, selon le périmètre de cette instance (géographique, taxonomique, ...).
La synthèse pouvant alimenter un ou des Atlas, il serait dommage de se priver de données libres pour compléter la répartition ou la phénologie des fiches espèces de cet Atlas.
J'ouvre donc cette issue pour
Merci à vous !
Sylvain
The text was updated successfully, but these errors were encountered: