Cube multidimensionnel - énoncé

Ce notebook aborde différentes solutions pour traiter les données qu'on représente plus volontiers en plusieurs dimensions. Le mot-clé associé est OLAP ou cube OLAP. Mondrian est une solution open source, cubes est écrit en python. Kylin propose ce service sur des données stockées sur Hadoop. L'objectif est ici de découvrir pas d'explorer ces solutions.

Représentation

Le module pandas manipule des tables et c'est la façon la plus commune de représenter les données. Lorsque les données sont multidimensionnelles, on distingue les coordonnées des valeurs :

Dans cet exemple, il y a :

On peut représenter les donnés également comme ceci :

C'est assez simple. Prenons un exemple : table de mortalité de 1960 à 2010 qu'on récupère à l'aide de la fonction table_mortalite_euro_stat. C'est assez long (4-5 minutes) sur l'ensemble des données car elles doivent être prétraitées (voir la documentation de la fonction). Pour écouter, il faut utiliser le paramètre stop_at.

Cubes de données avec xarray

création

Cette réprésentation sous forme de table n'est pas toujours très lisible. Les informations sont souvent répétées et les données sont vraiment multidimensionnelles. Le module xarray propose de distinguer les coordonnées des valeurs pour proposer des manipulations plus intuitives. Le module propose un DataFrame multidimensionnelle DataSet.

Dans ce cas-ci, pour reprendre la temrinologie du module xarray, nous avons :

On peut passer d'un DataFrame à un DataSet de la façon suivante :

On garde supprime les colonnes qui ne nous intéressent pas et les valeurs manquantes :

L'opération complexe consiste à faire passer les valeurs de la colonne indicateur en tant que colonnes. C'est l'objet de la méthode pivot_table :

Les données sont maintenant prêtes à passer sous xarray :

sélection

Il est facile ensuite d'extraire les données d'un pays avec la méthode sel :

Ou de plusieurs pays :

Ou plusieurs dimensions :

Pour accéder à la série LIFEXP pour les hommes, les années 2000 et 2010, le pays FR, on fait la différence, puis on la récupère sous forme de DataFrame :

On a gagné presque deux ans et demi d'espérance de vie à la naissance en 10 ans.

Quelques graphes

Exercice 1 : que font les lignes suivantes ?

On pourra s'aider des pages :

Lire, écrire des datasets

Le module xarray s'appuie sur le module netCDF4 qui lui-même est un wrapper) poython de la libraire netCDF-c. Celle-ci est spécialisée dans la lecture et l'écriture de données scientifiques. Concrètement, ce n'est pas xarray qui s'en occupe mais netCDF4. Cela explique la syntaxe décrite par Serialization and IO :

C'est un format binaire plus efficace que le format texte :

On relit :

Le module xarray propose également de lire des données de plusieurs fichiers pour ne former qu'un seul dataset (voir Combining multiple files) :

On relit :

A quoi ça sert ?

Lorsqu'on travaille avec des gros fichiers de données, on cherche à retarder le plus possible l'exécution d'un calcul, on manipule les données sans les charger en mémoire. On appelle ceci évaluation paresseuse ou lazy evaluation en anglais. xarray et dask permettent de faire cela (voir Using dask with xarray). La logique qu'on suit est alors assez proche de la programmation fonctionnelle.