Pratique de pandas: un exemple complet

Les exemples de ce TP sont visualisables sous forme de Notebooks:

Download nbviewer Onyxia
Binder Open In Colab githubdev

</p>

Dans ce tutoriel Pandas, nous allons utiliser deux sources de données :

  • Les émissions de gaz à effet de serre estimées au niveau communal par l’ADEME. Le jeu de données est disponible sur data.gouv et requêtable directement dans python avec cet url. pandas offre la possibilité d’importer des données directement depuis un url. C’est l’option prise dans ce tutoriel. Si vous préfèrez, pour des raisons d’accès au réseau ou de performance, importer depuis un poste local, vous pouvez télécharger les données et changer les commandes d’import avec le chemin adéquat plutôt que l’url.

  • Idéalement, on utiliserait les données disponibles sur le site de l’Insee mais celles-ci nécessitent un peu de travail de nettoyage qui n’entre pas dans le cadre de ce TP. Pour faciliter l’import de données Insee, il est recommandé d’utiliser le package pynsee qui simplifie l’accès aux données de l’Insee disponibles sur le site web insee.fr ou via des API.

1. [^](#cite_ref-1)

Toute contribution sur ce package, disponible sur Github est bienvenue !

Après avoir installé la librairie pynsee (voir l’introduction à pandas), nous suivrons les conventions habituelles dans l’import des packages :

In [2]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pynsee
import pynsee.download

Exploration de la structure des données

Commencer par importer les données de l’Ademe à l’aide du package pandas. Vous pouvez nommer le DataFrame obtenu df.

In [3]:
df = pd.read_csv("https://koumoul.com/s/data-fair/api/v1/datasets/igt-pouvoir-de-rechauffement-global/convert", sep=",")

Pour les données de cadrage au niveau communal (source Insee), le package pynsee facilite grandement la vie. La liste des données disponibles est ici. En l’occurrence, on va utiliser les données Filosofi (données de revenus) au niveau communal de 2016. Le point d’entrée principal de la fonction pynsee est la fonction download_file. Le code pour télécharger les données est le suivant :

In [4]:
df_city = pynsee.download.download_file("FILOSOFI_COM_2016")

Cette première approche exploratoire donne une idée assez précise de la manière dont les données sont organisées. On remarque ainsi une différence entre df et df_city quant aux valeurs manquantes : la première base est relativement complète, la seconde comporte beaucoup de valeurs manquantes. Autrement dit, si on désire exploiter df_city, il faut faire attention à la variable choisie.

Ce petit exercice permet de se rassurer car les libellés dupliqués sont en fait des noms de commune identiques mais qui ne sont pas dans le même département. Il ne s’agit donc pas d’observations dupliquées. On se fiera ainsi aux codes communes, qui eux sont uniques.

Les indices

Les indices sont des éléments spéciaux d’un DataFrame puisqu’ils permettent d’identifier certaines observations. Il est tout à fait possible d’utiliser plusieurs indices, par exemple si on a des niveaux imbriqués.

Restructurer les données

On présente généralement deux types de données :

  • format wide: les données comportent des observations répétées, pour un même individu (ou groupe), dans des colonnes différentes
  • format long: les données comportent des observations répétées, pour un même individu, dans des lignes différentes avec une colonne permettant de distinguer les niveaux d’observations

Un exemple de la distinction entre les deux peut être pris à l’ouvrage de référence d’Hadley Wickham, R for Data Science:

L’aide mémoire suivante aidera à se rappeler les fonctions à appliquer si besoin:

Le fait de passer d’un format wide au format long (ou vice-versa) peut être extrêmement pratique car certaines fonctions sont plus adéquates sur une forme de données ou sur l’autre. En règle générale, avec Python comme avec R, les formats long sont souvent préférables.

Combiner les données

Une information que l’on cherche à obtenir s’obtient de moins en moins à partir d’une unique base de données. Il devient commun de devoir combiner des données issues de sources différentes. Nous allons ici nous focaliser sur le cas le plus favorable qui est la situation où une information permet d’apparier de manière exacte deux bases de données (autrement nous serions dans une situation, beaucoup plus complexe, d’appariement flou). La situation typique est l’appariement entre deux sources de données selon un identifiant individuel ou un identifiant de code commune, ce qui est notre cas.

Il est recommandé de lire ce guide assez complet sur la question des jointures avec R qui donne des recommandations également utiles en python.

On utilise de manière indifférente les termes merge ou join. Le deuxième terme provient de la syntaxe SQL. En pandas, dans la plupart des cas, on peut utiliser indifféremment df.join et df.merge

Exercices bonus

Les plus rapides d’entre vous sont invités à aller un peu plus loin en s’entraînant avec des exercices bonus qui proviennent du site de Xavier Dupré. 3 notebooks en lien avec numpy et pandas vous y sont proposés :

  1. Calcul Matriciel, Optimisation : énoncé / corrigé
  2. DataFrame et Graphes : énoncé / corrigé
  3. Pandas et itérateurs : énoncé / corrigé