Ontologia

Méthodologie scientifique

Cette page documente la transformation des données brutes en indicateurs et pages publiées. Pour la provenance (quelle source, quelle licence, quel checksum, quand téléchargé), voir la page Sources & citations.

Dernière mise à jour : 2026-04-24. Les volumes indiqués correspondent à cet instantané. Les formules et seuils restent stables tant que l'ICO v2.1 et le filtrage GBIF ne sont pas révisés scientifiquement.

1. Volumes de données

Trois couches successives : sources externes ingérées telles quelles, tables intermédiaires dérivées par jointure ou agrégation, et précomputés de présentation (matviews, caches) dont les URLs publiées dépendent.

1.1 Couche source (brute)

TableRowsSource primaireRôle
observations174 110 640GBIF (occurrence download)Occurrences géolocalisées + date, France métropole + DOM
species108 568TAXREF v18 (INPN/MNHN)Référentiel taxonomique, noms, rangs, statuts
relationships1 018 382GloBI (validated=true)Relations écologiques interspécifiques
communes34 879IGN Admin Express + INSEEGéométries communes + population
habitat_ref22 707HABREF v7 (INPN)91 typologies habitats (EUNIS, CORINE, …)
species_habitats63 162HABREF liens espèce × habitatHabitats préférentiels par espèce
znieff_zones20 095PatriNat 2025-11-28ZNIEFF I (17 718) + II (2 377) continentales + marines
natura2000_sites1 762PatriNat 2024-12ZSC (1 355) + ZPS (407) — Directives Habitats & Oiseaux
natura2000_species24 892FSD (Formulaires Standard Données)Espèces d'intérêt communautaire par site
protected_areas11 425PatriNat 2026-01 Espaces Protégés57 désignations INPN (RNN, RNR, APB, PN, PNR, Ramsar, CEN, CDL, …)
protected_area_species6 936Liens espèces EPEspèces motivation / présentes dans chaque EP
species.is_eee_ue_regulated~80DwC-A INBO / GBIF CC0Flag booléen + date d'entrée en vigueur, Règlement UE 1143/2014 « EEE préoccupantes pour l'Union »
species_traits + species_traits_best (matview)> 500 k valeursAgrégation multi-sources40+ traits : morpho (masse/longueur/hauteur/envergure), cycle de vie (longévité), reproduction (gestation/couvée/maturité), écologie (régime/activité/habitat/locomotion/migratoire), divers (chromosomes/vitesse/métabolisme). Sources priorisées AnAge > FishBase (poissons, via EOL) > TRY (plantes, via EOL) > BirdLife (oiseaux, via EOL) > EOL Trait Bank (agrégateur 50+ bases) > Wikidata. Traçabilité par valeur : source_url direct,confidence, registry_id.

1.2 Couche intermédiaire (dérivée)

Table / MatviewRowsDérivée deLogique d'agrégation
commune_species19 123 920observations × communesAgrégat matriciel nb obs par paire (commune, espèce). Jointure spatiale ST_Intersects puis COUNT(*) GROUP BY commune_insee, species_id.
species_phenology330 947observations.dateAgrégat (espèce, mois). Filtrage des dates par défaut GBIF (01/01 + 31/12). Ajout de detection_rate = n_obs_espèce_mois / total_obs_mois pour neutraliser l'effort saisonnier. Cf. §4.
commune_indicators34 8796 axes dérivés de commune_speciesICO v1 + v2.1 composites. Richesse Shannon, patrimoniale, raréfaction, typicité, connectivité, stabilité — chacun en percentile rank. Cf. §3.
commune_protected_areas34 879Overlap communes.geom × 8 catégories zones protégéesST_Intersection(ST_Union(zones_categorie), commune.geom) / ST_Area(commune). ST_Subdivide(256) pour accélérer ×20 les polygones massifs. Cf. §5.
ico_category_mapping57Table lookup éditable57 désignations INPN → 4 catégories ICO EP (foncier, parcs_adhesion, ramsar_biosphere, reserves_strictes). Modifiable sans migration ; --recompose-only rejoue la composition en 30 s.
species_dist_heatmap12 317 626Précalcul densité observationsCache heatmap par (species, lat_bin, lng_bin). Évite 100 ms × 100k species au rendu.
commune_heatmap_cache3 577 291Cache choropleth multi-échellesPré-bins par niveau de zoom. Clustering au-dessus de 34 879 communes affichées simultanément.

1.3 Volume de pages publiées

L'agrégation finale produit ~200 000 URLs indexables dans le sitemap : 108 k fiches espèces, 34 k fiches communes, 20 k pages ZNIEFF, 1.8 k pages Natura 2000, 11.4 k pages Espaces Protégés, plus les pages taxonomiques (famille / ordre / classe ≥ 5 espèces), les pages habitat, les régions et départements. Chaque page est factuelle et dérivée des données — aucune génération de contenu par LLM sur du texte naturel, uniquement des templates déterministes quand la description verbatim de la source est absente.

2. Pipeline d'agrégation

Schéma des dépendances. Flèche = « alimente ». Toute modification d'une table amont requiert de rejouer les compute scripts avals (cf. annexe OPERATIONS.md du dépôt).

┌─────────────────┐  ┌──────────────────┐  ┌────────────────────┐
│  TAXREF v18     │  │   GBIF France    │  │   PatriNat INPN    │
│   108 k species │  │  174 M occurr.   │  │  33 k zones prot.  │
└────────┬────────┘  └─────────┬────────┘  └────────┬───────────┘
         │                     │                    │
         ▼                     ▼                    ▼
    ┌────────┐          ┌─────────────┐      ┌─────────────┐
    │species │◀────────▶│observations │      │znieff_zones │
    │        │  cd_nom  │  174 110 640│      │natura2000_..│
    └────┬───┘          └──────┬──────┘      │protected_.. │
         │                     │             └──────┬──────┘
         │          ST_Intersects(geom)             │
         │                     ▼                    │
         │         ┌──────────────────────┐         │
         │         │   commune_species    │         │
         │         │     19 123 920       │         │
         │         └──────────┬───────────┘         │
         │                    │                     │
         ▼                    ▼                     ▼
  ┌──────────────┐    ┌────────────────┐    ┌──────────────────────┐
  │species_phen. │    │ commune_indic. │    │commune_protected_a.  │
  │  330 947     │    │  34 879 (v1)   │    │    34 879 × 8 cat.   │
  │ filtré GBIF  │    └────────┬───────┘    └──────────┬───────────┘
  │ + detec_rate │             │                       │
  └──────────────┘             │  0.5  +  0.5          │
                               └───────────┬───────────┘
                                           ▼
                                   ICO v2.1 (patrim_score_v2)
                                   PERCENT_RANK pré-composition

Chaque script de calcul est idempotent et loggé : volume traité, throughput, ETA, phases numérotées. Les imports passent tous par fetch-with-mirrorsavec checksum SHA-256 enregistré dans data_sources_registry(traçabilité complète, cf. page Sources).

3. ICO v2.1 — Indice Commune Ontologia

3.1 Contexte

L'ICO v1 agrégeait 6 dimensions de biodiversité par percentile rankcommunal (Jenks & Caspall 1971[7], approche EBV / GEO BON). L'axe patrimonial v1 (fraction d'espèces déterminantes ZNIEFF × UICN sévérité) saturait car il reflétait l'effort d'inventaire plus que la valeur biologique intrinsèque : les communes sur-prospectées cumulaient des cochages d'espèces rares, les communes sous-prospectées restaient invisibles (Isaac & Pocock 2015[8]). Résultat : stddev < 8, discrimination effondrée.

L'ICO v2 ajoute un bonus spatial structurel indépendant de l'effort : l'overlap géométrique entre la commune et 8 catégories de zones protégées, pondéré par l'intensité biologique/réglementaire de chaque catégorie (Dudley 2008[1], Watson 2014[2]).

3.2 Les 6 dimensions de l'ICO v1

DimensionMétriqueRéférence
RichesseIndice de Shannon H' sur commune_species.observation_countShannon 1948
PatrimonialeFraction espèces déterminantes ZNIEFF × sévérité UICN (Margules & Pressey 2000[14])Horellou 2013[3], Touroult 2022[4]
RaréfactionCourbe aire-espèces (SAR) déviance vs attendu localFisher-Corbet-Williams 1943
TypicitéCohérence du cortège vs communes voisines (Jaccard)Jaccard 1912
ConnectivitéDensité du graphe GloBI restreint aux espèces localesDunne 2002
StabilitéTendance temporelle observations/an (pente sur 10 ans)Boakes 2010[9] (caveat biais)

3.3 Bonus spatial v2 — formule verbatim

Pondérations validées par revue scientifique indépendante (2026-04-24), inspirées de Watson 2014[2] (IUCN I-IV primés) et Horellou 2013[3] (ZNIEFF I comme seul référentiel avec critères biologiques explicites) :

patrim_bonus =
      0.25 × overlap_znieff_t1_continental      -- signal biologique fort (Horellou 2013)
    + 0.05 × overlap_znieff_marine              -- sémantique marine distincte
    + 0.25 × overlap_natura2000                 -- ZSC ∪ ZPS par UNION géométrique (Directives UE)
    + 0.20 × overlap_reserves_strictes          -- RNN + APB + PN cœur (IUCN I-IV, Watson 2014)
    + 0.10 × overlap_ramsar_biosphere           -- Ramsar + MAB UNESCO + OSPAR + Barcelone
    + 0.05 × overlap_znieff_t2                  -- grands ensembles, signal diffus
    + 0.07 × overlap_parcs_adhesion             -- PNR + PN aires adhésion + GSF (IUCN V)
    + 0.03 × overlap_foncier                    -- CEN + Conservatoire du Littoral

Chaque overlap_* ∈ [0, 1] = fraction de la surface communale recouverte par l'ST_Union des zones de cette catégorie. Les 8 catégories sont géométriquement disjointes dans l'esprit mais peuvent se chevaucher en pratique (une ZNIEFF peut aussi être Natura 2000). On n'anti-double-compte pas : chaque catégorie est un axe indépendant du signal réglementaire-biologique.

3.4 Composition finale — Option C (percentile rank pré-composition)

Le bonus brut patrim_bonus a une distribution à queue longue (communes Polynésie / Guyane à 99 % de couverture, vs majorité métropole entre 10-30 %). Une combinaison linéaire directe (0.5 × v1 + 0.5 × bonus × 100) donne trop de poids aux extrêmes et corrélation anormalement forte (corr = 0.95 vs v1, donc v2 apporte peu). Recommandation scientifique validée : percentile rank pré-composition (Jenks & Caspall 1971[7], méthode EBV / GEO BON) :

-- Option C validée
patrim_bonus_pct      = PERCENT_RANK(patrim_bonus) OVER () × 100
patrimonial_score_v2  = 0.5 × patrimonial_percentile_v1
                      + 0.5 × patrim_bonus_pct

3.5 Tests de validation (tous passés)

TestCibleMesuréRéférence
stddev(v2)> 18 (vs v1 < 8)24.51Discrimination effective
corr(v1, v2)∈ [0.65, 0.85]0.808v2 ajoute du signal sans trahir v1
Hotspots réf.≥ 8 / 14 dans top 1008 / 14Camargue, Fontainebleau, Saorge, …
Coverage médiane~27 % (UE Maiorano)24.8 %Maiorano 2015[5]

Top 10 post-ICO v2.1 (échantillon) : Mantet, Saintes-Maries-de-la-Mer, Gruissan, Gavarnie-Gèdre, Saorge, Fontainebleau, Le Grau-du-Roi, Aigues-Mortes, Arles — cohérent avec les hotspots de biodiversité établis de la littérature.

3.6 Corrections techniques documentées

  • Mapping PN (Parc National) : INPN utilise le mêmedesignation_abbr='pn' pour la zone cœur (IUCN II, protection stricte → reserves_strictes) et l'aire d'adhésion (IUCN V, gestion concertée → parcs_adhesion). Le script distingue via designation_label ILIKE '%adhésion%' pour router correctement les 11 aires AOA.
  • Antiméridien (Polynésie) : les géométries polynésiennes traversent la ligne de changement de date. ST_Area::geographyéchoue avec lwgeom_area_spher returned area < 0.0. Filtre appliqué avant ST_Union : (ST_XMax(geom) - ST_XMin(geom)) < 350.
  • Optimisation spatiale : ST_Subdivide(256)sur les polygones > 256 vertices accélère ×20 lesST_Intersection sur les ZNIEFF II continentales (> 10 000 km²), cf. PostGIS docs.
  • Invariance des invalides : ST_MakeValidappliqué en amont sur toutes les géométries source (zones protégées issues de shapefiles parfois auto-intersectants).

4. Phénologie — filtrage des biais GBIF

4.1 Source et granularité

La matview species_phenology agrège les 174 M observations GBIF par (species_id, month). 330 947 lignes résultent de la combinaison 108 k espèces × 1-12 mois présents (les espèces avec 0 observation datée sont omises). Alimente le calendrier 12 mois sur chaque fiche espèce.

4.2 Biais détectés — analyse data-driven

Requête ratio vs fenêtre glissante ±5 jours (Robertson 2010[10], Zizka 2019[11] / CoordinateCleaner) pour distinguer les pics pathologiques (conventions d'encodage) des pics légitimes (effort saisonnier naturel). Seuil de filtrage adopté : ratio ≥ 5×.

DateObsVoisins ±5j moy.RatioVerdict
1er janvier20 504 708158 000130×Pathologique — filtré
31 décembre695 302126 8055.48×Pathologique — filtré
1er avril944 972399 0532.37×Borderline — conservé
1er juin, 1er juillet1.1-1.2 M~750 0001.49-1.52×Légitime — effort printanier
15 juin792 338~900 000< 1×Légitime

Les deux dates filtrées correspondent à deux conventions GBIF d'encodage de dates imprécises (année seule connue, collections historiques, atlas rétrospectifs) : YYYY-01-01 dominante et YYYY-12-31 minoritaire (Maldonado 2015[12]). Volume retiré : 21.2 M / 173.2 M = 12.2 %. Impact sur le signal biologique : nul (retire du bruit structurel, pas du signal).

4.3 Normalisation par effort saisonnier

L'observation citoyenne GBIF/iNaturalist/Vigie-Nature est sur-représentée au printemps/été (×10-20 vs hiver). Un calendrier en nombre d'observations brut confond activité de l'espèce et disponibilité des observateurs. La matview ajoute donc une colonne detection_rate (Isaac & Pocock 2015[8]) :

detection_rate = n_obs_espèce_ce_mois / total_obs_ce_mois

-- Exemple Hirundo rustica (hirondelle rustique, migrateur trans-saharien) :
-- Avril 2023 : 113 593 obs / 16 199 048 total = 0.701 %
-- Mai   2023 : 118 374 obs / 22 031 247 total = 0.537 %
-- En raw: mai = pic (effort max). En detection_rate: avril = pic (vraie
-- phénologie, arrivée massive post-migration).

Les barres UI et le pic narratif (« pic en avril ») sont calés sur detection_rate. Le compte brut reste accessible en tooltip pour transparence.

4.4 Requête SQL complète de la matview

CREATE MATERIALIZED VIEW species_phenology AS
WITH filtered AS (
  SELECT species_id, commune_insee,
         EXTRACT(MONTH FROM date)::INT AS month
    FROM observations
   WHERE date IS NOT NULL
     AND NOT (
          (EXTRACT(MONTH FROM date) = 1  AND EXTRACT(DAY FROM date) = 1)
       OR (EXTRACT(MONTH FROM date) = 12 AND EXTRACT(DAY FROM date) = 31)
     )
),
monthly_effort AS (
  SELECT month, COUNT(*)::BIGINT AS total_obs_month
    FROM filtered GROUP BY month
)
SELECT f.species_id, f.month,
       COUNT(*)::INT                        AS n_observations,
       COUNT(DISTINCT f.commune_insee)::INT AS n_communes,
       me.total_obs_month,
       (COUNT(*)::DOUBLE PRECISION / NULLIF(me.total_obs_month, 0))
         AS detection_rate
  FROM filtered f
  JOIN monthly_effort me ON me.month = f.month
 GROUP BY f.species_id, f.month, me.total_obs_month;

5. Overlaps spatiaux — les 8 catégories

Pour chaque commune, on calcule 8 fractions de surface couverte par une UNION géométrique des zones de chaque catégorie. L'union évite le sur-comptage quand 2 zones de même catégorie se chevauchent.

Catégorie ICOPoidsIUCNDesignations INPN incluses
znieff_t1_continental0.25ZNIEFF type I (17 718) hors marines. Inventaire biologique, critères espèces déterminantes (Horellou 2013).
znieff_marine0.05ZNIEFF I-Mer (306). Catégorie séparée — sémantique marine distincte.
natura20000.25ZSC (1 355, Habitats) ∪ ZPS (407, Oiseaux). UNION géométrique (un site peut être les deux).
reserves_strictes0.20I-IV28 designations EP. RNN, RNR, RBI, APB, APHN, MN, PN zone cœur, RNCFS, …
ramsar_biosphere0.106 designations EP. Ramsar, réserves de biosphère MAB UNESCO, OSPAR, Barcelone.
znieff_t20.05ZNIEFF type II (2 377). Grands ensembles fonctionnels, signal diffus.
parcs_adhesion0.07V20 designations EP. PNR (58), PN aire d'adhésion (11), GSF, sites classés 1930, zones adhésion géoparcs.
foncier0.033 designations EP. CEN (Conservatoires d'Espaces Naturels), CDL (Conservatoire du Littoral).

Le mapping des 57 désignations INPN Espaces Protégés → 4 catégories ICO (reserves_strictes, parcs_adhesion, ramsar_biosphere, foncier) est stocké dans la table lookup ico_category_mapping. Modifiable sans migration : un UPDATE suivi de npm run compute:commune-protected-areas -- --recompose-onlyrejoue la composition en 30 s (vs 18 min pour le spatial complet).

6. Traits biologiques — agrégation multi-sources

6.1 Architecture

Table species_traits stocke une ligne par(species × trait × source). Matview species_traits_best agrège avec priorisation scientifique pour donner une valeur canonique par trait. La fiche espèce consomme la matview ; chaque valeur UI porte un badge source cliquable (URL directe de la valeur pour audit).

-- Matview species_traits_best : 1 valeur par (species, trait), priorisée
CREATE MATERIALIZED VIEW species_traits_best AS
SELECT DISTINCT ON (species_id, trait_key)
  species_id, trait_key, value_numeric, value_text, unit,
  source, source_url, confidence
FROM species_traits
ORDER BY species_id, trait_key,
  CASE source
    -- Tier 1 : sources académiques peer-reviewed spécialisées par groupe
    WHEN 'anage'            THEN 1   -- longévité vertébrés (gold)
    WHEN 'pantheria'        THEN 1   -- mammifères
    WHEN 'avonet'           THEN 1   -- oiseaux morphologie
    WHEN 'amphibio'         THEN 1   -- amphibiens
    WHEN 'squambase'        THEN 1   -- lézards + serpents
    WHEN 'fishbase'         THEN 1   -- poissons
    WHEN 'elton'            THEN 1   -- régimes birds + mammals
    WHEN 'animal_traits'    THEN 1   -- masse/BMR/cerveau multi-taxon
    WHEN 'brot'             THEN 1   -- plantes méditerranéennes
    WHEN 'leda_seed_mass'   THEN 1   -- LEDA plantes Europe
    WHEN 'leda_canopy_height' THEN 1
    WHEN 'leda_sla'         THEN 1
    WHEN 'leda_age_first_flowering' THEN 1
    WHEN 'try_categorical'  THEN 1   -- TRY catégorique 66k plantes
    WHEN 'logghe_arthropod' THEN 1   -- arthropodes NW Europe
    WHEN 'wst'              THEN 1   -- araignées mondiales
    -- Tier 2-3 : agrégateurs (futur)
    WHEN 'eol'              THEN 3
    -- Tier 4 : fallback large couverture
    WHEN 'wikidata'         THEN 4
    ELSE 5
  END, confidence DESC, fetched_at DESC;

6.2 Sources

SourceScopeSpeciesLicenceCitation
AnAge (HAGR)Vertébrés, longévité + reproduction + masse + métabolisme. Gold standard académique.4 645Academic (CC-BY-NC)Tacutu et al. 2018, Nucleic Acids Res. 46(D1):D1083-D1090
PanTHERIAMammifères du monde, 45+ traits (life history, écologie, distribution, climat, métabolisme).5 400+Liberal academicJones et al. 2009, Ecology 90:2648
AVONETTous oiseaux, morpho (bec/ailes/tarse/queue) + écologie (habitat, régime, migration) + range.11 009CC-BY 4.0Tobias et al. 2022, Ecology Letters 25:581-597
AmphiBIOAmphibiens globaux, 17 traits (habitat, régime, reproduction, activité, élévation).6 500+CC-BY 4.0Oliveira et al. 2017, Scientific Data 4:170123
SquamBaseSquamates (lézards + serpents), morpho + life history + distribution. 18 ans de travail manuel.11 744CC-BY 4.0Meiri et al. 2024, Global Ecology and Biogeography
FishBaseTous poissons, taxonomie + morphologie + longévité + habitat + régime + vulnérabilité.35 000+CC-BY-NC 4.0Froese & Pauly (eds). FishBase.org, snapshot HuggingFace v24.07
EltonTraits 1.0Oiseaux + mammifères mondiaux, régimes alimentaires (10 catégories en %) + stratégies de nourrissage + activité temporelle.15 393Liberal academic (ESA)Wilman et al. 2014, Ecology 95(7):2027
AnimalTraitsMulti-taxon (vertébrés + invertébrés), masse corporelle + BMR + taille cerveau, curé depuis 400+ sources.~2 900CC-BY 4.0Herberstein et al. 2022, Scientific Data 9:265
Logghe arthropodes NW Europe4 000+ arthropodes d'Europe du Nord-Ouest (insectes + araignées), 10 traits : taille, fécondité, développement, voltinisme, dispersion, longévité, enveloppe thermique. Darwin Core Archive GBIF.4 000+CC-BY-NC 4.0Logghe et al. 2025, GBIF Checklist, doi:10.15468/75g5z9
BROT 2.0Plantes du bassin méditerranéen, 44 traits fonctionnels (croissance, dispersion, feu, germination, phénologie). Pertinent flore française Sud.2 457CC-BY 4.0Tavşanoğlu & Pausas 2018, Scientific Data 5:180135
LEDA TraitbaseFlore Europe NW (~8 000 plantes), 4 traits : masse semence, hauteur couvert, SLA, âge première floraison. Compilation herbiers + terrain 15+ pays.~8 000Academic (citation)Kleyer et al. 2008, J. Ecology 96:1266-1274
TRY Plant Trait DatabaseSous-ensemble Categorical (66 043 plantes mondiales) : 13 traits catégoriques (PlantGrowthForm, LeafType, LeafPhenology, PhotosyntheticPathway C3/C4/CAM, Woodiness, Succulent, Climber, Aquatic, Epiphyte…). Flow 3-POST + Basic Auth.66 043TRY ToS (CC-BY-SA)Kattge et al. 2020, Global Change Biology 26:119-188
World Spider Trait (WST)Base mondiale Araneae (~13 000 espèces, 513 571 records) : morphométrie, colorations, écologie (moisture, stratum, ballooning), prédation (hunting guild, web building, paralysis latency), physio (thermal, venom), repro (eggsacs, egg size), silk biomechanics. API REST publique.~13 000CC-BY 4.0Pekár et al. 2021, Database (Oxford) 2021:baab064
Wikidata SPARQLTraits variés + cross-refs (EOL/GBIF/NCBI/ITIS/IUCN) + noms vernaculaires multi-langues + interactions prey/feeds-on.99 938 (QID)CC0 1.0Vrandečić & Krötzsch 2014, Commun. ACM 57(10):78-85

6.3 Couverture par groupe TAXREF

Kingdom / ClasseSpecies TAXREF FRSpecies couvertesSources actives
Mammifères~100~95 (~95%)AnAge, PanTHERIA, EltonTraits, AnimalTraits, Wikidata
Oiseaux~500407 (~81%)AVONET, AnAge, EltonTraits, Wikidata
Amphibiens~3038 (100%)AmphiBIO, AnAge, Wikidata
Reptiles (squamates)~5035 (~70%)SquamBase, AnAge, Wikidata
Poissons~600831 (inclut marins mondiaux)FishBase, Wikidata
Plantes vasculaires~6 000~5 000 (~83%)TRY (catégorique), BROT (méd), LEDA (Europe NW), Wikidata
Insectes~35 000~4 580 (14%, cible Europe NW)Logghe (NW Europe), AnimalTraits, Wikidata
Araignées (Araneae)~1 700~1 223 (~72%)WST (mondial), Logghe, Wikidata
Fungi~12 000quasi nulWikidata (comestibles connus)
Autres invertébrés (marins, sol…)~15 000partiel (AnimalTraits)AnimalTraits, Wikidata

Total matview species_traits_best : ~90 000 valeurs canoniques sur 11 000+ espèces (environ 10 % de la DB globale, mais 70–95 % sur les groupes visibles grand public). L'écart sur le total s'explique par les fungi, micro-invertébrés marins et plancton pour lesquels aucun référentiel global de traits ouvert n'existe actuellement.

6.4 Roadmap — sources restantes

Les groupes suivants sont aujourd'hui peu couverts par les sources ouvertes disponibles. À intégrer si un référentiel CC-BY / CC0 devient accessible :

  • Fungi : pas de gold standard trait global ouvert. MyCoPortal et MycoBank pour la taxonomie, mais les traits morphologiques (sporophore, comestibilité, hôte mycorhizien) restent épars dans des monographies. Suivi IndexFungorum pour les taxa.
  • Invertébrés marins : WoRMS + OBIS pour taxonomie et distributions. Beukhof 2019 (poissons démersaux européens) et coral-traits.org prévus pour un prochain sprint.
  • TRY quantitatif : le sous-ensemble catégorique est déjà intégré. Pour les traits quantitatifs (SLA, azote foliaire, hauteur précise, masse feuille), TRY exige une data request formelle non automatisable. BROT et LEDA compensent partiellement pour la flore FR.
  • Insectes hors Europe NW : Logghe 2025 couvre ~4 000 arthropodes d'Europe du Nord-Ouest. Bases spécialisées (GlobalAnts pour fourmis, BETSI sol EU, InsectBase Lepidoptera) à intégrer individuellement pour couvrir le Sud de la France et les DOM-TOM.

6.3 Traits collectés (40+ clés)

Morphologie : mass_kg, mass_birth_g, mass_weaning_g, length_cm, height_cm, wingspan_cm, width_cm, thickness_cm. Cycle de vie : lifespan_years_max, lifespan_years_avg, generation_time_days. Reproduction : gestation_days, incubation_days, weaning_days, age_first_reproduction_days, clutch_size_avg/max, interbirth_interval_days. Écologie : diet, activity_cycle (diurnal/nocturnal/crepuscular), trophic_level, habitat_type, locomotion, migratory, reproductive_mode, endemic_to, extinction_status, conservation_status_iucn_worldwide. Divers : chromosome_count, speed_kmh_max, metabolic_rate_w, body_temperature_c, color_main.

6.4 Contrôle qualité

  • Conversion d'unités stricte : chaque source fournit valeur + unité explicite (via wikibase:quantityUnit pour Wikidata, normal_units pour EOL). Si l'unité n'est pas reconnue, la valeur est écartée — jamais devinée.
  • Sanity checks par trait : plafonds biologiques (ex. longévité < 500 ans, masse < 200 t). Valeurs hors range = skip + log.
  • Multi-valeurs préservées : si 2 sources divergent (ex. Wikidata = 4,5 kg, AnAge = 5,2 kg), les 2 lignes coexistent dans species_traits. La matview remonte AnAge (priorité 1). Le conflit reste auditable.
  • Resilience : checkpoint persistant par batch dans trait_import_checkpoints. En cas de crash, resume automatique depuis last_key_processed. Idempotent via ON CONFLICT UPDATE.
  • Traçabilité à la valeur : source_url + source_ref + confidence + FK registry_id. Chaque badge source UI est cliquable et pointe directement sur la page source de la valeur.

8. Limites & biais assumés

Aucun dispositif de correction totale n'existe. Les biais résiduels ci-dessous sont documentés pour que l'utilisateur scientifique puisse interpréter les indicateurs avec prudence.

  • Effort d'observation inégal spatialement (Boakes 2010[9], Isaac & Pocock 2015[8]) : sur-représentation péri-urbaine, côtière, Sud-Est. Les communes rurales peu visitées apparaissent artificiellement pauvres. Le bonus spatial ICO v2.1 atténue mais n'élimine pas.
  • Biais horaire : espèces diurnes sur-observées vs nocturnes (rapaces nocturnes, micromammifères, amphibiens crépusculaires). Le detection_rate ne corrige que l'axe temporel mensuel, pas l'axe horaire.
  • Biais taxonomique : vertébrés charismatiques (oiseaux, mammifères, rhopalocères) sur-observés vs hyménoptères, diptères, mousses, champignons, algues. Un indicateur de diversité fondé sur GBIF en France reflète en premier lieu la diversité des groupes documentés.
  • Observations opportunistes ≠ protocole standardisé : GBIF agrège des Atlas, des Vigie-Nature, des iNaturalist, des SINP, sans effort standardisé. Les tendances temporelles (dimension « Stabilité » de l'ICO) sont indicatives — pas des vraies courbes d'abondance.
  • ZNIEFF > valeur biologique locale : un ZNIEFF de type I n'est pas un statut réglementaire. Son inclusion dans l'ICO v2.1 bonus (poids 0.25) reflète son intensité biologique présumée (critères d'espèces déterminantes, Touroult 2022[4]), pas une protection effective. Les gestionnaires régionaux actualisent les périmètres tous les 10-20 ans avec un lag d'observation.
  • Antériorité des observations : les références à « 174 M observations » incluent les cochages historiques des collections muséales. La date affichée sur la fiche espèce (calendrier phénologique) reflète l'ensemble du corpus, pas uniquement la période récente.
  • Colonne commune_insee NULL sur observations : bug d'import historique. La liaison observation ↔ commune passe par le précomputé commune_species (spatial join déjà fait) ; conséquence : species_phenology.n_communes = 0 (feature dégradée, à corriger dans un futur import re-propagant commune_insee via ST_Intersects).

9. Bibliographie

  1. [1]Dudley N. (ed.) 2008. Guidelines for Applying Protected Area Management Categories. IUCN, Gland, Switzerland. — Référence des catégories IUCN I-VI des aires protégées, fondement de la pondération reserves_strictes vs parcs_adhesion.
  2. [2]Watson J.E.M., Dudley N., Segan D.B., Hockings M. 2014. The performance and potential of protected areas. Nature, 515:67-73. — Méta-analyse du gain biologique des aires protégées par catégorie IUCN.
  3. [3]Horellou A., Dore A., Herard K., Siblet J-P. 2013. Guide méthodologique pour l'inventaire continu des Zones Naturelles d'Intérêt Écologique, Faunistique et Floristique — ZNIEFF. MNHN/MEDDE. — Critères d'espèces déterminantes ZNIEFF.
  4. [4]Touroult J., Witté I., Pouvreau M., Siblet J-P. 2022. Évaluation de la pertinence du dispositif d'inventaire ZNIEFF pour la biodiversité française. Bulletin de la Société française d'Écologie et Évolution.
  5. [5]Maiorano L. et al. 2015. On how much biodiversity is covered in Europe by public protected areas and by the Natura 2000 network: an insight into the Italian case. Biodiversity and Conservation, 24:1-15. — Coverage médiane UE-27 %, cible de validation de l'ICO v2.1.
  6. [6]Trochet A., Schmeller D.S. 2013. Effectiveness of the Natura 2000 network to cover threatened species. Nature Conservation, 4:35-53.
  7. [7]Jenks G.F., Caspall F.C. 1971. Error on choropleth maps: definition, measurement, reduction. Annals of the Association of American Geographers, 61:217-244. — Fondement théorique du percentile rank pour indicateurs de biodiversité (méthode EBV / GEO BON).
  8. [8]Isaac N.J.B., Pocock M.J.O. 2015. Bias and information in biological records. Biological Journal of the Linnean Society, 115:522-531. — Normalisation par effort d'observation, fondement de detection_rate.
  9. [9]Boakes E.H. et al. 2010. Distorted views of biodiversity: spatial and temporal bias in species occurrence data. PLoS Biology, 8(6):e1000385. — Détection du « 1st January effect » GBIF.
  10. [10]Robertson M.P., Cumming G.S., Erasmus B.F.N. 2010. Getting the most out of atlas data. Diversity and Distributions, 16:363-375. — Méthode de détection des pics anormaux par fenêtre glissante.
  11. [11]Zizka A. et al. 2019. CoordinateCleaner: Standardized cleaning of occurrence records from biological collection databases. Methods in Ecology and Evolution, 10:744-751. — Package R, méthodes standards de nettoyage GBIF, seuils de filtrage ≥ 5×.
  12. [12]Maldonado C. et al. 2015. Estimating species diversity and distribution through the use of taxonomic and geo-referenced data. Global Ecology and Biogeography, 24:973-984. — Documente les conventions d'encodage YYYY-01-01 et YYYY-12-31.
  13. [13]Jantke K., Schleupner C., Schneider U.A. 2011. Gap analysis of European wetland species: priority regions for expanding the Natura 2000 network. Biodiversity and Conservation, 20:581-605.
  14. [14]Margules C.R., Pressey R.L. 2000. Systematic conservation planning. Nature, 405:243-253. — Fondement théorique de la priorisation par rareté + sévérité UICN.
  15. [15]Leroux S.J. et al. 2010. Global protected areas and IUCN designations: do the categories match the conditions? Biological Conservation, 143:609-616.

10. Reproductibilité & code ouvert

L'ensemble des imports, calculs et migrations est décrit par des scripts versionnés et des migrations SQL auditables. Les fichiers clés :

FichierContenu
apps/api/prisma/migrations/20260424070000_commune_protected_areas_ico_v2/Tables ICO v2 + ico_category_mapping (57 entrées).
apps/api/prisma/migrations/20260424080000_patrim_bonus_pct/Colonne patrim_bonus_pct (Option C percentile rank).
apps/api/prisma/migrations/20260424110000_phenology_double_filter_detection_rate/Matview phénologie v2 (double filtre + detection_rate).
apps/api/prisma/migrations/20260424120000_pg_trgm_search_indexes/Extension pg_trgm + fonction immutable_unaccent + colonnes générées.
apps/api/scripts/compute-commune-protected-areas.tsScript de compute ICO v2.1. Flag --recompose-only pour rejouer la composition en 30 s.
apps/api/scripts/refresh-phenology.tsRefresh phénologie (auto-CONCURRENTLY si matview populée, non-bloquant pour les lectures).
apps/api/scripts/_lib/data_sources.tsRegistre miroirs data + licences + checksums SHA-256.
OPERATIONS.mdGuide d'opérations (config Postgres, scripts, workflows, monitoring, gotchas).
PLAN_ENRICHISSEMENT_DATA.mdPlan maître d'enrichissement v1.3 validé scientifiquement.

Les migrations Prisma sont strictement linéaires et horodatées. Toute modification structurelle future passera par une nouvelle migration datée, garantissant l'historique complet du schéma.

Pour une question spécifique ou un usage scientifique particulier, les données sont ouvertes via les licences indiquées en page Sources — les re-calculs à partir des sources primaires sont reproductibles par n'importe quel équipe disposant des scripts.

Contenu exclusivement factuel et dérivé. Aucun texte généré par LLM sur des descriptions de méthodologie — chaque phrase est vérifiable par la formule ou la référence bibliographique correspondante.