Contenus | Capacités attendues | Commentaires |
---|---|---|
Tri d’une table | Trier une table suivant une colonne. | Une fonction de tri intégrée au système ou à une bibliothèque peut être utilisée. |
Fusion de tables | Construire une nouvelle table en combinant les données de deux tables. | La notion de domaine de valeurs est mise en évidence. |
L'utilisation des données en table étant très largement répandue, une bibliothèque spécialisée s'est développée et imposée dans le monde de python pandas
.
Cette libraire va grandemant nous faciliter la lecture et l'utilisation des données.
csv
Par exemple la lecture csv à partir d'une url, on utilise ici la Cartographie des stationnements deux roues de Nice mise à disposition sur le site gouvernemental: https://data.gouv.fr avec la description suivante:
Vous trouverez ici la cartographie des stationnements deux roues. Table des données SIG relatives aux GAV-GAM et GAV/GAM nb : GAV = Garage à Vélo + GAM = Garage à Moto Code profil 1 = GAM; Code profil 2 = GAV, Code profil 0 = GAV-GAM
import pandas as pd
# on importe les données dans un variable appelée df pou dataframe(le nom de la variable vous appartient)
df = pd.read_csv("https://www.data.gouv.fr/fr/datasets/r/d2adbc7e-8526-43f8-9b30-51dc44f1b430", sep=";")
# on affiche les 5 premières lignes
df.head(5)
NB_ARC_VL | ID_GAV | NB_PL_MT | LARGEUR | GLOBALID | TYPE_MOBIL | PROFIL | LONGUEUR | ETAT_ | CODE_INSEE | NB_PL_VL | NB_PLACE | NB_ARC_MT | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 1001 | 30.0 | 0.65 | {578A7D02-A426-4AA0-99C6-D2C1FBED8814} | 4.0 | 1 | 21.2 | En vigueur | 6088 | 0.0 | 30.0 | 0 | {"type": "Point", "coordinates": [7.21337219, ... |
1 | 2.0 | 2010 | 3.0 | 2.00 | {291C1D1B-2A1C-42B7-9D06-2877D62B2838} | 1.0 | 0 | 7.5 | En vigueur | 6088 | 2.0 | 5.0 | 4 | {"type": "Point", "coordinates": [7.25311445, ... |
2 | 0.0 | 2015 | 12.0 | 2.00 | {E002A4DF-3CD8-4F5F-9E87-721004924B1C} | 1.0 | 1 | 26.0 | En vigueur | 6088 | 0.0 | 12.0 | 12 | {"type": "Point", "coordinates": [7.25608087, ... |
3 | 0.0 | 2020 | 3.0 | 2.00 | {DD571B19-C522-4E1F-97E5-0841E6DE59E5} | 2.0 | 0 | 4.7 | En vigueur | 6088 | 1.0 | 4.0 | 0 | {"type": "Point", "coordinates": [7.25171699, ... |
4 | 0.0 | 2024 | 7.0 | 2.00 | {1710D778-67BF-45ED-B3F5-399B82088C5A} | 2.0 | 0 | 12.0 | En vigueur | 6088 | 3.0 | 10.0 | 0 | {"type": "Point", "coordinates": [7.25427638, ... |
On peut également facilement afficher le nom des colonnes avec l'attribut columns
.
df.columns
Index(['NB_ARC_VL', 'ID_GAV', 'NB_PL_MT', 'LARGEUR', 'GLOBALID', 'TYPE_MOBIL',
'PROFIL', 'LONGUEUR', 'ETAT_', 'CODE_INSEE', 'NB_PL_VL', 'NB_PLACE',
'NB_ARC_MT', 'geometry'],
dtype='object')
On peut facilement parcourir l'ensemble des lignes du tableau avec la méthode itertuples()
.
for ligne in df.itertuples():
# On s'arrête à la troisième ligne pour pas encombrer le cours
# Commenter ces deux lignes pour parcourir l'ensmble du tableau
if ligne.Index > 2:
break
print(ligne)
Pandas(Index=0, NB_ARC_VL=0.0, ID_GAV='1001', NB_PL_MT=30.0, LARGEUR=0.65, GLOBALID='{578A7D02-A426-4AA0-99C6-D2C1FBED8814}', TYPE_MOBIL=4.0, PROFIL=1, LONGUEUR=21.2, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=0.0, NB_PLACE=30.0, NB_ARC_MT=0, geometry='{"type": "Point", "coordinates": [7.21337219, 43.66717783]}')
Pandas(Index=1, NB_ARC_VL=2.0, ID_GAV='2010', NB_PL_MT=3.0, LARGEUR=2.0, GLOBALID='{291C1D1B-2A1C-42B7-9D06-2877D62B2838}', TYPE_MOBIL=1.0, PROFIL=0, LONGUEUR=7.5, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=2.0, NB_PLACE=5.0, NB_ARC_MT=4, geometry='{"type": "Point", "coordinates": [7.25311445, 43.69461128]}')
Pandas(Index=2, NB_ARC_VL=0.0, ID_GAV='2015', NB_PL_MT=12.0, LARGEUR=2.0, GLOBALID='{E002A4DF-3CD8-4F5F-9E87-721004924B1C}', TYPE_MOBIL=1.0, PROFIL=1, LONGUEUR=26.0, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=0.0, NB_PLACE=12.0, NB_ARC_MT=12, geometry='{"type": "Point", "coordinates": [7.25608087, 43.6951747]}')
Chaque ligne renvoyée par la méthode itertuples()
est un tuple nommé, on peut ainsi accéder accéder aux valeurs individuelles de chaque ligne avec la notation pointée ligne.nom_de_la_colonne
. Par exemple pour afficher le nombre d'arcs du stationnement.
for ligne in df.itertuples():
# On s'arrête à la troisième ligne pour pas encombrer le cours
# Commenter ces deux lignes pour parcourir l'ensmble du tableau
if ligne.Index > 2:
break
print("Nombre d'arcs de stationnement pour vélos:", ligne.NB_ARC_VL)
Nombre d'arcs de stationnement pour vélos: 0.0
Nombre d'arcs de stationnement pour vélos: 2.0
Nombre d'arcs de stationnement pour vélos: 0.0
Supposons que l'on cherche des stationnements destinés aux vélos.
for ligne in df.itertuples():
# On s'arrête à la troisième ligne pour pas encombrer le cours
# Commenter ces deux lignes pour parcourir l'ensmble du tableau
if ligne.Index > 2:
break
if ligne.NB_ARC_VL > 0:
print(ligne.Index, ligne.NB_ARC_VL)
1 2.0
Effectivement parmi les trois premières lignes seul la ligne d'index 1(la deuxième) présente des arcs de stationnement pour vélos.
Pour explorer davantage cette table de données, passez aux exercices.
La librairie pandas
est extrémemnt riche et seul son utilisation sur des cas concrets permet d'en comprendre les rouages.
Pour plus d'informations, vous pouvez consulter: