Vous êtes sur la page 1sur 78

Chapitre 6:

Data Analysis avec Python


Lang. Prog. Evolué - BI
Outline

Introduction
NumPy
Création d’un vecteur
Extraction des valeurs d’un vecteur
Calculs sur les vecteurs
Création d’une matrice
Extraction des valeurs de matrices
Itérations
Calculs sur les matrices
Calcul matriciel
Pandas
Series
DataFrame
Matplotlib

Data Analysis

Lang. Prog. Evolué - BI, 2


Introduction

Data Analysis

Lang. Prog. Evolué - BI, 2


NumPy
Création, accès, extraction et calculs

Data Analysis

Lang. Prog. Evolué - BI, 3


NumPy

• Numpy est un package pour Python spécialisé dans la manipulation


des tableaux: array (les vecteurs et les matrices).
• Les tableaux ≪ numpy ≫ ne gère que les objets de même type
• Le package propose un grand nombre de routines pour un accès
rapide aux données (ex. recherche, extraction), pour les
manipulations diverses (ex. tri), pour les calculs (ex. calcul
statistique)
• Les tableaux ≪ numpy ≫ sont plus performants (rapidité, gestion de
la volumétrie) que les collections usuelles de Python
• Les tableaux ≪ numpy ≫ sont sous-jacents à de nombreux packages
dédiés au calcul scientifique sous Python.
Remarque: un vecteur est en réalité une matrice à 1 seule
dimension

Data Analysis

Lang. Prog. Evolué - BI, 4


NumPy: vecteurs

Data Analysis

Lang. Prog. Evolué - BI, 5


1. Création d’un vecteur

Data Analysis

Lang. Prog. Evolué - BI, 6


Création via une saisie manuelle
Importer le module
import numpy as np

Création manuelle à a = np.array([1.2,2.5,3.2,1.8])


partir d’un ensemble
de valeurs #type de la structure
print(type(a)) → ≺ class‘numpy .ndarray ′ ≻
#type des données
print(a.dtype) → float64
#nombre de dimensions
print(a.ndim) → 1 (on aura 2 si matrice, etc.)
#nombre de lignes et col
print(a.shape) → (4,) → on a tuple ! 4 cases sur la
1ère dim (n°0)
#nombre totale de valeurs
Informations sur la print(a.size) → 4, nb.lignes x nb.colonnes si matrice
structure
Data Analysis

Lang. Prog. Evolué - BI, 7


Typage des données
#création et typage implicite
a = np.array([1,2,4])
print(a.dtype) → int32

#création et typage explicite – préférable !


a = np.array([1,2,4],dtype=float)
print(a.dtype) → float64
Le typage des valeurs print(a) → [1. 2. 4.]
peut être implicite ou
explicite #un vecteur de booléens est tout à fait possible
b = np.array([True,False,True,True], dtype=bool)
print(b) → [True False True True]
Création d’un array
# la donnée peut être un objet python
d’objets complexes
a = np.array([”x”:(45,2000),”y”:(34,1500)])
(autres que les types
print(a.dtype) → object
de base) est possible
print(a) → [’x’: (45, 2000) ’y’: (34, 1500)]
Data Analysis

Lang. Prog. Evolué - BI, 8


Création d’une séquence de valeurs
#suite arithmétique de raison 1
a = np.arange(start=0,stop=10)
print(a) → [0 1 2 3 4 5 6 7 8 9], attention dernière valeur est exclue!
#suite arithmétique de raison step
a = np.arange(start=0,stop=10,step=2)
print(a) → [0 2 4 6 8]
#suite linéaire, nb. de valeurs est spécifié par num
a = np.linspace(start=0,stop=10,num=5)
print(a) → [0. 2.5 5. 7.5 10.], la dernière valeur est incluse ici!
#vecteur de valeurs identiques 1 – 1 seule dim et 5 valeurs
a = np.ones(shape=5)
print(a) → [1. 1. 1. 1. 1.]
#plus généralement – répétition 5 fois (1 dimension) de la valeur 3.2
a = np.full(shape=5,fill value=3.2)
print(a) → [3.2 3.2 3.2 3.2 3.2]

Data Analysis

Lang. Prog. Evolué - BI, 9


Chargement à partir d’un fichier - Conversions

Les données peuvent être stockées dans un fichier


texte (loadtxt pour charger, savetxt pour sauver)
#charger à partir d’un fichier
#typage explicite possible
a = np.loadtxt(”vecteur.txt”,dtype=float)
print(a) → [4. 5. 8. 16. 68. 14. 35.]

Conversion d’une collection (type standard Python) en type array de


≪ numpy ≫

#liste de valeurs
lst = [1.2,3.1,4.5]
print(type(lst)) → ≺ class‘list ′ ≻
#conversion à partir d’une liste
a = np.asarray(lst,dtype=float)
print(type(a)) → ≺ class‘numpy .ndarray ′ ≻
print(a) → [1.2 3.1 4.5]

Data Analysis

Lang. Prog. Evolué - BI, 10


Redimensionnement

Rajouter une valeur en dernière Redimensionnement explicite


position
a = np.array([1,2,3])
#vecteur de valeurs #redimensionnement
a = np.array([1.2,2.5,3.2,1.8]) #1 valeur pour vecteur, couple de
#ajouter une valeur , placée en valeurs pour matrice
dernière position a.resize(new shape=5)
a = np.append(a,10) print(a) → [1 2 3 0 0], les nouvelles
print(a) → [1.2 2.5 3.2 1.8 10.] cases mises à 0

Suppression d’une valeur via son Concaténation de 2 vecteurs


indice
#concatenation 2 vecteurs
#suppression via indice x = np.array([1,2,5,6])
b = np.delete(a,2) → une plage y = np.array([2,1,7,4])
d’indices est aussi possible z = np.append(x,y)
print(b) → [1.2 2.5 1.8 10.] print(z) → [1 2 5 6 2 1 7 4]

Data Analysis

Lang. Prog. Evolué - BI, 11


2. Extraction des valeurs
Accéder aux valeurs via des indices ou des conditions

Data Analysis

Lang. Prog. Evolué - BI, 12


Accès indicé – Plages d’indices –
v = np.array([1.2,7.4,4.2,8.5,6.3])
print(v) toutes les valeurs
#ou
print(v[:]) → noter le rôle du : , il faut lire ici début à fin
#accès indicé - première valeur
print(v[0]) → 1.2 – Noter que le 1er indice est 0 (zéro)
#dernière valeur
print(v[v.size-1]) → 6.3
#plage d’indices contigus
print(v[1:3]) → [7.4 4.2]
#extrêmes, début à 3 (non-inclus)
print(v[:3]) → [1.2 7.4 4.2]
#extrêmes, 2 à fin
print(v[2:]) → [4.2 8.5 6.3]
#indice négatif
print(v[-1]) → 6.3, dernier élément
#indices négatifs
print(v[-3:]) → [4.2 8.5 6.3], 3 derniers éléments
Data Analysis

Lang. Prog. Evolué - BI, 13


Accès indicé – Ecriture générique

#valeur n°1 à n°3 avec un pas de 1


print(v[1:4:1]) → [7.4, 4.2, 8.5]

#le pas de 1 est implicite


print(v[1:4]) → [7.4, 4.2, 8.5]

#n°0 à n°2 avec un pas de 2


print(v[0:3:2]) → [1.2, 4.2]

#le pas peut être négatif, n°3 à n°1 avec un pas de -1


print (v[3:0:-1]) → [8.5, 4.2, 7.4]

#on peut exploiter cette idée pour inverser un vecteur – ou bien utiliser
flip()
print(v[::-1]) #ou new v=np.flip(v) → [6.3, 8.5, 4.2, 7.4, 1.2]

Data Analysis

Lang. Prog. Evolué - BI, 14


Accès par conditions – Indiçage booléen
#extraction avec un vecteur de booléens
#si b trop court, tout le reste est considéré False
#si b trop long, erreur
v = np.array([1.2,7.4,4.2,8.5,6.3])
b = np.array([False,True,False,True,False], dtype=bool)
print(v[b]) → [7.4 8.5]

#on peut utiliser une condition pour l’extraction


print(v[v ≺ 7])→ [1.2 4.2 6.3]

#parce que la condition est un vecteur de booléen


b=v≺7
print(b) → [True False True False True]
print(type(b)) → ≺ class‘numpy .ndarray ′ ≻

#on peut utiliser la fonction extract()


print(np.extract(v ≺ 7, v ))→ [1.2 4.2 6.3]

Data Analysis

Lang. Prog. Evolué - BI, 15


Tri et recherche

#recherche valeur max


print(np.max(v)) → 8.5

#recherche indice de valeur max


print(np.argmax(v)) → 3

#tri des valeurs


print(np.sort(v)) → [1.2 4.2 6.3 7.4 8.5]

#récupération des indices triés


print(np.argsort(v)) → [0 2 4 1 3]

#valeurs distinctes
a = np.array([1,2,2,1,1,2])
print(np.unique(a))→ [1 2]

Data Analysis

Lang. Prog. Evolué - BI, 16


3. Calculs sur les vecteurs

Data Analysis

Lang. Prog. Evolué - BI, 17


Calculs (statistiques) récapitulatifs
#moyenne
print(np.mean(v)) → 5.52

#médiane
print(np.median(v)) → 6.3

#variance
print(np.var(v)) → 6.6856

#quantile
print(np.percentile(v,50)) → 6.3 (50% = médiane)

#somme
print(np.sum(v)) → 27.6

#somme cumulée
print(np.cumsum(v)) → [1.2 8.6 12.8 21.3 27.6]

Data Analysis

Lang. Prog. Evolué - BI, 18


Calculs entre vecteurs
Les calculs se font élément par élément (elemenstwise) entre vecteurs
≪ numpy ≫

#calculs entre vecteurs


x = np.array([1.2,1.3,1.0])
y = np.array([2.1,0.8,1.3]) #opérations logiques
#multiplication a = np.array([True,True,False,True])
print(x*y) → [2.52 1.04 1.3] b = np.array([True,False,True,False])
#addition
print(x+y) → [3.3 2.1 2.3] #ET logique
#multiplication par un scalaire np.logical and(a,b)
print(2*x) → [2.4 2.6 2. ] → [True False False False]

#comparaison de vecteurs #OU exclusif logique


x = np.array([1,2,5,6]) np.logical xor(a,b)
y = np.array([2,1,7,4]) → [False True True True]
b=x≻y
print(b) → [False True False True]
Data Analysis

Lang. Prog. Evolué - BI, 19


Fonctions matricielles
x = np.array([1.2,1.3,1.0])
y = np.array([2.1,0.8,1.3])

#produit scalaire
z = np.vdot(x,y)
print(z) → 4.86
Principe: Des fonctions
#ou l’équivalent calculé
spécifiquement matricielles
print(np.sum(x*y)) → 4.86
existent, certaines
s’appliquent à des vecteurs
#norme d’un vecteur
n = np.linalg.norm(x)
print(n) → 2.03

#ou l’équivalent calculé


import math
print(math.sqrt(np.sum(x**2))) → 2.03
Data Analysis

Lang. Prog. Evolué - BI, 20


Opérations ensemblistes

#opérations ensemblistes
x = np.array([1,2,5,6])
y = np.array([2,1,7,4])

#intersection Principe: Un vecteur


print(np.intersect1d(x,y)) → [1 2] de valeurs (surtout
entières) peut être
#union – attention, ce n’est pas une concaténation considéré comme un
print(np.union1d(x,y)) → [1 2 4 5 6 7] ensemble de valeurs.

#différence c.à-d. qui sont dans x et pas dans y


print(np.setdiff1d(x,y)) → [5 6]

Data Analysis

Lang. Prog. Evolué - BI, 21


NumPy: matrices

Data Analysis

Lang. Prog. Evolué - BI, 22


1. Création d’une matrice

Data Analysis

Lang. Prog. Evolué - BI, 23


Création via une saisie manuelle

Importer le module import numpy as np


Création manuelle à
partir d’un ensemble a = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])
de valeurs
  #type de la structure
1.2 2.5 print(type(a)) → ≺ class‘numpy .ndarray ′ ≻
3.2 1.8
#type des données
1.1 4.3 print(a.dtype) → float64
#nombre de dimensions
print(a.ndim) → 2 (car c’est une matrice)
#nombre de lignes et col
print(a.shape) → (3,2) → 3 lignes et 2 colonnes →
#nombre totale de valeurs
Informations sur la print(a.size) → 6, nb.lignes x nb.colonnes
structure

Data Analysis

Lang. Prog. Evolué - BI, 24


Typage des données

#print de l’ensemble
print(a)

Affichage d’une matrice dans


la console (IPython)

#création et typage implicite


a = np.array([[1,2],[4,7]])
Le typage des valeurs peut
print(a.dtype) → int32
être implicite ou explicite
#création et typage explicite – préférable !
a = np.array([[1,2],[4,7]],dtype=float)
print(a.dtype) → float64

Data Analysis

Lang. Prog. Evolué - BI, 25


Création d’une matrice à partir d’une séquence de
valeurs (1)

#un vecteur peut être converti en


#création à partir d’une séquence matrice
attention les dim. doivent être com- a = np.array([2.1,3.4,6.7,8.1,3.5,7.2])
patibles print(a.shape) → (6,)
a = np.arange(0,10).reshape(2,5) redim. en 3 lignes x 2 col.
print(a) b = a.reshape(3,2)
print(b.shape) → (3, 2)
print(b)

arange() génère une séquence de


valeurs, 0 à 9.
reshape() se charge de les
réorganiser en matrice 2 lignes et 5
colonnes.
Data Analysis

Lang. Prog. Evolué - BI, 26


Création d’une matrice à partir d’une séquence de
valeurs (2)

#matrices de valeurs identiques


#ex. pour une initialisation
a = np.zeros(shape=(2,4))
print(a)

#plus généralement
a = np.full(shape=(2,4),fill value=0.1)
print(a)

Data Analysis

Lang. Prog. Evolué - BI, 27


Chargement à partir d’un fichier - Conversions
#charger à partir d’un fichier, typage explicite
#séparateur de colonne = tabulation ≪\t≫
a = np.loadtxt(”matrice.txt”,delimiter=”\t”)
print(a)

La première ligne doit


être ignorée dans ce #liste de valeurs
fichier, d’où le lst = [1.2,3.1,4.5,6.3]
symbole en début de print(type(lst)) → ≺ class‘list ′ ≻
1ère ligne. #conversion à partir d’une liste : 2 étapes asarray()
et reshape()
Conversion d’une a = np.asarray(lst,dtype=float).reshape(2,2)
collection (type print(a)
standard Python) en
type array de
≪ numpy ≫
Data Analysis

Lang. Prog. Evolué - BI, 28


Redimensionnement (1)

#matrice de valeurs
a = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])
Accoler le
#ajouter une ligne – marche pour la concaténation de ma-
vecteur b en
trices
tant que
nouvelle ligne b = np.array([[4.1,2.6]])
(axis = 0) de c = np.append(a,b,axis=0)
la matrice a print(c)

Accoler le
vecteur d en #ajouter une colonne
tant que d=
nouvelle np.array([[7.8],[6.1],[5.4]])
colonne (axis print(np.append(a,d,axis=1))
= 1) de la
matrice a
Data Analysis

Lang. Prog. Evolué - BI, 29


Redimensionnement

Insertion de b
en tant que #insertion
nouvelle ligne print(np.insert(a,1,b,axis=0))
(axis = 0) à la
position n°1

Suppression de #suppression
la ligne (axis print(np.delete(a,1,axis=0))
= 0) via son
indice (n°1)
#modifier la dimension
d’une matrice existante
#parcourt les données lignes
par ligne
Redimensionnement h =
d’une matrice np.resize(a,new shape=(2,3))
print(h)
Data Analysis

Lang. Prog. Evolué - BI, 30


2. Extraction des valeurs

Data Analysis

Lang. Prog. Evolué - BI, 31


Accès indicé – Plages d’indices (1)

v = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])

#affichage de la structure dans son ensemble


print(v)

#accès indicé - première valeur


print(v[0,0]) → 1.2

#dernière valeur – noter l’utilisation de shape (qui est un tuple)


print(v[v.shape[0]-1,v.shape[1]-1]) → 4.3

#autre solution pour affichage de toutes les valeurs, noter le rôle des :
print(v[:,:])

Data Analysis

Lang. Prog. Evolué - BI, 32


Accès indicé – Plages d’indices (2)

#plage d’indices contigus : lignes 0 à 1 (2 non in-


clus), toutes les colonnes
print(v[0:2,:])
#extrêmes, début to 2 (non-inclus)
print(v[:2,:])
#extrêmes, lignes 1 à dernière
print(v[1:,:])
#indice négatif – dernière ligne et toutes les
colonnes
print(v[-1,:])
#indices négatifs – deux dernières lignes et toutes
les colonnes
print(v[-2:,:])

Data Analysis

Lang. Prog. Evolué - BI, 33


Accès par conditions – Indiçage booléen (1)

#indiçage par vecteur de booléens


#si b trop court, tout le reste est considéré False
si b trop long, erreur
b= np.array([True,False,True],dtype=bool)
print(v[b,:])

#exemple illustratif : extraire la ligne dont la somme est la plus petite


#calculer la somme des colonnes pour chaque ligne
s = np.sum(v,axis=1)
print(s) → [ 3.7 5. 5.4 ]
Data Analysis

Lang. Prog. Evolué - BI, 34


Accès par conditions – Indiçage booléen (2)

#repérer les lignes dont la somme est égale au minimum


#il est possible qu’il y en ait plusieurs
b = (s == np.min(s))
print(b) → [ True False False]

#application du filtre booléen


print(v[b,:])

Data Analysis

Lang. Prog. Evolué - BI, 35


Tri et recherche
#recherche valeur max des lignes (axis = 0) pour chaque colonne
print(np.max(v,axis=0)) → [ 3.2 4.3 ] – décryptage : 3.2 est la max des
lignes pour la colonne 0, 4.3 est la max des lignes pour la colonne 1
#recherche valeur max des colonnes (axis = 1) pour chaque ligne
print(np.max(v,axis=1)) → [ 2.5 3.2 4.3]
#recherche indice de valeur max des lignes (axis = 0)pour chaque colonne
print(np.argmax(v,axis=0)) → [ 1 2 ]
#tri des lignes (axis = 0) pour chaque colonne
#la relation entre les valeurs d’une même ligne est perdue !!!
print(np.sort(v,axis=0))
#récupération des indices triés
print(np.argsort(v,axis=0))

Data Analysis

Lang. Prog. Evolué - BI, 36


3. Itérations
Stratégies pour parcourir une matrice

Data Analysis

Lang. Prog. Evolué - BI, 37


Parcours d’une matrice : boucle indicées

#boucles indicées
s = 0.0
for i in range(0,v.shape[0]):
for j in range(0,v.shape[1]):
print(v[i,j])
s = s + v[i,j]
print(”Somme = ”,s)

Data Analysis

Lang. Prog. Evolué - BI, 38


Parcours d’une matrice : les itérateurs
Avec les itérateurs, nous pouvons accéder aux valeurs de la matrice sans
avoir à recourir aux indices (ligne par ligne, colonne par colonne)
#itérateur - accès ligne par ligne
s = 0.0
for x in np.nditer(v):
print(x)
s=s+x
print(”Somme = ”,s)

#itérateur - accès colonne par


colonne
#”F” pour ” Fortran order ”
s = 0.0
for x in np.nditer(v,order=”F”):
print(x)
s = s +x
print(”Somme = ”,s)
Data Analysis

Lang. Prog. Evolué - BI, 39


4. Calculs sur les matrices
Calculs statistiques

Data Analysis

Lang. Prog. Evolué - BI, 40


Calculs (statistiques) récapitulatifs

#moyenne par colonne


print(np.mean(v,axis=0)) → [1.833 2.867]
#moyenne par ligne
print(np.mean(v,axis=1)) → [1.85 2.5 2.7]
#somme cumulée des valeurs pour chaque colonne
print(np.cumsum(v,axis=0))
#matrice de corrélation
#rowvar= 0 pour indiquer que les variables
#sont organisés en colonnes
m = np.corrcoef(v,rowvar=0)
print(m)

Data Analysis

Lang. Prog. Evolué - BI, 41


Calcul le long d’un axe
gray#moyenne par colonne : [1.833 2.867]
print(np.apply along axis(func1d=np.mean,axis=0,arr=v))
#une fonction callback – étendue standardisée
def etendue std(x):
res = (np.max(x) - np.min(x))/np.std(x)
return res
#étendue normalisée par colonne : [2.171 2.374]
print(np.apply along axis(func1d=etendue std,axis=0,arr=v))
#fonction peut-être définie à la volée avec lambda
print(np.apply along axis(func1d=lambda x:(np.max(x)-
np.min(x))/np.std(x),axis=0,arr=v))
#cas où la fonction callback renvoie un vecteur
#nous obtenons une matrice. Ex. centrage-réduction
print(np.apply along axis(func1d=lambda x:(x-
np.mean(x))/np.std(x),axis=0,arr=v))

Data Analysis

Lang. Prog. Evolué - BI, 42


5. Calcul matriciel
NumPy donne sa pleine mesure pour le calcul
matriciel

Data Analysis

Lang. Prog. Evolué - BI, 43


Fonctions matricielles (1)

#transposition
print(np.transpose(x))

#multiplication
print(np.dot(x,y))

#déterminant
print(np.linalg.det(y)) → 4.21

#inversion
print(np.linalg.inv(y))

Data Analysis

Lang. Prog. Evolué - BI, 44


Fonctions matricielles (2)

#résolution d’équation
z = np.array([1.7,1.0])
print(np.linalg.solve(y,z)) → [0.8195 -0.0261]

#vérification
print(np.dot(np.linalg.inv(y),z)) → [0.8195 -0.0261]

#matrice symétrique avec XTX


s = np.dot(np.transpose(x),x)
print(s)

val. et vec. propres d’une matrice symétrique


print(np.linalg.eigh(s))

Data Analysis

Lang. Prog. Evolué - BI, 45


Pandas
Series - DataFrame

Data Analysis

Lang. Prog. Evolué - BI, 46


Pandas: Panel Data Analysis

• C’est l’une des bibliothèques les plus importantes pour lire les
données, les traiter et créer ses propres graphiques
• Les principales structures de données dans Pandas sont
implémentées avec les classes Series et DataFrame.
• series: est un tableau indexé à 1 dimension d’un type de données
fixe.
• DataFrame: est une structure de données à 2 dimensions - une table
- où chaque colonne contient des données du même type. Vous
pouvez le voir comme un dictionnaire d’instances de Series.
• Les DataFrames sont parfaits pour représenter des données réelles :
les lignes correspondent aux instances (exemples, observations, etc.)
et les colonnes correspondent aux attributs (features) de ces
instances.

Data Analysis

Lang. Prog. Evolué - BI, 47


1. Séries

Data Analysis

Lang. Prog. Evolué - BI, 48


Séries

# Import Pandas Package


import pandas as pd

• Un objet série peut être créé à partir d’une liste ou d’un tableau de
valeurs (array) ou à partir d’un dictionnaire avec des paires
clé-valeur.
• pd.Series( ): est la méthode utilisée pour créer des séries. Elle peut
prendre une liste, un tableau ou un dictionnaire comme paramètre.

Data Analysis

Lang. Prog. Evolué - BI, 49


Séries: Créer une série à partir d’une liste

Définir des index personnalisés

s2 = pd.Series([80,93,78,85,97],
Créer une série à partir d’une liste index=[’English’,’Science’,’Social’,
’Tamil’,’Maths’])
s1 = pd.Series([10,20,30,40,50])
print(”Les notes obtenues par
print(”Les valeurs de la série sont:”,
l’étudiant sont:”, s2)
s1.values)
print(”Les valeurs d’indices sont:”, ⇓
s1.index.values)
Les notes obtenues par l’étudiant
⇓ sont:
English 80
Les valeurs de série sont:
Science 93
[10 20 30 40 50]
Social 78
Les valeurs d’indices sont: [0 1 2 3 4]
Tamil 85
Maths 97
Name: Student Marks, dtype: int64
Data Analysis

Lang. Prog. Evolué - BI, 50


Séries
Indexing et Slicing (découpage) avec Séries:
La récupération et la manipulation des données sont les opérations les
plus essentielles que nous effectuons lors de l’analyse des données. Les
données stockées dans une série peuvent être récupérées à l’aide d’une
opération de découpage par crochets [ ]

# découpage en utilisant l’index en-


tier par défaut # Découpage à l’aide d’un index str
s1[1:4] s2[‘Tamil’]
⇓ ⇓
1 20 85
2 30
3 40
dtype: int64
Data Analysis

Lang. Prog. Evolué - BI, 51


Séries: Créer des séries à partir d’un dictionnaire
Un dictionnaire est une structure de données Python de base qui stocke
les données sous la forme d’un ensemble de paires clé-valeur. Une série
est également similaire à un dictionnaire dans la mesure où elle mappe
des index donnés à un ensemble de valeurs
dict fruits = { ’Orange’:80,
’Apples’:210,
’Bananas’:50,
Fruits and prices
’Grapes’:90,
Orange 80
’Watermelon’:70 }
Apples 210
# Convertissons ce dictionnaire en une série Bananas 50

fruits = pd.Series(dict fruits) Grapes 90
print(”Fruits and prices”, fruits) Watermelon 70
Le prix de grapes est: 90
# Découpez la série et récupérez le prix de
dtype: int64
Grapes
print(”Le prix de grapes est:”,
fruits[’Grapes’])
Data Analysis

Lang. Prog. Evolué - BI, 52


2. DataFrame

Data Analysis

Lang. Prog. Evolué - BI, 53


DataFrame

• Un DataFrame peut être considéré comme un tableau


multidimensionnel ou un tableau de données dans un fichier Excel. Il
s’agit d’une structure de table multidimensionnelle constituée
essentiellement d’une collection de Séries. Il nous aide à stocker des
données tabulaires où chaque ligne est une observation et les
colonnes représentent des variables.
• pd.DataFrame( ): est la fonction utilisée pour créer une trame de
données.

Data Analysis

Lang. Prog. Evolué - BI, 54


DataFrame

Un DataFrame peut être créé de plusieurs manières :

1. Créer un Dataframe à partir d’un objet Series


2. Créer un Dataframe à partir d’un objet Dictionnaire
3. Créer un DataFrame en important des données à partir d’un fichier

Data Analysis

Lang. Prog. Evolué - BI, 55


1. Créer un Dataframe à partir d’un objet Série
Un DataFrame peut être crée en passant une série (ou plusieurs) dans la
méthode de création DataFrame. Les colonnes peuvent être nommées à
l’aide du paramètre d’entrée facultatif ”columns”.

df marks = pd.DataFrame(s2, columns=[’Student1’])


print(”Le dataframe créé à partir de la série s2 est:”,df marks)

Le dataframe créé à partir de la série s2 est:


Student1
English 80
Science 93
Social 78
Tamil 85
Maths 97

Data Analysis

Lang. Prog. Evolué - BI, 56


2. créer DataFrame à partir d’un objet Dictionnaire
# Créer une série de hauteurs (in feet)
height = pd.Series([5.3, 6.2,5.8,5.0,5.5], index=[’Person 1’,’Person
2’,’Person 3’,’Person 4’,’Person 5’])

# Créer une série de poids (in kgs)


weight = pd.Series([65,89,75,60,59], index=[’Person 1’,’Person 2’,’Person
3’,’Person 4’,’Person 5’])

Les détails de la table Person


# Créer dataframe sont:
df person = pd.DataFrame(’height’: height, height weight

’weight’: weight) Person 1 5.3 65
print(”Les détails de la table Person sont:”, Person 2 6.2 89
df person) Person 3 5.8 75
Person 4 5.0 60
Person 5 5.5 59
Data Analysis

Lang. Prog. Evolué - BI, 57


3. Créer un dataframe en important des données à
partir d’un fichier

• Pandas est extrêmement utile et s’avère pratique lorsque nous


souhaitons charger des données à partir de divers formats de fichiers
tels que CSV, Excel, JSON, etc.

• Voici quelques méthodes pour lire des données dans une trame de
données (DataFrame) à partir d’autres objets de fichier:
• read table( )
• read csv( )
• read html( )
• read json( )

Data Analysis

Lang. Prog. Evolué - BI, 58


3. Créer un dataframe en important des données à
partir d’un fichier

Objectif:
Nous allons démontrer les principales méthodes en analysant un dataset
(jeu de données) de films: IMDB-Movie-Data
(lien datset: https://www.kaggle.com/PromptCloudHQ/imdb-data).

Qu’est ce qu’on va apprendre?


1. Chargement et lecture de données
2. Examiner les données de DataFrame
3. Manipuler les données de DataFrame
4. Gérer les données manquantes
5. Appliquer des fonctions

Data Analysis

Lang. Prog. Evolué - BI, 59


1. Chargement et lecture de données (1)

# Lire data à partir d’un fichier .csv


data = pd.read csv(’IMDB-Movie-Data.csv’)
data.head()

Data Analysis

Lang. Prog. Evolué - BI, 60


1. Chargement et lecture de données (2)

# lire data avec index explicite spécifié.


data indexed = pd.read csv(’IMDB-Movie-Data.csv’, index col=”Title”)
data indexed.head()

Data Analysis

Lang. Prog. Evolué - BI, 61


2. Examiner le Dataframe (1)

data.shape → (1000, 12)

data.columns

Index([’Rank’, ’Title’, ’Genre’, ’Description’, ’Director’, ’Actors’, ’Year’,
’Runtime (Minutes)’, ’Rating’, ’Votes’, ’Revenue (Millions)’, ’Metascore’],
dtype=’object’)

Data Analysis

Lang. Prog. Evolué - BI, 62


2. Examiner le DataFrame (2)

data.info()

Data Analysis

Lang. Prog. Evolué - BI, 63


2. Examiner le DataFrame (3)

La méthode describe( ) donne les résumés statistiques de base de tous les


attributs (colonnes) numériques de la base de données.

data.describe()

Data Analysis

Lang. Prog. Evolué - BI, 64


2. Examiner le DataFrame (4)

Quelques aperçus du tableau de description

• Les valeurs min et max dans ”year” représentent les années de


diffusion minimale et maximale. Nous pouvons voir que l’ensemble
de données contient des films de 2006 à 2016.

• Le ”rating” (classement) moyen (mean) pour les films de dataset


est d’environ 6,7 et le rating minimal (min) est de 1,9 et le rating
maximal (max) est de 9,0.

• Le revenu (Revenue) maximum gagné par un film est de 936,6


millions.

Data Analysis

Lang. Prog. Evolué - BI, 65


3. Manipuler les données de DataFrame (1)

Extraire des données à l’aide de colonnes:

# Extraire les données sous forme de série


genre = data [ ’Genre’ ] → retrouve les données dans la colonne ”Genre”

# Extraire les données en tant que dataframe


genre df = data [ [’Genre’ ] ]

# Extraire quelques colonnes


some cols = data [ [’Title’,’Genre’,’Actors’,’Director’,’Rating’] ]

Data Analysis

Lang. Prog. Evolué - BI, 66


3. Manipuler les données de DataFrame (2)
Extraire des données à l’aide des lignes:

loc et iloc sont deux fonctions qui peuvent être utilisées pour découper
des données à partir d’index de lignes spécifiques.
loc : localise les lignes par nom
• loc effectue un index explicite basé sur le découpage.
• Il faut des index de chaı̂ne pour récupérer les données des lignes
spécifiées
data indexed.loc[ [’Suicide Squad’] ] [ [’Genre’,’Actors’,’Director’,
’Rating’,’Revenue (Millions)’] ]
iloc: localise les lignes par index entier
• iloc effectue un découpage en fonction de l’index numérique par
défaut de Python.
#Ici, iloc est utilisé pour découper les données à l’aide d’index entiers
data.iloc[10:15] [ [’Title’,’Rating’,’Revenue (Millions)’] ]
Data Analysis

Lang. Prog. Evolué - BI, 67


3. Manipuler les données de DataFrame (4)

Sélection des données – basée sur le filtrage conditionnel

pandas permet également de récupérer des données à partir d’une


DataFrame en fonction de filtres conditionnels.

Que se passe-t-il si nous voulons sélectionner uniquement les films


sortis entre 2010 et 2016, ayant un rating (classement) inférieur à
6,0 mais supérieur en termes de revenus (Revenue)?

data [ ( ( data[ ’Year’ ] ≥ 2010)&(data[′ Year ′ ] ≤ 2016))
& (data [ ’Rating’ ] ≺ 6.0)
& (data[ ’Revenue (Millions)’ ] ≻ data[′ Revenue(Millions)′ ].quantile(0.95))]

Data Analysis

Lang. Prog. Evolué - BI, 68


Manipuler les données de DataFrame (5)

⇒ Observation: ‘The Twilight Saga: Breaking Dawn – Part 2′ and ‘The


Twilight Saga: Eclipse’ are the movies that topped in the box office,
despite having lower ratings.

Data Analysis

Lang. Prog. Evolué - BI, 69


3. Manipuler des données de DataFrame (6)

Opération Groupby :

Les données peuvent être regroupées et les opérations peuvent être


effectuées par-dessus les données regroupées à l’aide de la méthode
groupby(). Cela est pratique lorsque nous voulons appliquer des
agrégations et des fonctions au-dessus de données groupées.

data.groupby(’Director’) [ [’Rating’] ].mean().head()

Director Rating
Aamir Khan 8.5
Abdellatif Kechiche 7.8
Adam Leon 6.5
Adam McKay 7.0
Adam Shankman 6.3

Data Analysis

Lang. Prog. Evolué - BI, 70


3. Manipuler des données de DataFrame (7)
Opération de tri (sorting):

La méthode sort values( ) est utilisé pour effectuer une opération de tri
sur une colonne ou une liste de plusieurs colonnes.
Dans l’exemple ci-dessus, où nous avons répertorié le ”rating” moyen de
chaque ”director”, si nous voulons les trier de la plus élevée à la plus
basse, nous pouvons effectuer l’opération de sorting.

data.groupby(’Director’) [ [’Rating’] ].mean().sort values([’Rating’],


ascending=False).head()

Director Rating ⇒ Nous pouvons


Nitesh Tiwari 8.80 observer que le
réalisateur ”Nitesh
Christopher Nolan 8.68
Tiwari” a le rating
Makoto Shinkai 8.60
moyen le plus élevé
Olivier Nakache 8.60
dans cet ensemble de
Florian Henckel von Donnersmarck 8.50
données.
Data Analysis

Lang. Prog. Evolué - BI, 71


4. Gérer les données manquantes (missing data) (1)
Détecter les valeurs manquantes:

# Pour vérifier les valeurs nulles par ligne


data.isnull().sum()

Data Analysis

Lang. Prog. Evolué - BI, 72


4. Gérer les données manquantes (missing data) (2)

Supprimer les valeurs manquantes

# Utilisez la fonction drop pour supprimer des colonnes


data.drop(’Metascore’, axis= 1).head()

# Supprime toutes les lignes contenant des données manquantes


data.dropna()

# Supprimer toutes les colonnes contenant des données manquantes


data.dropna( axis=1 )

# nous utilisons le paramètre de seuil ”thresh” pour spécifier le nombre


minimum de valeurs non nulles pour la colonne/ligne à conserver sans
suppression.
data.dropna(axis=0, thresh=6 )

Data Analysis

Lang. Prog. Evolué - BI, 73


4. Gérer les données manquantes (missing data) (3)

Remplir (filling) les valeurs manquantes:

Nous pouvons imputer ces valeurs nulles avec mean Revenue (Millions).
fillna( ) : fonction utilisée pour remplir des valeurs nulles avec des valeurs
spécifiées
revenue mean = data indexed[’Revenue (Millions)’]mean()
print(”The mean revenue is: ”, revenue mean)
→ The mean revenue is: 82.95637614678897

# Nous pouvons remplir les valeurs nulles avec ce revenu moyen


data indexed[’Revenue (Millions)’].fillna(revenue mean, inplace=True )

⇒ Maintenant, si nous vérifions le dataframe, il n’y aura pas de


valeurs nulles dans la colonne des revenus (Revenue)

Data Analysis

Lang. Prog. Evolué - BI, 74


5. Appliquer des fonctions avec apply () (1)
La fonction apply() est pratique lorsque nous voulons appliquer n’importe
quelle fonction à l’ensemble de données. Il renvoie une valeur après avoir
passé chaque ligne de la trame de données à une fonction. La fonction
peut être intégrée ou définie par l’utilisateur.
Par exemple, si nous voulons classer les films en fonction de leurs
”ratings”, nous pouvons définir une fonction pour le faire, puis appliquer
la fonction au DataFrame comme indiqué ci-dessous.

# Classer les films en fonction de rating


def rating group(rating):
if rating ≥ 7.5 :
return ’Good’
elif rating ≥ 6.0 :
return ’Average’
else:
return ’Bad’

Data Analysis

Lang. Prog. Evolué - BI, 75


appliquer des fonctions avec apply() (2)
Maintenant, on va appliquer cette fonction à notre DataFrame et le
≪ Rating category ≫ sera calculé pour chaque ligne.

# appliquer la fonction sur le dataframe de films


# créer une nouvelle variable dans l’ensemble de données qui contient
”Rating category”
data[’Rating category’] = data[’Rating’].apply(rating group)

data [ [’Title’,’Director’,’Rating’,’Rating category’] ].head(5)

Title Director Rating Rating catego


0 Guardians of the Galaxy James Gunn 8.1 Good
1 Prometheus Ridley Scott 7.0 Average
2 Split M. Night Shyamalan 7.3 Average
3 Sing Christophe Lourdelet 7.2 Average
4 Suicide Squad David Ayer 6.2 Average

Data Analysis

Lang. Prog. Evolué - BI, 76


Matplotlib
Plot With Pandas: Python Data Visualization

Data Analysis

Lang. Prog. Evolué - BI, 77

Vous aimerez peut-être aussi