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]{.uri} 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
Entrée
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)
Résultat
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
.
Entrée
df.columns
Résultat
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()
.
Entrée
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)
Sortie
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.
Entrée
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)
Sortie
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.
Entrée
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)
Sortie
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: