Académique Documents
Professionnel Documents
Culture Documents
Cours 4
• Année : 2022/2023
Responsable Module Mr. Khalid El Fayq • Session : 8 – Hiver 2022
ère • Volume horaire 64
Niveau 4 Année
• Crédits : 4
Filière Génie informatique
1
The numpy, Matplotlib and Pandas
• Introduction to Matplotlib.
• Introduction to Pandas.
2
3
4
5
Introduction a NumPy et Matplotlib.
Qu'est-ce que NumPy ?
• Le terme NumPy est en fait l’abréviation de ” Numerical Python “. Il s’agit
d’une bibliothèque Open Source en langage Python. On utilise cet outil
pour la programmation scientifique en Python, et notamment pour la
programmation en Data Science, pour l’ingénierie, les mathématiques ou
la science.
• Cette bibliothèque est très utile pour effectuer des opérations
mathématiques et statistiques en Python. Elle fonctionne à merveille pour
la multiplication de matrices ou de tableaux multidimensionnels.
L’intégration avec C/C++ et Fortran est très facile.
6
Comment fonctionne NumPy ?
7
Il faut au départ importer le package numpy avec l’instruction suivante :
Variable pi
>>> np.pi
3.141592653589793
9
Fonctions trigonométrique
numpy.sin(x) sinus
numpy.cos(x) cosinus
numpy.tan(x) tangente
numpy.arcsin(x) arcsinus
numpy.arccos(x) arccosinus
numpy.arctan(x) arctangente
a = np.sin(30)
b = np.cos(30)
c = np.tan(30)
Radians not Degree
print(a,b,c)
a = np.sin(30 * np.pi/180)
a = np.sin(np.deg2rad(30))
Fonctions diverses
Arrondis
numpy.around(x,n) arrondi à n décimales
numpy.trunc(x) retourne la partie entière du nombre (le
nombre est tronqué)
11
Exemple
a = np.around(3.48888)
b = np.around(3.75058)
c = np.around(3.75058,1)
d = np.around(3.75058,2)
print(a,b,c,d)
La fonction numpy.sign(array [, out]) est utilisée pour indiquer le signe d'un nombre élément par élément.
Pour les entrées entières, si la valeur du tableau est supérieure à 0, elle renvoie 1, si la valeur du tableau est inférieure
à 0, elle renvoie -1 et si la valeur du tableau est 0, elle renvoie 0.
arr2 = np.zeros((5,5))
(arr2)
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
13
Tableaux - numpy.array()
Création
Les tableaux (en anglais, array) peuvent être créés avec numpy.array(). On utilise des crochets pour
délimiter les listes d’éléments dans les tableaux.
>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> type(a)
numpy.ndarray
np.arange(start, stop, step) renvoie un tableau de nombres à partir de start jusqu'à mais non compris stop, par
étapes de step; la taille de pas par défaut étant 1.
17
La fonction numpy.linspace()
numpy.linspace() permet d’obtenir un tableau 1D allant d’une valeur de départ à une valeur de
fin avec un nombre donné d’éléments.
>>> np.linspace(3, 9, 10)
array([ 3. , 3.66666667, 4.33333333, 5. , 5.66666667,
6.33333333, 7. , 7.66666667, 8.33333333, 9. ])
19
Commande Bibl. Résultat
matrix([[a,b .. d], [e,f ..,h], ..]) numpy Représente la matrice
m[i,j] numpy Représente l'élément de la matrice
m.shape numpy Renvoie la taille de la matrice sous forme d'une liste
m[i,:] numpy Extrait la -ème ligne de la matrice
m[:,i] numpy Extrait la -ème colonne de la matrice
zeros([n,p]) numpy Représente la matrice nulle de taille
eye(n,p) numpy Représente la matrice identité de taille
ones([n,p]) numpy Représente la matrice de coefficients 1 de taille
asarray(m) numpy Transforme une matrice en tableau
asmatrix(m) numpy Transforme un tableau en matrice
norm(m) numpy.linalg Norme de la matrice
transpose(m) numpy Transposée de la matrice
det(m) numpy.linalg Déterminant de la matrice
20
21
Vous avez la possibilité de remplir le tableau avec n’importe quelle donnée grâce à la méthode np.full() :
Il est possible de créer une matrice identité grâce à la méthode np.eye(). Une matrice identité est une matrice
carrée qui a que des 1 sur sa diagonale et 0 partout ailleurs, comme ceci :
22
Les tableaux régulièrement espacés s’obtiennent grâce à la méthode np.arange(). Le but est d’obtenir un
tableau avec des valeurs espacées d’un pas régulier. Il faut savoir que l’intervalle est comme ceci : [début,
fin] ou le dernier nombre ne sera pas pris.
23
Exercice 1
A l'aide de la bibliothèque numpy, créer une matrice du type 3x3 formée des entiers 1 , 2 , 3 , ... , 9.
24
25
Introduction à matplotlib
• Matplotlib : c'est une librairie qui permet de tracer des graphes (dans le sens
graphiques) :inspiré de Matlab au départ.
• inclus 2 façons de l'utiliser :
üsoit avec une approche objet : plus compliquée et plus verbeuse, mais
plus évoluée.
üsoit via des appels de fonctions, avec pyplot : plus simple. pyplot fournit
ainsi des raccourcis qui évitent la formulation objet plus longue à écrire.
• permet de faire des graphes qui peuvent être comlètement adaptés si besoin.
Sur une figure, on peut tracer plusieurs graphes.
• permet aussi de dessiner.
• matplotlib rend ainsi possible la création de graphes à l'intérieur
d'applications complexes autorisées par le langage python, et ceci sans
quitter le langage python.
26
Notions principales pour les graphes sous matplotlib :
27
Importer matplotlib:
import matplotlib.pyplot as plt
Graphiques de base dans Matplotlib:
Matplotlib est livré avec une grande variété de graphiques. Les graphiques aident à comprendre les
tendances, les modèles et à établir des corrélations. Ce sont généralement des instruments de
raisonnement sur les informations quantitatives. Certaines des parcelles d’échantillonnage sont
couvertes ici.
Graphique linéaire :
28
Bar plot:
x = [5, 2, 9, 4, 7]
y = [10, 5, 8, 4, 2]
plt.bar(x,y)
plt.show()
29
Histogramme:
y = [10, 5, 8, 4, 2]
plt.hist(y)
plt.show()
30
from matplotlib import pyplot as plt
x = [5, 2, 9, 4, 7]
y = [10, 5, 8, 4, 2]
plt.scatter(x, y)
plt.show()
31
matplotlib
Style Colleur
Plot Dessin
Scatter Graphique par points
Bar Graphique en barres
Conteur surface tridimensionnelle sur un plan bidimensionnel
3D 3D
Subplot Plusieurs dessin dans même graphe
32
matplotlib
a = np.linspace(1,10)
b = np.sin(a)
plt.style.use('ggplot')
plt.subplot(211)
plt.xlabel("time")
plt.ylabel("date")
plt.plot(a,b)
33
matplotlib Traçage de graphes multiples sur la même figure :
plt.subplot(211)
plt.xlabel("time")
plt.ylabel("date")
plt.plot(a,b)
plt.subplot(212)
plt.plot(x,y)
•pyplot.figure(1) : ouvre la figure numéro 1 (appel implicite à la figure numéro 1 si pas d'appel à figure()).
•pyplot.subplot(2,1,1) : partage la figure en 2 x 1 emplacements de graphes (2 lignes et 1 colonne) et sélectionne
le 1er emplacement pour les instructions graphiques suivantes. Les numéros des graphes sont comptés par
ligne.
•pyplot.subplot(211) : c'est une alternative à pyplot.subplot(2,1,1), dans le cas ou les dimensions et le numéro de
graphe sont tous inférieurs à 10 !
•si on ne fait pas d'appel à subplot, par défaut, il y a un appel pyplot.subplot(111) (1 emplacement).
•pyplot.close() : ferme la figure courante. Le close est nécessaire pour libérer toutes les ressources occupées,
même si la figure n'est plus visible.
•pyplot.close(2) : ferme la figure 2.
•pyplot.close('all') : ferme toutes les figures.
34
https://enacit.epfl.ch/cours/python/scientifique/matplotlib.html
35
36
Qu'est-ce que Pandas ?
37
Pourquoi utiliser Panda Python ?
Maintenant que le mystère est levé sur ce que c’est que Pandas et son importance dans le domaine de la data,
nous détaillerons dans cette partie les principaux points forts de cet outil.
Ce qui fait la force de Panda est qu’elle :
§ fournit une structure de donnée appelée Dataframe rapide et efficace pour la manipulation des données
avec indexation intégrée ;
§ dispose d’outils pour lire et écrire dans des fichiers de différents formats (.csv, .txt, .xlsx, .sql, .hdf5,
etc…) ;
§ offre une flexibilité pour traiter les données de type hétérogènes ou manquantes ;
§ est open source ;
§ fournit une documentation très détaillée et facile à lire ;
§ est utilisée dans une grande variété de domaines universitaires et commerciaux, notamment la finance,
les neurosciences, l’économie, les statistiques, la publicité, l’analyse Web.
38
Installation de Pandas
La façon la plus simple d’installer non seulement Panda, mais aussi Python et ses packages les plus populaires
(IPython, NumPy, Matplotlib, ...) est avec Anaconda, une distribution Python multiplateforme (Linux, macOS,
Windows) pour l’analyse de données et le calcul scientifique.
Nous utiliserons l’outil Jupyter Notebook pour écrire nos codes. Il est intégré directement dans Anaconda.
Après l’installation de Pandas et pour commencer à l’utiliser, vous devez l’importer dans votre script comme suit :
import pandas as pd
39
Les principales structures de données de Python Panda
Pandas fournit généralement deux structures de données pour manipuler les données, ce sont : les Series et
les Dataframe.
Les series:
Une série est un tableau étiqueté unidimensionnel pouvant contenir tout type de données (entiers, chaînes de
caractères, nombres à virgule flottante, objets Python, etc.). Les étiquettes des axes représentent l’index de la
série. Pour être plus simple, une série n’est rien d’autre qu’une colonne dans une feuille Excel. La méthode de
base pour créer une série est la suivante :
40
La Dataframe Pandas est puissante car :
41
import pandas as pd
notes = {"Mathématiques": 19, "Français": 12, "Dessin": 15}
ser = pd.Series(notes)
print(ser)
print (ser.index) #affiche l'index de la série
print (ser.array) #affiche la data de la série
print("Meilleure note {}".format(ser["Mathématiques"]))
#vérifie si l'étiquette Sciences Physiques est présente dans
l'index
a = "Sciences Physiques" in ser
print(a)
42
43
44
Création d’un objet Series grâce à un ndarray
Si data est un ndarray, l’index passé en paramètre doit être de la même longueur que data. Si aucun index
n’est passé, un index sera créé avec les valeurs [0, …, len(data) – 1].
Prenons un autre exemple en créant un objet Series représentant le nombre d’habitants de trois pays :
45
La Dataframe : la structure de données la plus puissante de Pandas
La Dataframe est une structure de données qui organise les données en lignes et en colonnes, ce qui en fait une structure de données
bidimensionnelle. Vous pouvez l’imaginer comme une feuille de calcul ou une table SQL, ou encore un dictionnaire d’objets Series. C’est
généralement l’objet pandas le plus utilisé. Comme une série, un Dataframe peut être construit à partir de nombreux types différents :
• Un numpy.ndarray bidimensionnelle ;
• Un ndarray strucuré ;
• Une série ;
46
La Dataframe Pandas est puissante car :
• Elle peut facilement charger des données provenant de différentes sources de données et de différents
formats de données ;
• Elle vous permet de réaliser facilement des statistiques et répondre à des questions sur les données, telles que
: Quelle est la moyenne, la médiane, le maximum ou le minimum de chaque colonne ? Y a-t-il une corrélation
entre la colonne A et la colonne B ? À quoi ressemble la distribution des données de la colonne C ? ;
• Elle facilite également le nettoyage les données en supprimant les valeurs manquantes et en filtrant les lignes
ou les colonnes selon certains critères
• Elle permet de visualiser les données avec l’aide de Matplotlib. Tracez des barres, des lignes, des
histogrammes, des bulles, etc. ;
• Elle permet de stocker les données nettoyées et transformées dans un CSV, un autre fichier ou une base de
données.
• Vous pouvez définir vos propres fonctions Python pour certaines tâches de calcul et les appliquez aux données
de vos Dataframes.
47
Dataframe
48
Dataframe
49
Création d’une Dataframe à partir d’un dictionnaire de séries
import pandas as pd
notes = {
"Mathématiques": pd.Series([18.0, 20.0, 17.0], index=["Sylvie", "Gilles",
"Sylvain"]),
"Sciences Physiques": pd.Series([15.0, 7.0, 10.0,20.0],index=["Sylvie", "Gilles",
"Sylvain", "Thomas"]), }
df = pd.Dataframe(notes)
df
50
Création d’une Dataframe à partir d’un dictionnaire de ndarray ou de liste
• Les ndarrays doivent tous être de la même longueur. Si un index est passé, il doit aussi être de la même
longueur que les tableaux. Si aucun index n’est passé, le résultat sera range(n), où n est la longueur du
tableau.
import pandas as pd
data = {"Prenom": ["Sylvie", "Gilles", "Sylvain", "Thomas"], "Age": [18.0, 23.0,
25.0, 40.0]}
df = pd.Dataframe(data)
print(df)
51
Sélection des données
Il existe principalement trois méthodes d’accès spécifiques à Pandas :
• L’opérateur d’indexation [] ;
• Les méthodes fournis par Pandas .loc() et .iloc() ;
• Utiliser l’opérateur d’indexation.
import pandas as pd
notes = {"Mathématiques": 19, "Français": 12, "Dessin": 15, "Sciences Physiques": 18, "Biologie": 17}
ser = pd.Series(notes)
print(ser[-2])
print("*********************")
print(ser[2:])
print("*********************")
print(ser["Français": "Biologie"])
• loc() fait référence l’étiquette.
• iloc() fait référence à l’indice de position.
• Si nous reprenons l’objet Series définit ci-dessus, les instructions suivantes :
print(fleurs.loc[1])
print(fleurs.iloc[1])
52
Accès aux données d’un Dataframe
import pandas as pd
notes = pd.Dataframe({
"Mathématiques": pd.Series([18.0, 20.0, 17.0], index=["Sylvie", "Gilles",
"Sylvain"]),
"Sciences Physiques": pd.Series([15.0, 7.0, 10.0,20.0],index=["Sylvie",
"Gilles", "Sylvain", "Thomas"]),
})
notes["Mathématiques"] #accès à la colonne Mathématiques
53
Les opérations possibles sur un Dataframe
54
La méthode .describe()
• La méthode describe() est utilisée pour fournir toutes les informations
essentielles sur la dataframe, qui peuvent être utilisées pour l’analyse des
données et pour dériver différentes hypothèses mathématiques pour une
étude plus approfondie. La fonction DataFrame describe() fonctionne dans
la partie statistique de la bibliothèque Pandas.
• print(df_notes.describe());
55
Les opérations de filtrage, groupage et de concaténation
import pandas as pd
df_notes = pd.DataFrame({
"Introduction au Big data": pd.Series([11.0, 15.0, 10.0,10.0],index=["Sylvie", "Gilles", "Sylvain",
"Thomas"]),
"Hadoop": pd.Series([18.0, 20.0, 17.0,18.0], index=["Sylvie", "Gilles", "Sylvain", "Thomas"]),
"Spark": pd.Series([15.0, 7.0, 10.0,20.0],index=["Sylvie", "Gilles", "Sylvain", "Thomas"]),
"Java": pd.Series([18.0, 20.0, 10.0,8.0],index=["Sylvie", "Gilles", "Sylvain", "Thomas"]), })
df_notes
resultat = df_notes[(df_notes['Java']>=15)]
print(resultat.Java)
resultat = df_notes[(df_notes['Java']>=15)&(df_notes['Spark']>=10)]
print(resultat[["Spark", "Java"]])
La fonction groupby() est l’une des fonctions les plus utiles lorsqu’il s’agit de traiter des dataframes volumineux dans Pandas.
Une opération groupby consiste généralement à diviser la dataframe, à appliquer une fonction et à combiner les résultats.
df.groupby(['Région', 'Université']).mean()
56
L’opération de concaténation
import pandas as pd # Création de deux Dataframes
df1 = pd.DataFrame({'Nom': ['Gilles', 'Sylvain'], 'Age': [25, 28]})
df2 = pd.DataFrame({'Profession': ['Etudiant', 'Entrepreneur'],
'Statut Matrimoniale': ['Célibataire', 'Marié']})
# Affichage des dataframes
print("DataFrame df1:\n")
print(df1)
print("\nDataFrame df2:\n")
print(df2)
# Concaténation horizontale des dataframes
df_concat = pd.concat([df1, df2],axis=1)
# Affichage du résultat
print("\nRésultat de la concaténation:\n", df_concat)
57
Lire un fichier avec Pandas
• import pandas as pd df = pd.read_csv(path_to_file)
df = pd.read_csv("https://ndownloader.figshare.com/files/2292172") df
data = pd.read_excel("fichier_sauvegarde.xlsx")
58
Lire un fichier avec Pandas
59
Lire un fichier avec Pandas
60
Lire un fichier avec Pandas
61
Lire un fichier avec Pandas
62