La manipulation de données se décompose en trois grandes phases
Un processus métier peut ensuite consommer les données.
©axysweb.comFormat universel d'échange de données
Comment est représenté l'information dans un fichier texte ?
C'est une simple suite d'octets. Les octets sont groupés par paquets (pas forcément un par un) pour former un point de code (un entier)
Cet entier correspond au code du caractères (cf. le cours sur UTF-8 et unicode)
Les chaînes de caractères en Python sont les objets de la classe str. Les chaînes sont non modifiables (on ne peut pas modifier le ième caractère).
L'opérateur % est défini pour les chaînes de caractères. Il permet d'insérer des valeurs dans une chaîne de format
age = 42
nom = "toto"
message = f"L'an prochain, {nom.capitalize()} aura {age + 1} ans"
print(message)
#Affiche L'an prochain, Toto aura 43 ans
On peut utiliser des chaînes f'...', f"" ou f""" ... """
L'interface reflète la manière dont les systèmes d'exploitation représente les fichiers :
Les fichiers sont dénotés par leur nom et leur chemin, c'est à dire la liste des dossiers à traverser pour trouver le fichier.
/home/kim/Documents/cours/notes.txt
C:\Users\kim\Mes Documents\cours\notes.txt
Pour du code écrit dans l'environnement Jupyter, on utilise la convention Unix
f = open (chemin, mode)
chemin est une chaîne de caractères. mode est l'une des chaînes :
Les données renvoyées par les lectures et utilisées pour les écritures doivent être de type str
On peut rajouter un b comme deuxième lettre du mode ("rb", "wb+", …). Les fichiers sont alors ouvert en mode binaire et les données lues et écrites sont de type bytes.
Une fois un fichier ouvert on dispose des méthodes suivantes :
Il faut toujours fermer les fichiers ouverts.
Ouvrir un fichier fichier.txt et créer une copie où chaque ligne est précédée de Ln: où n est le numéro de la ligne
f = open("fichier.txt", "r")
lignes = f.readlines()
f.close()
f = open("fichier_num.txt", "w")
for i in range(0, len(lignes)):
f.write(f"L{i}: {lignes[i]}")
f.close()
En Python, il est possible de définir des fonctions ayant des arguments nommés ayant une valeur par défaut. Si ces fonctions sont appelées sans donner ces arguments, leur valeur par défaut est utilisée. Sinon il faut utiliser la syntaxe nom=valeur
Exemple : la fonction print(…) attend un nombre arbitraire d'arguments et un argument nommé end affiché en fin de ligne et valant '\n' par défaut.
print("A")
print("B")
# Affiche
# A
# B
print("A", end='') # on n'affiche pas de retour à la ligne.
print("B")
# Affiche
# AB
On appelle format CSV tout format de fichier texte encodant des données tabulées. Avec les contraintes suivantes:
Cette définition simple est cependant approximative
Les fichiers CSV sont souvent difficile à lire quand ils ont été mal construits
Les fonctionalités liées au fichiers CSV sont dans le module csv
import csv
#on veut lire un fichier "fichier.csv" contenant
# Nom;Note
# Toto;14
# Titi;13
# Tata;18
f = open("fichier.csv", "r")
table = list(csv.reader(f, delimiter=';'))
f.close()
#table vaut
#[ ['Nom', 'Note'], ['Toto', '14'], ['Titi', '13'], ['Tata', '18']]
Un dictionnaire (ou tableau associatif) associe des clés à des valeurs
mois = { "janvier" : 31, "février" : 28, …, "décembre" : 31 }
print(mois["janvier"]) # affiche 31
mois["février"] = 29 # mise à jour
del mois["novembre"] # supprime l'entrée
for j in mois.values():
print(j) #affiche 31, 29, 31, …
for m in mois.keys():
print(m) #affiche janvier, février, …
for (m, j) in mois.items():
print(m, "a", j, "jours") #affiche janvier a 31 jours, février a …
import csv
#on veut lire un fichier "fichier.csv" contenant
# Nom;Note
# Toto;14
# Titi;13
# Tata;18
f = open("fichier.csv", "r")
dic_table = list(csv.DictReader(f, delimiter=';'))
f.close()
#dic_table vaut
#[ { 'Nom':'Toto', 'Note' : '14'}, { 'Nom':'Titi', 'Note' : '13' }, … ]
{ x ∈ ℕ | x mod 2 = 0 }
Notation mathématique compacte qui permet de définir l'ensemble des éléments d'un autre ensmble qui vérifient une propriété.
{ (x,y) ∈ ℝ2 | x2 + y2 = 1 }
« L'ensembles des points dont la norme vaut 1 » (i.e. le cercle de rayon 1)
C'est une notation très puissante, compacte et déclarative (elle exprime ce qu'on veut, pas comment on le calcule).
Python permet de définir des tableaux en compréhension :
pairs = [ x for x in range(100) if x % 2 == 0 ]
#pairs vaut [ 0, 2, 4, 6, 8, … , 98 ]
La syntaxe (simplifiée) est :
[ er for x in el if c ]
où
Python permet de définir des tableaux en compréhension :
Le code :
[ er for x in el if c ]
est équivalent à :
res = []
for x in el:
if c:
res = res + [er]
Exemple :
>>> [ (x-1, x+1) for x in range(10) if x % 3 = 0 ]
[(-1, 1), (2, 4), (5, 7), (8, 10)]
>>>
Un tableau donné par comprhénsion permet :
C'est une opération tellement courante que les concepteurs de Python on jugé nécessaire de la mettre dans le langage.
Bibliothèque permettant de tracer des graphiques.
Le but est juste de faire une introduction ultra-rapide, la documentation est gigantesque, les possibilités d'utilisation très nombreuses.
from matplotlib import pyplot
pyplot est lui-même un sous-module de matplotlib. On appelera toutes les fonctions en les préfixant par pyplot.
Il existe plusieurs façons d'utiliser la bibliothèque. On va voir la plus simple pour notre utilisation
Il y a une notion de « graphique courant » qui est celui sur
lequel on est en train de dessiner. Tant qu'on
n'efface pas ce
graphique, toutes les instructions de dessins vont s'ajouter les
unes aux autres.
Forme générale du programme :
from matplotlib import pyplot
pyplot.plot(...) #instructions de dessin
pyplot.grid()
pyplot.xlabel("temps")
pyplot.ylabel("energie")
pyplot.savefig("image1.png") #sauvegarde dans un premier fichier
pyplot.clf() #on efface tout
... #autres instructions
pyplot.savefig("image2.png") #sauvegarde dans un autre fichier
...
Graphique le plus basique. Trace des points (x,y) et les relie entre eux (ou pas)
tx = range(-10, 11)
ty = [ x * x for x in tabx ]
pyplot.plot(tx, ty, label='ma courbe', color='red', ls='--', marker='>')
pyplot.legend()
pyplot.savefig('g1.png')
pyplot.plot(tx, ty, label=lab, color=col, ls=s, marker=m)
Il y a plein de styles de marqueurs. On en donne quelques uns:
symbole | description |
---|---|
'o' | cercle |
'D' | diamant |
's' | carré |
'*' | étoile |
'+' | plus |
'x' | croix oblique |
'<', '>', '^', 'v' | triangles orientés |
tx = range(10)
pyplot.plot(tx, [x/2 for x in tx], marker='o')
pyplot.plot(tx, [x for x in tx], marker='D')
pyplot.plot(tx, [3*x/2 for x in tx], marker='s')
pyplot.plot(tx, [2*x for x in tx], marker='*')
pyplot.plot(tx, [5*x/2 for x in tx], marker='+')
pyplot.plot(tx, [3*x for x in tx], marker='x')
pyplot.savefig('g2.png')
On peut donner les couleurs :
Si on mets plusieurs courbes sur un même dessin sans donner de couleurs, les couleurs sont choisies automatiquement.
le paramètre nommé ls (linestyle) peut prendre plusieurs valeurs :
symbole | description |
---|---|
'' | pas de trait |
'-' | trait plein |
'--' | tirets séparés |
':' | pointillés |
'-.' | tirets-points |
tx = range(10)
pyplot.plot(tx, [x/2 for x in tx], ls='', marker='o')
pyplot.plot(tx, [x for x in tx], ls='-', marker='D')
pyplot.plot(tx, [3*x/2 for x in tx], ls='--', marker='s')
pyplot.plot(tx, [2*x for x in tx], ls=':', marker='*')
pyplot.plot(tx, [5*x/2 for x in tx], ls='-.', marker='+')
pyplot.savefig('g3.png')
tx = [1, 2, 3, 4 ]
ty = [10, 20, 2, 50 ]
tl = ['A', 'B', 'C', 'D']
pyplot.bar(tx, ty, tick_label=tl, color='red', label='mon graphe')
pyplot.legend()
pyplot.savefig('g4.png')
pyplot.clf()
pyplot.barh(tx, ty, 0.5, tick_label=tl, color='blue', label='mon graphe')
pyplot.legend()
pyplot.savefig('g5.png')
pyplot.bar(tx, ty, w, tick_label=tl, color=c, label=lab)
plot.barh trace les barres horizontalement
from random import randint
tx = range(100)
ty = [ randint(0, 100) for x in tx ]
ta = [ randint(1, 15)**2 for x in tx ]
pyplot.scatter(tx, ty, s=ta, color=(0.8, 0.8, 0, 0.5))
pyplot.savefig('g6.png')
Nuage de points
pyplot.scatter(tx, ty, s=ta, color=col, label=lab,)
Les autrs paramètres sont les même (color=, legend=)
from math import sin, cos
tx = [ x * 0.1 for x in range(-30,30) ]
ty1 = [ sin(x) for x in tx ]
ty2 = [ cos(x) for x in tx ]
pyplot.plot(tx, ty1, label='sin')
pyplot.plot(tx, ty2, label='cos')
pyplot.grid()
pyplot.legend()
pyplot.savefig('g7.png')