Vous êtes sur la page 1sur 62

SCIENCES DES DONNÉES APPLIQUÉES (fONDAMENTALES)

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 NumPy and Matplotlib.

• 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 ?

• Cette plateforme comprend des objets multidimensionnels dans des ”


arrays “, et un package regroupant des outils d’intégration pour
l’implémentation Python. Pour faire simple, NumPy est un mélange entre
C et Python qu’on utilise en alternative à la programmation MATLAB
traditionnelle.
• Les données, sous forme de nombres, sont traitées en tant qu’arrays
(tableaux) pour des fonctions multidimensionnelles et des opérations de
réarrangement. Il s’agit d’un outil très utilisé dans le domaine de la Data
Science.

7
Il faut au départ importer le package numpy avec l’instruction suivante :

>>> import numpy as np

Variable pi

NumPy permet d’obtenir la valeur de 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

x**n x à la puissance n, exemple : x**2


numpy.sqrt(x) racine carrée
numpy.exp(x) exponentielle
numpy.log(x) logarithme népérien
numpy.abs(x) valeur absolue
numpy.sign(x) Signe
numpy.ceil() & numpy.floor renvoie le plafond ou plancher des
éléments du tableau

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.

array1 = [1, 0, -13]


array2 = [-1, 0, 15]
# determine the sign of integer numbers in an array
print ("\nCheck sign of array1 : ", np.sign(array1))
print ("\nCheck sign of array2 : ", np.sign(array2))
Creating a 5x5 array of zeroes

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

On voit que l’on a obtenu un objet de type numpy.ndarray.


Accès aux éléments d’un tableau
Avertissement
Comme pour les listes, les indices des éléments commencent à zéro.
>>> a[0]
1
>>> a[3] ?????
14
Tableau 2D
Il est possible de créer un tableau 2D en utilisant une liste de listes au moyen de crochets imbriqués.
Les listes internes correspondent à des lignes du tableau.
>>> b = np.array([[1, 2, 3], [4, 5, 6]])
Affichage
>>> b
array([[1, 2, 3], [4, 5, 6]])
>>> type(b)
numpy.ndarray

Accès aux éléments d’un tableau 2D


On utilise une syntaxe avec deux indices. Le premier indice est l’indice de la ligne du tableau.
>>> b[0,1]
2
>>> b[1,2]
6
15
La fonction numpy.arange()

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.

>>> m = np.arange(3, 15, 2)


>>> m
array([ 3, 5, 7, 9, 11, 13])
>>> type(m)
numpy.ndarray

Noter la différence entre numpy.arange() et range() :

•numpy.arange() retourne un objet de type numpy.ndarray.


•range() retourne un objet de type range.
>>> n = (3, 15, 2)
>>> n range(3, 15, 2)
>>> type(n)
range
16
Ceci est également à distinguer d’une liste.

>>> u = [3, 7, 10]


>>> type(u)
List

Il est possible d’obtenir des listes en combinant list et range().

>>> list(range(3, 15, 2))


[3, 5, 7, 9, 11, 13]

numpy.arange() accepte des arguments qui ne sont pas entiers.


>>> np.arange(0, 11*np.pi, np.pi) ar = np.array([range(i, i+4) for i in [4,6,9,1]])

array([ 0. , 3.14159265, 6.28318531, 9.42477796,


12.56637061, 15.70796327, 18.84955592, 21.99114858,
25.13274123, 28.27433388, 31.41592654])

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. ])

Action d’une fonction mathématique sur un tableau


NumPy dispose d’un grand nombre de fonctions mathématiques qui peuvent être appliquées directement à
un tableau. Dans ce cas, la fonction est appliquée à chacun des éléments du tableau.
>>> x = np.linspace(-np.pi/2, np.pi/2, 3)
>>> x
array([-1.57079633, 0. , 1.57079633])
>>> y = np.sin(x)
>>>
y array([-1., 0., 1.])
18
Fixed_type

Set the Data type

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 :

• figure : une figure qui peut être sauvée dans un fichier.


• axe : un graphe (graphique) individuel appartenant à une figure qui peut en compter plusieurs.
Attention, ce n'est pas un axe de coordonnées !
• axis : un axe de coordonnées appartenant à un objet axe.
• divers objets graphiques qui dérivent de la classe Artist et qui participent au graphe. Ce sont par
exemple des rectangles, des lignes, du texte. Ces différents objets peuvent être totalement
configurés (y compris individuellement) pour adapter le graphe aux besoins en appelant dessus
des méthodes pour modifier leurs propriétés !

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 :

from matplotlib import pyplot as plt


x = [5, 2, 9, 4, 7]
y = [10, 5, 8, 4, 2]
plt.plot(x,y)
plt.show()

28
Bar plot:

from matplotlib import pyplot as plt

x = [5, 2, 9, 4, 7]
y = [10, 5, 8, 4, 2]

plt.bar(x,y)
plt.show()

29
Histogramme:

from matplotlib import pyplot as plt

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 ?

Pandas est une bibliothèque open-source permettant la manipulation et l’analyse de


données de manière simple et intuitive en Python. L’une des forces de Panda est qu’il se base
sur la très populaire bibliothèque NumPy. Elle fournit diverses structures de données et
opérations pour le traitement de données numériques et de séries chronologiques. En plus
de cela, les données produites par Panda sont souvent utilisées comme données en entrée
pour les fonctions de plotting de Matplotlib, l’analyse statistique en SciPy, les algorithmes
de machine learning en Scikit-learn. Les data scientists l’utilisent pour le chargement, le
traitement et l’analyse des données tabulaires (données stockées sous format .csv, .tsv ou
.xlsx) à l’aide de requêtes de type SQL.

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

Ici, pd est considéré comme un alias de Pandas.

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 :

ser = pd.Series(data, index=index)

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 dict de ndarrays 1D, listes, dicts, ou Series ;

• Un numpy.ndarray bidimensionnelle ;

• Un ndarray strucuré ;

• Une série ;

• Ou encore un autre Dataframe.

La méthode de base pour créer une Dataframe est la suivante :

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

Les opérations de statistique (sum, mean, median, etc.)


L’objectif principal visé lorsqu’on utilise la bibliothèque pandas est d’effectuer
une analyse statistique sur un ensemble de données.
L’analyse statistique peut être utilisée pour :
• Faire ressortir les points clés d’un ensemble de données
• Résumer les informations.
• Calculer des mesures de cohérence, de pertinence ou de diversité dans les données.
• Faire des prédictions futures basées sur des données enregistrées précédemment.
df_notes.sum(axis=1)
df_notes.mean(axis=1)
df_notes.max(axis=0)

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

Vous aimerez peut-être aussi