Skill professionnel pour Claude Code permettant d'accéder, télécharger et analyser les données ouvertes françaises via data.gouv.fr...
Ce skill est une documentation + librairie Python, PAS un plugin avec des commandes interactives.
Ce que vous trouverez ici :
Ce que vous ne trouverez PAS ici :
/data-gouv-search, etc.)Pour des commandes interactives, utilisez le MCP officiel data.gouv.fr.
Ce skill fournit un accès programmatique complet aux données ouvertes françaises hébergées sur data.gouv.fr, le portail national des données publiques.
Capacités principales :
;, dates DD/MM/YYYY, décimales ,)Cette version 2.0.0 ajoute le support du MCP (Model Context Protocol) officiel de data.gouv.fr en complément de notre librairie Python.
1. Notre librairie Python (recommandée pour 80% des cas)
pip install et c'est tout2. MCP officiel data.gouv.fr (pour 20% des cas avancés)
Utilisez notre librairie Python si :
Utilisez le MCP officiel si :
/plugin marketplace add benoitvx/data-gouv-skill
/plugin install data-gouv@data-gouv-skill
# Installation globale (disponible dans tous les projets)
cd ~/.claude/skills
git clone https://github.com/benoitvx/data-gouv-skill.git
# OU installation par projet
cd /chemin/vers/votre/projet
mkdir -p .claude/skills
cd .claude/skills
git clone https://github.com/benoitvx/data-gouv-skill.git
pip install pandas requests openpyxl
Une fois installé, vous pouvez directement utiliser la librairie dans Claude Code :
# Importer la librairie
from data-gouv.lib.datagouv import DataGouvAPI, quick_search
# Recherche rapide
datasets = quick_search("vaccination")
for ds in datasets:
print(f"{ds['title']} - {ds['organization']['name']}")
# Utilisation complète de l'API
api = DataGouvAPI()
# Rechercher des datasets
results = api.search_datasets("qualité eau", page_size=10)
# Charger directement un CSV
df = api.load_csv("https://www.data.gouv.fr/fr/datasets/r/resource-id")
# Obtenir la dernière ressource d'un dataset
resource = api.get_latest_resource("dataset-id", format="csv")
data-gouv-skill/
├── .claude-plugin/
│ ├── plugin.json # Métadonnées du plugin
│ └── marketplace.json # Configuration marketplace
│
├── skills/data-gouv/
│ ├── SKILL.md # Ce fichier (point d'entrée)
│ │
│ ├── lib/
│ │ └── datagouv.py # Librairie Python principale
│ │
│ ├── datasets/ # Documentation des datasets
│ │ ├── iqvia-vaccination.md
│ │ ├── eau-potable.md
│ │ ├── calendrier-scolaire.md
│ │ └── ...
│ │
│ └── examples/ # Exemples de code
│ ├── basic_search.py
│ ├── vaccination_analysis.py
│ ├── water_quality.py
│ └── ...
│
├── scripts/
│ ├── sync-datasets.sh # Synchroniser les métadonnées
│ └── update-metadata.py # Mettre à jour la documentation
│
└── README.md # Documentation GitHub
Le skill inclut une documentation détaillée pour les datasets les plus utilisés :
Organisation : IQVIA France
Mise à jour : Hebdomadaire (campagne de vaccination)
Format : CSV, XLSX
Données de suivi des campagnes de vaccination contre la grippe saisonnière, avec détail par région, département, tranche d'âge et type de site de vaccination.
Documentation : datasets/iqvia-vaccination.md
Exemple d'utilisation :
# Rechercher le dataset de la campagne actuelle
results = api.search_datasets("vaccination grippe 2025-2026", organization="iqvia-france")
dataset_id = results['data'][0]['id']
# Charger les données
resource = api.get_latest_resource(dataset_id, format='csv')
df = api.load_csv(resource['url'])
# Filtrer par région
df_na = df[df['code_region'] == '75'] # Nouvelle-Aquitaine
print(f"Total vaccinations: {df_na['nb_doses'].sum():,}")
Organisation : Ministère de la Santé
Mise à jour : Mensuelle
Format : CSV (fichiers volumineux)
Résultats complets des analyses de qualité de l'eau du robinet, commune par commune, avec tous les paramètres testés (microbiologie, chimie, physico-chimie).
Documentation : datasets/eau-potable.md
Exemple d'utilisation :
# Charger le fichier de correspondance communes/UDI
dataset_id = "resultats-du-controle-sanitaire-de-leau-distribuee-commune-par-commune"
dataset = api.get_dataset(dataset_id)
# Obtenir les données pour une commune
udi_com = api.load_csv(udi_com_resource_url)
udi_larochelle = udi_com[udi_com['codecommune'] == '17300']
# Analyser la conformité
results = api.load_csv(results_resource_url)
conformite = results['conforme'].value_counts()
taux = (conformite.get('O', 0) / len(results)) * 100
print(f"Taux de conformité: {taux:.1f}%")
Organisation : Ministère de l'Éducation Nationale
Mise à jour : Annuelle
Format : CSV, JSON
Calendrier officiel des vacances scolaires par zone académique (A, B, C) et pour l'ensemble du territoire.
Zones académiques :
from data-gouv.lib.datagouv import DataGouvAPI
api = DataGouvAPI(cache_dir="/custom/cache/dir") # optionnel
search_datasets(query, organization=None, tag=None, page_size=20, page=1)
Dict[str, Any] avec résultats et métadonnéesget_dataset(dataset_id)
Dict[str, Any] ou Noneget_latest_resource(dataset_id, format='csv', title_contains=None)
Dict[str, Any] ou Nonedownload_resource(resource_url, cache=True)
bytes ou Noneload_csv(resource_url, sep=None, encoding=None, decimal=',', cache=True)
pd.DataFrame ou Nonefrom data-gouv.lib.datagouv import quick_search, load_dataset_csv
# Recherche rapide
datasets = quick_search("vaccination", limit=5)
# Chargement rapide d'un CSV
df = load_dataset_csv("dataset-id", resource_index=0)
from data-gouv.lib.datagouv import DataGouvAPI
import pandas as pd
import matplotlib.pyplot as plt
api = DataGouvAPI()
# Charger les données
results = api.search_datasets("vaccination grippe 2025-2026", organization="iqvia-france")
dataset_id = results['data'][0]['id']
resource = api.get_latest_resource(dataset_id, format='csv')
df = api.load_csv(resource['url'])
# Analyser par département en Nouvelle-Aquitaine
df_na = df[df['code_region'] == '75']
par_dept = df_na.groupby('libelle_departement')['nb_doses'].sum().sort_values()
# Visualiser
plt.figure(figsize=(12, 6))
par_dept.plot(kind='barh')
plt.title('Vaccinations anti-grippales par département (Nouvelle-Aquitaine)')
plt.xlabel('Nombre de doses')
plt.tight_layout()
plt.savefig('vaccinations_departement.png', dpi=150)
from data-gouv.lib.datagouv import DataGouvAPI
api = DataGouvAPI()
communes = {
'La Rochelle': '17300',
'Royan': '17306',
'Saintes': '17415'
}
# Charger les données
dataset_id = "resultats-du-controle-sanitaire-de-leau-distribuee-commune-par-commune"
dataset = api.get_dataset(dataset_id)
# Analyser chaque commune
for nom, code in communes.items():
# ... (voir datasets/eau-potable.md pour le code complet)
print(f"{nom}: {taux_conformite:.1f}% de conformité")
Le cache est activé par défaut et économise de la bande passante :
api = DataGouvAPI(cache_dir="~/.cache/datagouv")
df = api.load_csv(url, cache=True) # cache=True par défaut
Pour les gros fichiers (>100 MB), charger par chunks :
chunks = []
for chunk in pd.read_csv(url, chunksize=10000, sep=';', encoding='utf-8'):
# Filtrer immédiatement
chunk_filtered = chunk[chunk['region'] == 'Nouvelle-Aquitaine']
chunks.append(chunk_filtered)
df = pd.concat(chunks, ignore_index=True)
Toujours vérifier la qualité des données chargées :
df = api.load_csv(url)
if df is not None:
print(f"✓ Chargé: {len(df)} lignes, {len(df.columns)} colonnes")
print(f"✓ Colonnes: {df.columns.tolist()}")
print(f"✓ Période: {df['date'].min()} à {df['date'].max()}")
else:
print("✗ Erreur de chargement")
try:
df = api.load_csv(url)
if df is None:
raise ValueError("Failed to load CSV")
# Traiter les données
result = df.groupby('region')['value'].sum()
except Exception as e:
print(f"Erreur: {e}")
# Fallback ou alternative
; (détecté automatiquement)utf-8, latin-1, ou cp1252 (détecté automatiquement), au lieu de . (géré automatiquement)DD/MM/YYYYYYYY-MM-DDYYYY-Www (ex: 2025-W42)17300)17, 2A, 2B)75 pour Nouvelle-Aquitaine)Les contributions sont les bienvenues ! Pour ajouter un nouveau dataset documenté :
datasets/nom-dataset.mdAuteur : Benoit Vinceneux Licence : Licence Ouverte 2.0 Version : 2.0.0 Dernière mise à jour : 2025-12-02