Données en tables : principe
En cours d'écriture
Ce chapitre est en cours d'écriture. Il est déconseillé de s'y attaquer seul.
La puissance de calcul des ordinateurs facilite le traitement de grande quantités de données. Toutefois, la manière dont les données sont présentées est importantes. Il est beaucoup plus simple de traiter des données qui sont structurées, c'est à dire qui correspondent à un schéma établi avant le traitement des données : on n'a pas besoin de lire les données pour savoir ce qu'elles décrivent ni comment elles sont organisées. Dans l'idéal, cette structure est relativement simple pour autoriser des traitements avec des algorithmes basiques, mais aussi suffisamment souple pour pouvoir représenter des données relativement complexes.
Il existe de nombreuses manières de structurer les données. L'une des plus courante est la strucuration en table. Elle convient particulièrement aux données uniformes, c'est à dire où chaque objet est décrit avec les mêmes informations. On peut voir une table comme un tableau en deux dimensions, une grille. Chaque ligne représente un objet. Chaque colonne une donnée sur les objets décrits.
Dans cette partie du cours nous allons travailler sur les communes de France, avec deux tables1 :
La table localisation1, qui donne pour chaque commune son code postal, son code insee, sa latitude et sa longitude :
code insee | nom | code postal | latitude | longitude |
---|---|---|---|---|
01001 | L' Abergement-Clémenciat | 01400 | 46.153721024 | 4.925850148 |
01002 | L' Abergement-de-Varey | 01640 | 46.009605679 | 5.428087796 |
... | ... | ... | ... | ... |
La table population1, qui donne pour chaque commune son code insee et sa population municipale.
code insee | nom | population |
---|---|---|
01001 | L' Abergement-Clémenciat | 776 |
01002 | L' Abergement-de-Varey | 248 |
... | ... | ... |
CSV
Au total, nos deux tables décrivent 34978 communes, soit la quasi totalité des communes françaises. Il serait bien trop long de rentrer ces données à la main. Heureusement, une des grandes forces de la structuration en table est sa simplicité. On peut stocker une table dans un fichier texte avec une structure très simple. Un exemple de structure est le format CSV, pour Comma Separated Values.
- Une ligne d'une table est représentée par une ligne dans le fichier.
- Les valeurs des différentes colonnes sont séparées par un caractère, en général une virgule ou un point virgule.
- Parfois, la première ligne est l'en-tête de la table, qui permet de savoir à quoi correspondent les colonnes. Cette lignes est aussi parfois appelé le descripteur ou schéma de la table.
Dans notre cas, pour la table localisation, celà donne :
code_insee,nom,code_postal,latitude,longitude
01001,L' Abergement-Clémenciat,01400,46.153721024,4.925850148
01002,L' Abergement-de-Varey,01640,46.009605679,5.428087796
...
Et pour la table population :
code_insee,nom,code_postal,population
01001,L' Abergement-Clémenciat,01400,776
01002,L' Abergement-de-Varey,01640,248
...
Vous pouvez cliquer sur les liens suivants pour télécharger les fichiers population.csv et localisation.csv qui contiennent les tables complètes.
Opérations sur les tables
On peut faire de nombreuses opérations sur des tables :
- Ne garder que certaines colonnes (projection)
- Ne garder que certaines lignes (sélection/recherche)
- Transformer chaque ligne
- Lier deux tables qui ont des données en commun (fusion/jointure)
- Faire une opération sur toutes les valeurs d'une colonne. (comptage/addition/moyenne)
- ...
Remarquez qu'on a seulement parlé de colonnes et de lignes, et non de code postal ou de population. C'est parce que les opérations de manipulation de tables que nous allons voir sont génériques : on peut les appliquer à n'importe quelles tables.
Pour des raisons de simplicité, nous travaillerons directement sur nos deux tables la plupart du temps. Certaines opérations génériques seront présentées en option.
Folium
Avec les données à notre disposition, on va produire, entre autres, plusieurs cartes de France. On va utiliser Folium, qui est une bibliothèque Python qui permet de créer des cartes.
Il est probable que Folium ne soit pas installé par défaut sur votre ordinateur. Vous pouvez installer Folium par le biais de Thonny.
Ouvrez Thonny. Par le menu en haut, accédez à outils > gérer les paquets
.
Entrez folium
dans la barre de recherche, puis cliquez sur rechercher.
Cliquez sur folium
dans la liste des modules.
Cliquez ensuite sur installer.
Une popup avec une progression devrait apparaître. Laissez faire, tout est automatique. Ensuite, la fenêtre changera pour afficher que Folium est installé.
En cas de problème, demandez au professeur.
Chargement d'une table
Pour charger une table en mémoire depuis un fichier, on peut utiliser le module csv
, présent par défaut dans Python.
Pour ça, on appelle la fonction DictReader
du module csv
, en lui spécifiant le fichier et le séparateur utilisé. Elle renvoie une valeur similaire à une list, que l'on peut donc parcourir et transformer en list :
import csv
population = []
with open('population.csv', 'r') as csvfile: # ouverture du fichier
lecteur = csv.DictReader(csvfile, delimiter=',') #création du lecteur
for ligne in lecteur: #On ajoute les éléments lus à la liste.
population.append(ligne)
print(population[0])
Le code ci-dessus ouvre un fichier population.csv
qui se trouve dans le même répertoire que le fichier python du code. Il lit ensuite le fichier, et charge la table qu'il contient dans la list
population
, puis affiche la première ligne.
Créez un fichier Python tables.py
. Copiez-collez y le code ci dessus, et placez population.csv
dans le même répertoire.
Executez-le. Vous devriez voir la sortie suivante :
{'code_insee': '01001', 'nom': "L' Abergement-Clémenciat", 'code_postal': '01400', 'population': '776'}
Comme vous pouvez le voir, la première ligne du fichier a été chargée sous forme d'un dictionnaire. Les clés sont les éléments du schéma, et les valeurs sont les élements correspondant dans la ligne.
Population est donc une list
de dict
:
[
{'code_insee': '01001', 'nom': "L' Abergement-Clémenciat", 'code_postal': '01400', 'population': '776'},
{'code_insee': '01002', 'nom': "L' Abergement-de-Varey", 'code_postal': '01640', 'population': '248'},
{'code_insee': '01004', 'nom': 'Ambérieu-en-Bugey', 'code_postal': '01500', 'population': '14035'},
{'code_insee': '01005', 'nom': 'Ambérieux-en-Dombes', 'code_postal': '01330', 'population': '1689'},
...
]
De cette manière, ce sera plus simple de travailler sur chaque commune. Charger les données et les organiser de manière à en faciliter le traitement s'appelle l'indexation. Il y a de nombreuses indexations possibles pour une table :
- une seule
list
qui contient toutes les lignes mises bout à bout - une
list
qui contient des lignes sous forme dedict
- une
list
qui contient des lignes sous forme delist
- un
dict
qui contient des lignes sous forme dedict
- un
dict
qui contient des lignes sous forme delist
- un
dict
qui contient des colonnes sous forme delist
- ...
La méthode d'indexation a un impact sur les performances de certaines opérations, et sur la place occupée en mémoire par la table. Nous en explorerons quelques unes au cours de ce chapitre, mais pour le moment, nous allons travailler avec celle présentée plus haut : une list
qui contient des lignes sous forme de dict
.
Code TP
En cliquant sur ce lien, vous pouvez télécharger le jeu de données et le support des exercices à faire au long de cette partie.
Les fichiers exerciceXX.py
sont à compléter. Une tout petit module additionnel vous fournis les fonctions suivantes :
charger_csv
qui charge un fichier CSV dont le nom est passé en paramètres sous forme d'unelist
dedict
. Exemplecharger_csv("localisation.csv")
exporter_carte
qui prends en paramètre une table comportant les colonnesnom
,latitude
etlongitude
, et l'utilise pour créer une carte où chaque commune dans la table est localisée, puis l'enregistre dans un fichier HTML dont le nom est passé en paramètre. Exemple `exporter_carte(une_table_creee_plus_haut, "carte.html")afficher_table
, qui prends en paramètre une table quelconque et l'affiche d'une manière propre. Exempleafficher_table(une_table_creee_plus_haut)
Vous trouverez aussi des fichiers HTML de la forme exerciceX_resultat.html
qui donnent pour les exercices produisant une carte la carte attendue.
-
Les données de ces deux tables ont étés construites à partir de deux jeux de données : https://www.data.gouv.fr/fr/datasets/villes-de-france/ et https://www.insee.fr/fr/statistiques/4265429?sommaire=4265511#consulter ↩↩↩