Académique Documents
Professionnel Documents
Culture Documents
On trouve énormément de données au format CSV sur internet. Une partie de ces données sont publiques,
par exemple le site data.gouv.fr récence un grand nombre de données publiques. Ces données sont
librement réutilisables.
Voici un exemple du contenu d'un fichier CSV :
nom,prenom,date_naissance
Durand,Jean-Pierre,23/05/1985
Dupont,Christophe,15/12/1967
Terta,Henry,12/06/1978
Nous avons ici 3 personnes :
• Jean-Pierre Durand qui est né le 23/05/1985
• Christophe Dupont qui est né le 15/12/1967
• Henry Terta qui est né le 12/06/1978
"nom", "prenom" et "date_naissance" sont appelés des descripteurs alors que, par exemple, "Durand",
"Dupont" et "Terta" sont les valeurs du descripteur "nom".
1. Donner les différentes valeurs du descripteur "date_naissance".
1-pandas.odt 1/7
Classe de première NSI
4. Après avoir téléchargé le fichier ident_pointVirgule.csv du dossier « csv », ouvrir ce dernier à l'aide
d'un tableur.
Si par hasard votre tableur ne gère pas correctement le fichier avec le séparateur "point-virgule",
voici une version "séparateur virgule" du fichier : ident_virgule.csv.
Dans la suite, gardez toujours cet éventuel problème à l'esprit (surtout avec des données "made in
France").
Résultat attendu :
NB : vous pouvez constater que les données sont bien "rangées" dans un tableau avec des lignes et
des colonnes (voilà pourquoi on parle de données tabulaires).
Il est possible de trouver sur le web des données beaucoup plus intéressantes à traiter que celles contenues
dans le fichier "ident_pointVirgule.csv" (ou "ident_virgule.csv"). Par exemple, le site sql.sh, propose un
fichier csv contenant des informations sur l'ensemble des communes françaises.
5. Ouvrir le fichier ville_point_virgule.csv du dossier « csv » à l'aide d'un tableur (c’est une version
légèrement modifiée de celle disponible sur le site sql.sh, dans laquelle des entêtes ont été
ajoutées). En cas de problème avec votre tableur, voici une version "séparateur virgule" :
ville_virgule.csv (attention le séparateur "décimal" est ici le point).
Comme vous pouvez le constater, nous avons 12 colonnes (et 36700 lignes si on ne compte pas
l'entête !), voici la signification de ces colonnes :
• dep : numéro de département
• nom : nom de la commune
• cp : code postal
• nb_hab_2010 : nombre d'habitants en 2010
• nb_hab_1999 : nombre d'habitants en 1999
• nb_hab_2012 : nombre d'habitants en 2012 (approximatif)
• dens : densité de la population (habitants par kilomètre carré)
• surf : superficie de la commune en kilomètre carré
• long : longitude
• lat : latitude
• alt_min : altitude minimale de la commune (il manque des données pour certains territoires
d'outre-mer)
• alt_max : altitude maximale de la commune (il manque des données pour certains
territoires d'outre-mer)
6. Déterminer l'altitude maximale et l'altitude minimale de votre commune.
NB : utiliser l’option « scinder la fenêtre » du menu Affichage.
1-pandas.odt 2/7
Classe de première NSI
import pandas
ident = pandas.read_csv("ident_virgule.csv")
print(ident)
Le code ci-dessus est très simple :
• Avec la première ligne, nous importons la bibliothèque pandas afin de pouvoir l'utiliser
• À la deuxième ligne, nous créons une variable "ident" qui va contenir les données présentes
dans le fichier "ident_virgule.csv"
• La troisième ligne affiche les données contenues dans la variable "ident" rangées sous la
forme d'un tableau, un peu comme ce que nous obtenions en ouvrant le fichier
"ident_virgule.csv" avec un tableur.
Vous avez peut-être remarqué qu'une colonne a été ajoutée
par rapport à ce que nous obtenions avec le tableur :
Les nombres présents dans cette colonne sont appelés des
index. Chaque ligne du tableau a un index (première ligne :
index 0, deuxième ligne index 1...)
ATTENTION : les index commencent à 0 et pas à 1
Les colonnes possèdes également des index, dans notre exemple ces index correspondent au "nom" (index
de la première colonne), au "prenom" (index de la deuxième colonne) et à "date_naissance" (index de la
troisième colonne)
En résumé : les lignes possèdent des index (0,1,2..), les colonnes possèdent aussi des index ("nom",
"prenom", …).
3. Il est possible de récupérer certaines données du tableau, par exemple, certaines lignes, certaines
colonnes ou bien encore des valeurs uniques. Pour cela, il suffit d'utiliser l'instruction "loc" avec les
index des lignes et les index des colonnes. Le principe de fonctionnement de "loc" est relativement
simple puisque l'on aura une instruction de la forme "loc[index_ligne,index_colonne]" :
import pandas
ident = pandas.read_csv("ident_virgule.csv")
print(ident)
1-pandas.odt 3/7
Classe de première NSI
import pandas
ident = pandas.read_csv("ident_virgule.csv")
info = ident.loc[:, 'prenom']
Vérifiez que la variable "info" contient bien toutes les données de la colonne d'index "nom",
autrement dit, tous les noms.
6. Il est possible de récupérer toutes les colonnes d'une ligne particulière, cette fois en remplaçant la
partie "index_colonne" de "loc" par ":" :
import pandas
ident = pandas.read_csv("ident_virgule.csv")
info = ident.loc[2, :]
Vérifiez que la variable "info" contient bien toutes les données de la dernière ligne (index 2).
7. Il est aussi possible de récupérer seulement certaines lignes et certaines colonnes en utilisant la
notation suivante : loc[[index_ligne_1,index_ligne_2,...],[index_colonne_1,index_colonne_2,…]] :
import pandas
ident = pandas.read_csv("ident_virgule.csv")
info = ident.loc[[0,1], ['nom','date_naissance']]
Vérifiez que la variable "info" contient bien un tableau avec uniquement les colonnes "nom" et
"date_naissance" de la première ligne (index 0) et de la deuxième ligne (index 1).
Afin d'avoir des exemples plus complexes à traiter, dans la suite, nous allons travailler sur les données
contenues dans le fichier ville_virgule.csv.
8. Testez le programme suivant :
import pandas
info_villes = pandas.read_csv("villes_virgule.csv")
Vérifiez que la variable "info_villes" contient bien les données contenues dans le fichier
ville_virgule.csv.
Comme vous pouvez le constater, il manque des données dans le tableau qui s'affiche dans la console (les
données manquantes sont symbolisées par des …). En effet, le tableau contient trop données pour qu'il soit
entièrement affiché dans la console.
En explorant le tableau, vous devriez, notamment dans les colonnes l'altitude mini et maxi, voir apparaître
un étrange "NaN" (Not a Number) pour les dernières villes du tableau car certaines données sont
manquantes.
Maintenant, nous désirons obtenir un tableau contenant toutes les villes qui ont une altitude minimum
supérieure à 1500 m. Nous allons devoir introduire des conditions dans la sélection des villes.
9. Testez le programme suivant :
import pandas
1-pandas.odt 4/7
Classe de première NSI
info_villes = pandas.read_csv("villes_virgule.csv")
nom_alt = info_villes.loc[info_villes["alt_min"] > 1500, ["nom","alt_min"]]
print(nom_alt)
Dans la fonction "loc", l'expression "info_villes["alt_min"]>1500" est bien avant la virgule, elle
concerne donc les index des lignes du tableau. On sélectionnera uniquement les lignes qui auront la
valeur du descripteur "alt_min" supérieure à 1500. Nous allons donc bien sélectionner les villes qui
ont une altitude minimum supérieure à 1500 m.
10. Écrire un programme qui permet d'avoir les villes qui ont une densité d'habitant inférieure à 50
(dans le tableau ainsi créé, on aura 3 colonnes : le nom de la ville, la densité de la population et
l'altitude minimum)
11. Il est possible de combiner plusieurs facteurs de sélection en utilisant un "et"("&") ou un "ou"("|") :
import pandas
info_villes = pandas.read_csv("villes_virgule.csv")
nom_alt = info_villes.loc[(info_villes["alt_min"] > 1500) \
& (info_villes["dens"] > 50), ["nom","dens","alt_min"]]
print(nom_alt)
Vous devriez constater qu'il y a, en France, une seule ville avec une densité de population
supérieure à 50 et une altitude minimum supérieure à 1500 m.
Donner son nom.
12. Il est aussi possible d'effectuer des calculs sur des colonnes, par exemple des moyennes. Il suffit
d'utiliser l'instruction "mean" pour effectuer une moyenne :
import pandas
info_villes = pandas.read_csv("villes_virgule.csv")
moyenne_alt_min = info_villes.loc[:,"alt_min"].mean()
print(moyenne_alt_min)
Vous devriez constater que l'altitude minimum moyenne est de 193 m en France.
On rappelle que dans "loc[:,"alt_min"]" le ":" signifie que l'on considère toutes les lignes du tableau.
De plus le "alt_min" que le calcul de la moyenne porte bien sur les données du descripteur
"alt_min".
13. Écrivez un programme permettant de calculer le nombre moyen d'habitants en 2012
14. Pour l'instant nous avons calculé une moyenne sur l'ensemble des lignes, il est aussi possible
d'imposer une condition sur les lignes qui seront utilisées pour le calcul :
import pandas
info_villes = pandas.read_csv("villes_virgule.csv")
nombre_hab = info_villes.loc[info_villes["alt_min"] > 1500, \
"nb_hab_2012"].mean()
print(nombre_hab)
Vous devriez constater que les villes ayant une altitude minimum supérieure à 1500 m avaient en
moyenne 350 habitants en 2012.
15. Il est aussi possible de trier le tableau en fonction des valeurs d'un descripteur. Il suffit d'utiliser
l'instruction "sort_values" :
1-pandas.odt 5/7
Classe de première NSI
import pandas
info_villes = pandas.read_csv("villes_virgule.csv")
tri_alt_min = info_villes.sort_values(by=["alt_min"], ascending=False)
print(tri_alt_min)
Indiquer la ville ayant l'altitude minimum la plus importante de France.
17. Écrire un programme permettant de répondre à la question suivante : quelle est la ville ayant la
densité de population la plus forte ?
Il est possible de fusionner 2 tableaux de données qui ont une colonne commune.
Afin de travailler sur cette fusion, nous allons utiliser 2 fichiers au format CSV : fiches_client.csv et
fiches_com.csv.
18. Après avoir téléchargé les 2 fichiers ci-dessus, testez le code suivant :
import pandas
client = pandas.read_csv("fiches_client.csv")
commande = pandas.read_csv("fiches_com.csv")
print(client)
print("--")
print(print(commande))
Nous avons un tableau qui référence les clients (nom, prénom, ville), chaque client possède un
numéro de client. Le deuxième tableau référence des commandes : pour chaque commande, nous
avons un numéro de commande, une date et le numéro du client qui a passé la commande, ce
numéro de client correspond évidemment au numéro de client que l'on trouve dans le premier
tableau.
19. Sachant que nous avons deux colonnes contenant les mêmes types d'information (numéros de
client), nous allons pouvoir fusionner les deux tableaux en un seul :
import pandas
client = pandas.read_csv("fiches_client.csv")
commande = pandas.read_csv("fiches_com.csv")
1-pandas.odt 6/7
Classe de première NSI
Nous avons bien fusionné les 2 tableaux "client" et "commande" en un seul tableau "cl_com" qui regroupe
les informations pour chaque commande. Quand on effectue ce genre de fusion, on dit souvent que l'on
effectue une jointure.
20. Il faut prendre garde à l'ordre des arguments de la fonction "merge" :
import pandas
client = pandas.read_csv("fiches_client.csv")
commande = pandas.read_csv("fiches_com.csv")
1-pandas.odt 7/7