Section 11.2.12 : APIs de données — Open Data et Kaggle
🎯 Objectif pédagogique
Accéder à des sources de données publiques (APIs Open Data, Kaggle, data.gouv.fr) et les charger en Python. Vous serez capable de trouver, télécharger et exploiter des données réelles pour vos analyses — pas seulement des données fictives.
Le trésor des données ouvertes
Marc a utilisé des données fictives jusqu'ici. Mais la vraie data science travaille avec des données réelles. L'Open Data est un mouvement mondial : gouvernements, entreprises et organisations publient gratuitement des données.
Sources de données essentielles
| Source | Type | URL | Spécialité |
|---|---|---|---|
| data.gouv.fr | Gouvernement FR | data.gouv.fr | Données publiques françaises |
| Kaggle | Communauté | kaggle.com/datasets | Compétitions, ML datasets |
| INSEE | Statistiques | insee.fr/api | Démographie, économie |
| World Bank | International | data.worldbank.org | Économie mondiale |
| OpenWeatherMap | API | openweathermap.org | Météo |
| GitHub | Listes | awesome-public-datasets | Agrégateur |
Charger des données depuis une URL
import pandas as pd
# CSV directement depuis une URL
url = "https://raw.githubusercontent.com/datasets/covid-19/main/data/countries-aggregated.csv"
df = pd.read_csv(url)
print(df.head())
print(f"Shape: \{df.shape\}") # (ex: 87000, 5)
# Filtrer sur la France
france = df[df['Country'] == 'France']
print(france.tail())
API REST avec requests + pandas
import requests
import pandas as pd
# Exemple : API data.gouv.fr — rechercher des jeux de données sur l'emploi
response = requests.get(
"https://www.data.gouv.fr/api/1/datasets/",
params=\{"q": "emploi", "page_size": 5\}
)
data = response.json()
datasets = []
for d in data['data']:
datasets.append(\{
'title': d['title'],
'organization': d.get('organization', \{\}).get('name', 'N/A'),
'frequency': d.get('frequency', 'N/A'),
'last_update': d.get('last_update', 'N/A')
\})
df_datasets = pd.DataFrame(datasets)
print(df_datasets)
Kaggle — Télécharger des datasets
# Installer l'API Kaggle
pip install kaggle
# Configurer (créer un token sur kaggle.com → Account → API → New Token)
# Placer kaggle.json dans ~/.kaggle/
# Télécharger un dataset
import subprocess
subprocess.run(["kaggle", "datasets", "download", "-d",
"promptcloud/glassdoor-job-postings", "--unzip"])
# Charger en pandas
df = pd.read_csv("glassdoor_jobs.csv")
print(df.columns.tolist())
print(df.shape)
Formats de données courants
# CSV
df = pd.read_csv("data.csv")
df = pd.read_csv("data.csv", sep=";", encoding="utf-8") # CSV français
# JSON
df = pd.read_json("data.json")
df = pd.read_json("https://api.example.com/data")
# Excel
df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
# Plusieurs fichiers à la fois
import glob
files = glob.glob("data/*.csv")
df = pd.concat([pd.read_csv(f) for f in files], ignore_index=True)
Exercice complet : analyse de données réelles
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Charger un dataset réel (Stack Overflow Survey résumé)
url = "https://raw.githubusercontent.com/datasets/world-cities/master/data/world-cities.csv"
cities = pd.read_csv(url)
print(cities.head())
print(f"\n\{cities.shape[0]\} villes dans le monde")
# Top 10 pays par nombre de villes
top_countries = cities['country'].value_counts().head(10)
plt.figure(figsize=(10, 6))
sns.barplot(x=top_countries.values, y=top_countries.index, palette='viridis')
plt.title("Top 10 pays par nombre de villes")
plt.xlabel("Nombre de villes")
plt.tight_layout()
plt.show()
RGPD et données personnelles
Les données ouvertes sont anonymisées. Mais si vous travaillez avec des données contenant des informations personnelles (noms, emails), vous devez respecter le RGPD. Marc, en bon ex-financier, le sait : les amendes RGPD peuvent atteindre 4% du CA mondial.
🏋️ Exercice pratique (20 minutes)
- →Allez sur data.gouv.fr, cherchez "offres emploi"
- →Téléchargez un CSV d'offres d'emploi
- →Chargez-le avec pandas
- →Explorez : shape, colonnes, types, premières lignes
- →Créez un graphique montrant les métiers les plus demandés
Quel est l'avantage principal de l'Open Data pour un data scientist débutant ?
Comment charger un fichier CSV depuis une URL directement dans pandas ?