Comparaison de Wikispecies avec la NCBI-Taxonomy
Wikispecies est un projet de Wikimedia visant à rassembler de nombreuses informations sur la taxonomie de l’ensemble des espèces du vivante, à laquelle tout internaute peut contribuer, à la manière de Wikipédia. La NCBI Taxonomy est une base de données sur la classification et la nomenclature des organismes, adossée à la base de données de séquences du NCBI (National Center for Biotechnology Information).
Dans ce billet, nous allons explorer ces deux bases de données, afin d’essayer d’identifier des différences dans les arbres du vivant proposés par les deux bases de données.
Récupération de la base NCBI Taxonomy en local
Une archive de la NCBI Taxonomy peut être récupérée depuis le serveur FTP du NCBI.
Récupération de l’arbre phylogénétique de Wikispecies depuis Wikidata
Wikispecies repose en partie sur la base de connaissance Wikidata. Vous pouvez utiliser l’instance https://qlever.dev/ de QLever, une base de donnée graphe supportant les triplets RDF et le langage de requête SPARQL.
Commençons par extraire les liens de parentés entre les taxons et les noms standard des taxons.
# All taxon in Wikidata with parent taxons
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?taxon ?taxon_name ?taxon_rank ?parent_taxon
WHERE
{
?taxon wdt:P31 wd:Q16521 ;
wdt:P105 ?taxon_rank ;
wdt:P225 ?taxon_name .
OPTIONAL { ?taxon wdt:P171 ?parent_taxon }
}
Pour avoir les noms des rangs taxonomiques on peut utiliser la requête suivante:
# English name of a taxon rank
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?rank ?rank_name
WHERE
{
?rank wdt:P31 wd:Q427626 .
OPTIONAL { ?rank rdfs:label ?rank_name . FILTER (lang(?rank_name) = "en")}
}
Essai de visualisation sur iTol
Dans un élan de naïveté, j’ai essayé de visualiser le graphe ainsi produit sur iTol (interactive tree of life). Pour ce faire, j’ai écrit un petit programme en Rust pour convertir une liste d’arête en abre au format Newick. Comme on pouvait s’y attendre iTol ne parvient pas à faire le rendu d’un arbre aussi gros.
Comparaison à gros grain
Dans un premier temps, nous allons comparer les deux arbres en utilisant une approche à gros grain, en ne gardant que les noeuds des niveaux taxonomiques principaux:
- Domaine
- Règne
- Division
- Classe
- Ordre
- Famille
- Genre
- Espèce
Nous allons commencer par comparer l’arbre sur les trois premiers plus hauts niveaux de l’arbre.
Comment extraire le sous arbre avec une partie des rang taxonomiques?
Prenons l’exemple d’un chemin dans l’arbre qui passe par les noeuds: A, B, C. Si le noeud B n’est pas un taxon du rang retenu, nous allons simplement remplacer ce chemin par l’arête (A, C).
Si il existe un noeud d’embranchement qui n’est pas un taxon de rang conersvé, on rattachera ses noeud fils au plus proche neoud parent qui est conservé.
De cette façon, on obtiendra un graphe un poil plus léger, et plus facile à manipuler.