Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
Modules csv et pandas
Fichier csv
Vous disposez d'un fichier worldcities.csv contenant les données sur un ensemble de villes.
csv signifie comma separated values, c'est un fichier où les données sont séparées par des virgules ou des points-virgules.
Le fichier est un simple fichier texte qui ressemble à cela :
city;city_ascii;lat;lng;country;iso2;iso3;admin_name;capital;population;id Tokyo;Tokyo;35.6850;139.7514;Japan;JP;JPN;Tōkyō;primary;35676000;1392685764 New York;New York;40.6943;-73.9249;United States;US;USA;New York;;19354922.0;1840034016 Mexico City;Mexico City;19.4424;-99.1310;Mexico;MX;MEX;Ciudad de México;primary;19028000;1484247881 ...
Si on l'ouvrait avec un éditeur spécialisé comme un tableur, on aurait ce type de mise en forme :
| city | city_ascii | lat | lng | country | iso2 | iso3 | admin_name | capital | population | id |
|---|---|---|---|---|---|---|---|---|---|---|
| Tokyo | Tokyo | 35.6850 | 139.7514 | Japan | JP | JPN | Tōkyō | primary | 35676000 | 1392685764 |
| New York | New York | 40.6943 | -73.9249 | United States | US | USA | New York | 19354922.0 | 1840034016 | |
| Mexico City | Mexico City | 19.4424 | -99.1310 | Mexico | MX | MEX | Ciudad de México | primary | 19028000 | 1484247881 |
La première ligne est une entête qui sert à préciser le contenu des colonnes.
Nous aimerions ouvrir le fichier et en extraire le contenu sous une forme exploitable.
Commencez par télécharger worldcities.csv dans un dossier. Vous placerez les scripts suivant dans le même dossier.
Sans module
# Fichier city0.py
# Exemple de chargement de fichier csv
# sans module
file = open('worldcities.csv', 'r', encoding='utf8')
contenu = file.read()
file.close()
lines = contenu.split('\n')
items = [line.split(';') for line in lines]
# à titre d'illustration, affichons le résultat :
for i in range(5):
print(items[i])
Avec l'objet reader du module csv
# Fichier city1.py
# Exemple de chargement de fichier csv avec
# l'objet reader du module csv
import csv
file = open('worldcities.csv', 'r', encoding='utf8')
# csv fourni un objet de type reader
# qui est comme un tête de lecture placée
# sur le fichier
reader = csv.reader(file, delimiter=';')
villes = []
for row in reader:
villes.append(row)
file.close()
# à titre d'illustration, affichons le résultat :
for i in range(5):
print(villes[i])
- On n'a plus besoin de faire la découpe,
csv.readers'en charge, - le résultat
villesest un tableau de tableau, - la ligne d'entête n'est pas vraiment utilisée,
- si on veut accéder au nom de pays de Tokyo, il faut déjà savoir que Tokyo est à la ligne 1 puis que le nom de pays est à la colonne 4 et demander
villes[1][4]. Ce n'est pas tellement pratique.
Avec l'objet DictReader du module csv
# Fichier city2.py
# Exemple de chargement de fichier csv avec
# l'objet DictReader du module csv
import csv
file = open('worldcities.csv', 'r', encoding='utf8')
# csv fourni un objet de type DictReader
# Il fournit presque des dictionnaires
reader = csv.DictReader(file, delimiter=';')
villes = []
for row in reader:
villes.append(row)
file.close()
# à titre d'illustration, affichons le résultat :
print(villes[0]["country"])
- Cette fois le résultat est un tableau de dictionnaires (ou presque),
- la première ligne d'entête est utilisée pour servir de clés aux dictionnaires,
- si on veut connaître le pays de Tokyo, il suffit de savoir que Tokyo est à la ligne d'indice
0et de demandervilles[0]['country'], - si vous affichez le contenu de
villesvous constaterez que les items ne sont pas des exactement des dictionnaires. Si cela posait un problème, on pourrait faire une conversion, en ligne 16 :villes.append(dict(row)). Vous pouvez essayer et constater la différence.
Utiliser une fonction de formatage
La version DictReader n'est pas mal mais dans la lecture du fichier, tout est considéré comme du texte. Si nous voulions faire des calculs avec les l’attitude, longitude… c'est gênant.
On pourrait ajouter une fonction chargée de modifier les types.
# Fichier city2_bis.py
# Utilisation d'une fonction de formatage
# pour que les données numériques soient bien reconnues
import csv
def format(item):
return {
'city':item['city'],
'lat':float(item['lat']),
'lng':float(item['lng']),
'country':item['country'],
}
file = open('worldcities.csv', 'r', encoding='utf8')
reader = csv.DictReader(file, delimiter=';')
villes = []
for row in reader:
villes.append(format(row))
file.close()
# à titre d'illustration, affichons les 5 première lignes :
print(villes[:5])
- Les données obtenues ont la bonne forme. On peut utiliser les nombres en tant que nombres.
- On est libre de filtrer certaines colonnes. Dans cet exemple, la fonction
formatne prend en compte que 4 colonnes. - Certains cas nécessiteront des fonctions plus souples : ici par exemple, la colonne *population* n'est pas toujours convenablement renseignée. On ne peut donc pas se contenter de
int(item["population"]).
Avec le module pandas
Il s'agit d'un gros module qui sait faire beaucoup de choses. Ce module est très utilisé par ceux qui font de l'analyse de données. C'est la présence de module très performants comme celui-ci qui font la popularité de Python.
# Fichier city3.py
# Exemple de chargement de fichier csv avec
# le module pandas
import pandas
villes = pandas.read_csv("worldcities.csv", delimiter=";")
C'est tout ! villes n'est pas un tableau. C'est un objet défini par pandas, plus compliqué et plein de fonctionnalités. Voici quelques exemples que vous pouvez entrer en console après exécution du script :
>>> villes.loc[10] # affichage de l'item au rang 10 >>> villes.loc[10]['population'] # population de cette ville.
Notez que populationa été converti en float automatiquement par panda ce que ne faisait pas csv.
>>> villes.nlargest(10, 'population') >>> villes[villes.city == "Paris"] >>> villes['population'].describe()
Ceci n'est qu'un aperçu, pandas a beaucoup de fonctionnalités.
