Atelier narration de données

Ce TP est articulé autour de la réutilisation des données. A l’image du désormais célèbre CovidTracker, le but est d’utiliser des données en accès libre pour créer des visualisations permettant une meilleure lisibilité ou compréhension de l’information.

Objectif

Vous devrez réaliser un Colab, ou équivalent, décrivant un jeu de données et présentant ces données (ou données retravaillées et/ou enrichies) sous forme de visualisations/. Vous avez la possibilité d’exporter ces données et de réaliser ces visualisations en JavaScript si vous le souhaitez.

Jeu de données

Pour réaliser les travaux pratiques, il est nécessaire de trouver un (ou plusieurs) jeu(x) de données permettant de réaliser des moyennes, d’aggréger selon des catégories, etc. Vous êtes libres de trouver un sujet qui vous plaît.

Une fois le(s) jeu(x) de données sélectionné(s), vous pouvez essayer de trouver d’autres jeux de données analogues permettant d’enrichir, comparer, etc. l’information par la suite. L’important est de s’approprier les données (format, description, etc.).

Propositions d’un thème autour d’un thème d’actualité, l’énergie :

Insertion des données dans une base SQL

Cette partie n’est pas “essentielle” au déroulement des travaux pratique. Elle a pour unique but de découvrir des opérations SQL de base

Base de données

Une base de donnée vous a été créée. Les informations de connexion sont les suivantes :

Une base de donnée est donc déjà créée, la prochaine étape, ce sont les tables.

Tutoriel W3Schools

Pour commencer, créez un fichier Google Colab (ou un environnement de développement de votre choix) et installez le paquet mysql-connector-python.

!pip install mysql-connector-python

Pour créer votre table, référez-vous au tutoriel approprié. Des outils existent pour convertir des fichiers de données en structures de tables SQL.

Vous pouvez ensuite dérouler le tutoriel :

Traitement

Traitement à la main

Pour traiter un jeu de données sans utiliser de librairie spécifique. Il suffit de lire les données en respectant le format dans lesquelles elles sont livrées.

CSV

import csv with open("fichier.csv", 'r') as f: csvreader = csv.reader(f, delimiter=';') for row in csvreader: print(row) # traitement...
import csv with open("fichier.csv", 'r') as f: csvreader = csv.DictReader(f, delimiter=';') for row in csvreader: print(row) # traitement...

Avec une petite nuance ligne n°4 où on précise à l’interpréteur de lire le fichier CSV comme un dictionnaire, c’est-à-dire qu’on ne va pas accéder à la colonne par son numéro de colonne mais par son appelation précisée dans l’entête du fichier CSV.

JSON

import json

with open('fichier.json', 'r') as f:
  data = json.load(f)

# traitement...

Mais il existe d’autres moyens plus appropriés !

Traitement avec des outils adaptés

La librairie Python Pandas permet d’effectuer rapidement des traitements d’un ensemble de données. Pour l’utiliser, il faut installer la librairie comme présenté ci-dessous.

!pip install pandas

CSV

import pandas as pd

df = pd.read_csv('fichier.csv')
# traitement...

JSON

import pandas as pd

df = pd.read_json('fichier.json')
# traitement...

Quelques exemples de traitements

Afficher des informations sur le dataframe
# affiche la taille du df
print(df.shape)
# affiche les x premières lignes
print(df.head(x))
# affiche le nombre de lignes correspondantes à des valeurs identiques
print(df['column'].value_counts())
# affiche les types des colonnes
print(df.dtypes)
Supprimer des lignes en fonction de valeurs données
df = df[df.column != "value"]
# ou encore
df.drop(df.index[data['column'] < 123], inplace=True)
Créer des sous dataframes
sub_df = df[df.column == "value"]
# ou encore
sub_df = df[df["column"].str.contains("value").fillna(False)]
sub_dfs = df.groupby("column")
sub_df1 = sub_dfs.get_group(1)
Effectuer des opérations sur un ensemble de cellules ayant des valeurs identiques

Les opérations disponibles sont listées sur la documentation officielle.

# grouper des données en fonction de la valeur d'une cellule
sub_df = df.groupby('column', as_index=False).count()
sub_df = df.groupby('column', as_index=False).mean()
sub_df = df.groupby('column', as_index=False).sum()
# ...
Trier un dataframe
df.sort_values('column')
Fusionner des dataframes
dfxdf = pd.merge(df1[["col1", "col2"]], df2[["col1", "col1"]], on="col1", how="left")
Renommer une colonne
df.rename(columns={'column': 'col1'}, inplace=True)

Création de visualisations

Pour créer des visualisations, divers outils sont disponibles. Les visualisations Python, basées sur les librairies matplotlib, plotly ou encore seaborn, sont plus proches du code mais parfois moins interactives que celles développées en JS (D3.js) ou Vega.

Le mieux est de choisir un exemple qui se rapproche le plus de la visualisation voulue, d’y intégrer ses données et de la modifier par la suite. Vous avez plusieurs sites proposant une multitude de visualisations ci-dessous.

À noter que les visualisations Vega peuvent s’intégrer à Kibana.

Python (matplotlib, plotly, seaborn, bokeh ?)

Example de visualisation rapide d’un dataframe

import matplotlib.pyplot as plt
import seaborn as sns

# pd.set_option('display.max_rows', None)

sns.set()

# un histogramme
plt.figure()
p = sns.histplot(data['col1'], kde=True, stat="density", linewidth=0)
plt.show()

# un graphique linéaire
sns.lineplot(x='col1', y='col2', data=df)

JS

Vega