Faciliter l’exploration des données mondiales grâce à l’IA et au UN Data Commons
Découvrez comment les outils d’IA facilitent l’exploration des données mondiales. Cet article examine la plateforme UN Data Commons, qui vise à simplifier l’accès aux jeux de données internationaux. Découvrez comment le langage naturel et la recherche intelligente peuvent abaisser les barrières pour les chercheurs, les journalistes et les décideurs, tout en signalant les points où la vérification et les limites des données comptent encore.
Résumé rapide
Découvrez comment les outils d’IA facilitent l’exploration des données mondiales. Cet article examine la plateforme UN Data Commons, qui vise à simplifier l’accès aux jeux de données internationaux. Découvrez comment le langage naturel et la recherche intelligente peuvent abaisser les barrières pour les chercheurs, les journalistes et les décideurs, tout en signalant les points où la vérification et les limites des données comptent encore.
Rendre les données mondiales plus faciles à explorer grâce à l'IA et au UN Data Commons
Les statistiques mondiales ont une propriété étrange : elles sont à la fois abondantes et difficiles à utiliser. Les chiffres existent — population, émissions, commerce, santé, éducation — mais ils vivent dans des centaines de portails distincts, chacun avec ses propres formats de fichiers, ses propres conventions de nommage des pays et sa propre idée de ce qu'est une « année ». L'écart entre la disponibilité des données et leur exploitabilité est l'endroit où la plupart des projets d'analyse perdent silencieusement des semaines.
Un article de blog de Google décrivant le travail mené avec la plateforme UN Data Commons formule directement l'objectif : rendre les données mondiales plus faciles à explorer. C'est le sujet du présent article. Ci-dessous, je sépare ce que la source affirme de ce qui relève de l'interprétation, puis je me concentre sur la partie réellement actionnable aujourd'hui — l'outillage pratique que vous pouvez mettre en place pour explorer des données internationales hétérogènes avec l'aide de l'IA.
Ce que la source affirme, et ce qu'elle n'affirme pas
La source primaire vérifiée est l'article du blog Google AI intitulé Making global data easier to explore, publié à l'adresse https://blog.google/innovation-and-ai/technology/ai/google-un-data-commons-platform. L'affirmation centrale vérifiée est un objectif, non une liste de fonctionnalités : l'effort vise à rendre les données mondiales plus faciles à explorer, dans le contexte du travail de l'ONU sur les données.
C'est une revendication délibérément étroite, et il convient de la respecter. D'après les éléments disponibles ici, l'article ne précise ni langages de requête, ni noms de SDK, ni points de terminaison, ni versions de modèles, ni tarification, ni résultats de benchmarks. Cet article ne va donc pas les inventer. Tout ce qui suit dans les sections consacrées à la manière de travailler avec des données mondiales relève de pratiques d'ingénierie générales pour le travail sur les données ouvertes, et non de la description d'une API de plateforme spécifique.
Interprétation, clairement identifiée : lorsqu'une institution associe un data commons à l'IA, la valeur plausible n'est pas que « l'IA connaît la réponse ». C'est que l'IA peut réduire la friction entre une question humaine et une requête lisible par machine — en faisant correspondre un nom de pays à un code, en devinant ce que signifie telle colonne, et en rédigeant du SQL contre un schéma inconnu.
Pourquoi les données mondiales résistent à l'exploration
Trois obstacles apparaissent dans presque tous les projets transnationaux.
Inadéquation des identités. Le même pays apparaît sous les formes Kenya, KEN, KE, Republic of Kenya et 肯尼亚 dans différents fichiers. Les jointures sur les noms échouent silencieusement.
Dérive des schémas. Une source stocke des colonnes year et value ; une autre stocke une colonne par année. L'une rapporte le CO₂ en kilotonnes, l'autre en millions de tonnes.
Distance des métadonnées. La définition d'un indicateur réside dans un PDF, tandis que les chiffres résident dans un CSV. Rien ne les relie programmatiquement.
L'IA ne dissout pas ces problèmes. Elle raccourcit la boucle : vous pouvez décrire la jointure souhaitée en langage naturel et obtenir une ébauche, puis la vérifier. La vérification vous incombe toujours.
Prérequis
Avant d'installer quoi que ce soit, assurez-vous de disposer de :
- Python 3.10 ou plus récent. Les versions antérieures cassent les annotations de type modernes et plusieurs bibliothèques de données.
- Un gestionnaire de paquets et un terminal. macOS, Linux ou WSL sous Windows.
- Environ 2 Go d'espace disque pour un environnement virtuel et un jeu de données local modeste.
- Facultatif : un projet Google Cloud si vous comptez interroger des jeux de données publics hébergés dans BigQuery.
- Facultatif : l'accès à une API de LLM que vous utilisez déjà, si vous souhaitez essayer le motif langage naturel vers SQL. Les exemples ci-dessous le traitent comme un point de terminaison configurable, et non comme un fournisseur spécifique.
- Un jeu de données ouvert sur lequel vous exercer. N'importe quel export CSV ou Parquet d'un institut national de statistique ou d'une agence internationale fait l'affaire.
Vous n'avez pas besoin de GPU. Il s'agit d'un flux de travail de récupération, d'harmonisation et d'interrogation, pas d'un flux de travail d'entraînement.
Installation pas à pas
1. Vérifiez votre version de Python
Exécutez ceci pour confirmer que l'interpréteur est suffisamment récent.
python3 --versionS'il indique une version inférieure à 3.10, installez un Python plus récent via le gestionnaire de paquets de votre système ou pyenv avant de continuer.
2. Créez un environnement virtuel isolé
Garder les dépendances hors de votre Python système évite les conflits de versions par la suite.
python3 -m venv ~/.venvs/globaldata
source ~/.venvs/globaldata/bin/activateSous Windows avec WSL, la ligne d'activation est également source ~/.venvs/globaldata/bin/activate ; dans PowerShell, ce serait ~/.venvs/globaldata/Scripts/Activate.ps1.
3. Mettez à jour la chaîne d'outils de packaging
Les environnements neufs embarquent souvent un pip obsolète, ce qui provoque des erreurs de résolution déroutantes.
python -m pip install --upgrade pip setuptools wheel4. Installez les bibliothèques de données essentielles
Elles couvrent la récupération HTTP, la manipulation tabulaire, les requêtes analytiques locales et les notebooks.
pip install pandas requests duckdb pyarrow python-dotenv jupyterlabduckdb vous donne du SQL sur des fichiers CSV et Parquet locaux sans exécuter de serveur — utile lorsqu'une « base de données » n'est en réalité qu'un dossier de téléchargements.
5. Installez l'utilitaire de codes pays
L'identité des pays est la source la plus fréquente de jointures cassées ; installez donc une table de codes maintenue.
pip install pycountry6. Facultatif : installez la CLI Google Cloud
Ne le faites que si vous prévoyez d'interroger des jeux de données hébergés dans BigQuery.
brew install --cask google-cloud-sdkSous Debian ou Ubuntu, utilisez le dépôt apt officiel plutôt que brew.
7. Facultatif : authentifiez-vous auprès de Google Cloud
Cela ouvre une fenêtre de navigateur et stocke localement les identifiants par défaut de l'application.
gcloud auth application-default login8. Facultatif : sélectionnez un projet et activez l'API
Définissez le projet qui sera facturé pour les requêtes que vous exécutez.
gcloud config set project YOUR_PROJECT_ID
gcloud services enable bigquery.googleapis.com9. Facultatif : installez le client Python
C'est la bibliothèque qui permet aux scripts d'appeler BigQuery directement.
pip install google-cloud-bigquery db-dtypes10. Vérifiez l'environnement
Exécutez ceci pour confirmer que les imports essentiels se résolvent.
python -c "import pandas, duckdb, pycountry, requests; print('environment ready')"Configuration
Gardez les identifiants et les points de terminaison hors de vos fichiers sources.
1. Créez un fichier de configuration
Ceci écrit un fichier d'environnement privé dans votre répertoire personnel. Remplacez chaque espace réservé par vos propres valeurs.
cat > ~/.globaldata.env <<'EOF'
DATA_API_ENDPOINT=https://your-data-portal.example/api/v1
DATA_API_KEY=replace-with-your-key
MODEL_ENDPOINT=https://your-llm-provider.example/v1
MODEL_API_KEY=replace-with-your-model-key
MODEL_NAME=replace-with-your-model-id
GCP_PROJECT=your-project-id
EOF2. Restreignez les permissions du fichier
Des identifiants dans un fichier lisible par tous constituent une erreur courante et évitable.
chmod 600 ~/.globaldata.env3. Chargez la configuration en Python
Cet extrait lit le fichier à l'exécution sans coder en dur les secrets.
import os
from dotenv import load_dotenv
load_dotenv(os.path.expanduser("~/.globaldata.env"))
DATA_API_ENDPOINT = os.environ["DATA_API_ENDPOINT"]
GCP_PROJECT = os.environ.get("GCP_PROJECT")L'espace réservé DATA_API_ENDPOINT est délibéré. Tout portail que vous utilisez aura sa propre URL de base documentée ; les motifs ci-dessous sont agnostiques quant à celui dont il s'agit.
Exemples d'utilisation
Exemple 1 : Normaliser les identifiants de pays
Ce sont les vingt lignes de code au plus fort effet de levier dans toute analyse transnationale.
import pycountry
ALIASES = {
"Republic of Korea": "KOR",
"Korea, Rep.": "KOR",
"Viet Nam": "VNM",
"Russian Federation": "RUS",
"Côte d'Ivoire": "CIV",
}
def to_iso3(name: str) -> str | None:
name = name.strip()
if name in ALIASES:
return ALIASES[name]
try:
return pycountry.countries.lookup(name).alpha_3
except LookupError:
return None
print(to_iso3("Kenya"), to_iso3("Korea, Rep."), to_iso3("Atlantis"))Le dernier appel qui renvoie None est précisément l'objectif : les valeurs non mappées doivent être visibles, et non silencieusement écartées. Journalisez-les et étendez ALIASES plutôt que de deviner.
Exemple 2 : Charger des fichiers hétérogènes dans une seule table interrogeable
DuckDB peut lire directement du CSV et du Parquet et les unir, ce qui évite une étape d'import.
import duckdb
con = duckdb.connect("globaldata.duckdb")
con.execute("""
CREATE OR REPLACE TABLE observations AS
SELECT
indicator_code,
UPPER(country_iso3) AS country_iso3,
CAST(year AS INTEGER) AS year,
CAST(value AS DOUBLE) AS value,
source_file
FROM read_csv_auto('downloads/*.csv', filename = true)
WHERE value IS NOT NULL
""")
print(con.execute("""
SELECT country_iso3, COUNT(*) AS rows
FROM observations
GROUP BY 1 ORDER BY 2 DESC LIMIT 10
""").fetchdf())L'option filename = true préserve la provenance, de sorte que chaque ligne peut être retracée jusqu'au fichier dont elle provient.
Exemple 3 : Rédiger une requête à partir d'une question en langage naturel
Ce motif envoie votre schéma plus une question à un modèle de langage et demande du SQL en retour. C'est une aide à la rédaction, pas un oracle.
import os, requests
SYSTEM = """You translate questions into DuckDB SQL over this schema:
observations(indicator_code VARCHAR, country_iso3 VARCHAR, year INTEGER, value DOUBLE)
Rules:
- Return only the SQL statement.
- Use read-only SELECT statements.
- Never emit INSERT, UPDATE, DELETE, DROP, or ATTACH.
"""
def draft_sql(question: str) -> str:
response = requests.post(
f"{os.environ['MODEL_ENDPOINT']}/chat/completions",
headers={"Authorization": f"Bearer {os.environ['MODEL_API_KEY']}"},
json={
"model": os.environ["MODEL_NAME"],
"temperature": 0,
"messages": [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": question},
],
},
timeout=60,
)
response.raise_for_status()
return response.json()["choices"][0]["message"]["content"].strip()
print(draft_sql("Which five countries had the highest value in 2020?"))Exemple 4 : Exécuter l'ébauche contre une connexion en lecture seule
Ouvrir la base de données en lecture seule est un garde-fou peu coûteux et efficace.
import duckdb
con = duckdb.connect("globaldata.duckdb", read_only=True)
sql = draft_sql("Which five countries had the highest value in 2020?")
print(sql)
if sql.upper().lstrip().startswith("SELECT"):
print(con.execute(sql).fetchdf())
else:
print("Refused: statement is not a SELECT.")Le contrôle startswith("SELECT") est sommaire et facilement contournable par une invite déterminée. Traitez-le comme un fil-piège, pas comme une frontière de sécurité. Pour de vrais déploiements, restreignez les privilèges de l'utilisateur de la base de données au niveau du moteur.
Exemple 5 : Rattacher une définition d'indicateur à ses chiffres
Les métadonnées sont ce qui rend un nombre interprétable. Conservez une petite table de correspondance à côté des données.
con = duckdb.connect("globaldata.duckdb")
con.execute("""
CREATE OR REPLACE TABLE indicators AS
SELECT * FROM (VALUES
('EN.GHG.CO2.MT.CE.AR5', 'Carbon dioxide emissions', 'million tonnes'),
('SP.POP.TOTL', 'Total population', 'people')
) AS t(indicator_code, label, unit)
""")
print(con.execute("""
SELECT i.label, i.unit, o.country_iso3, o.year, o.value
FROM observations o
JOIN indicators i USING (indicator_code)
WHERE o.country_iso3 = 'KEN'
ORDER BY o.year DESC
LIMIT 5
""").fetchdf())Désormais, un chiffre récupéré arrive avec son unité attachée, ce qui prévient toute une classe d'erreurs en aval.
Pièges et limites ouvertes
Les ébauches de l'IA ne sont pas des citations. Une instruction SQL générée peut référencer une colonne qui n'existe pas ou filtrer sur un code pays qui n'a jamais figuré dans les données. Exécutez-la toujours d'abord sur une petite tranche.
Les modèles de langage ne connaissent pas votre indicateur. Ils savent que SP.POP.TOTL ressemble à un code de la Banque mondiale, mais ils ne peuvent pas confirmer ce qu'un portail spécifique entend par là. La définition doit venir de l'éditeur.
Le provisionnement est invisible jusqu'à ce qu'il ne le soit plus. Les étapes d'installation de cet article décrivent un outillage d'open data à usage général. Toute plateforme spécifique construite autour de l'effort UN Data Commons aura son propre onboarding, ses propres conditions et ses propres limites de débit, que la source disponible ne décrit pas. Lisez ces documents avant de bâtir des dépendances sur eux.
L'harmonisation n'est jamais terminée. De nouveaux noms de pays, de nouvelles révisions d'indicateurs et de nouvelles versions apparaissent constamment. Prévoyez une boucle de maintenance, et non un nettoyage ponctuel.
L'agrégation masque les désaccords. Lorsque deux agences rapportent des valeurs différentes pour le même indicateur, une jointure produira allègrement les deux. Décidez explicitement si vous préférez privilégier une source, les moyenner, ou mettre le désaccord en évidence.
Conclusion
La promesse de l'IA dans le travail sur les données mondiales est plus étroite et plus utile qu'elle n'en a l'air au premier abord. Ce n'est pas que le modèle connaisse les statistiques. C'est que le modèle peut se placer entre une question humaine et une couche de stockage fragmentée, en rédigeant la jointure, en proposant la correspondance de codes et en réduisant le temps entre « je me demande » et « voici une requête que je peux vérifier ».
L'effort UN Data Commons, tel que décrit dans la source, cible exactement cette friction : rendre les données mondiales plus faciles à explorer. La réponse pratique consiste à bâtir un petit environnement reproductible autour des données que vous possédez déjà — un environnement virtuel, DuckDB pour le SQL local, pycountry pour l'identité, et un point de terminaison de modèle configurable pour la rédaction. Trois règles maintiennent l'honnêteté de la démarche : normaliser les identifiants plutôt que les noms, garder les métadonnées à côté des chiffres, et ne jamais exécuter une requête générée que vous n'avez pas lue.
Commencez avec un seul jeu de données et une seule question. L'outillage prend un après-midi ; c'est l'habitude de vérifier ce que le modèle a produit qui rend les résultats dignes de confiance.



