Programmation Python pour le Machine Learning
Partie 2: Statistiques descriptives et traitement de données
Pegdwendé Nicolas Sawadogo
[Link]@[Link]
Doctorant, Laboratoire ERIC, Université Lyon 2
Plan
1. Création/chargement de données
2. Descriptions de variables
3. Tableaux croisés
4. Regroupements, tris
5. Tests statistiques
1
Création/chargement de
données
Matrices/vecteurs/dataframes
Principaux types de données utilisés pour les traitements statistiques
• Vecteurs: Utilisés pour représenter des données numériques en 1
dimension (avec Numpy)
• Matrices: Utilisées pour représenter des données numériques en 2
dimensions (avec Numpy)
• Dataframes: Utilisés pour représenter des données de plusieurs types:
numériques, chaînes de caractères, dates, etc. (avec Pandas)
2
Chargement
▶ Vecteurs et Matrices
• Chargement d’un vecteur ou d’une matrice avec Numpy
data = [Link]("[Link]")
• Chargement de plusieurs colonnes dans des vecteurs
c1, c2, c3 = [Link]("[Link]", unpack=True)
▶ Dataframe
• Chargement à partir d’un fichier excel
df = pd.read_excel("[Link]", "feuil1", ...)
• Chargement à partir d’un fichier csv
df = pd.read_csv("[Link]", ";", ...)
3
Création
▶ Vecteurs:
• Valeurs prédéfinies
[Link]([1, 2, 3])
• Création par incrémentation automatique :
[Link](debut, fin, incrementation)
[Link](2, 3, 0.2) #array([ 2., 2.2, 2.4, 2.6, 2.8])
▶ Matrices:
• Valeurs prédéfinies
[Link]([[1, 2, 3], [4, 5, 6]])
• Incrémentation automatique
[Link](12).reshape(3,4)
#array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]])
• A partir d’un dataframe Pandas
df.to_numpy()
4
Descriptions de variables
Descriptions de variables
▶ Moyennes:
• Avec Numpy
[Link](data) #Moyenne de toutes les valeurs
[Link](data, axis=0) #Moyennes en lignes
[Link](data, axis=1) #Moyennes en colonnes
• Avec Pandas
[Link](axis=0) #Moyennes en lignes
[Link](axis=1) #Moyennes en colonnes
• C’est le même principe pour la variance, l’écart type, etc.
▶ Mode:
• Avec Scipy
[Link](matrice) #Mode de toutes les valeurs
[Link](matrice, axis=0) #Mode en lignes
[Link](matrice, axi=1) #Mode en colonnes
• Avec Pandas
[Link](axis=0) #Mode en lignes
[Link](axis=1) #Mode en colonnes
5
Descriptions de variables
• Aperçu des données
[Link]() #Premières lignes
[Link]() #Dernières lignes
• Description gle de toutes les variables
[Link] #Types de données
[Link]() #Distribution des données
• Description de variables quanti
df['var1'].value_counts() #distribution
df['var1'].[Link]() #histogramme
• Description de variables quali
df['var2'].describe() #distribution
df['var2'].value_counts().[Link]() #camembert
6
Tableaux croisés
Tableaux croisés
• Tableaux croisés simples
[Link](df['TABAC'], df['RONFLE'])
• Pourcentages par cellule
[Link](df['TABAC'], df['RONFLE'], normalize=True)
7
Tableaux croisés
• Profils colonnes
[Link](df['TABAC'], df['RONFLE'],
normalize="columns")
• Affichage des marges
[Link](df['TABAC'], df['RONFLE'], margins=True)
8
Regroupements, tris
Regroupements
• Regroupement + aggrégation
[Link]('SEXE')['TAILLE'].mean()
• Regroupement + aggrégations multiples
[Link]('SEXE').agg({'AGE':'max', 'POIDS':'mean',
'TABAC':'count'})
9
Tri et filtrage
• Filtrage
df[df['RONFLE']=='oui']
#Ind. dont la variable RONFLE="oui"
df[(df['RONFLE']=='oui') & (df['POIDS'] < 70)]
#ind. de moins de 70kg qui ronflent
• Tri
df.sort_values(by = ['AGE', 'POIDS'], ascending = True)
#Tri par ordre asc. de l'age, puis du poids
df.sort_values(by = ['AGE', 'POIDS'],
ascending = [True, False], inplace=True)
#Tri par ordre asc. de l'age, puis desc. du poids
10
Modification de colonnes
• Colonne issue d’une autre
[Link](RONFLE2=[Link](0,1))
• Colonne issue de la combinaison d’autres
[Link](IMC=[Link]/([Link]*[Link]/10000))
#Opérations numériques ou de chaînes de caractères
11
Recodage de modalités
• Discrétisation de variable quantitative
df["int_effectif"]=[Link]([Link], 2,
labels=["petit-eff","grand-eff"])
• Renommage de modalités
referentiel = {"Licence 3": "Licence",
"Master 1": "Master",
"Master 2": "Master"}
df["diplome_prepare"] = df["niveau"].map(referentiel)
12
Tests statistiques
Tests statistiques
• Test de normalité: Shapiro-Wilk
from [Link] import shapiro
stat, pvalue = shapiro([Link])
• Test de correlation de rang de Spearson
from [Link] import spearmanr
corr, pvalue = spearmanr([Link], [Link])
• Test du chi deux
from [Link] import chi2_contingency
table = [Link]([Link], [Link])
stat, pvalue, dof, expected = chi2_contingency(table)
• Test de comparaison de moyennes de Student
from [Link] import ttest_ind
...
stat, pvalue = ttest_ind(data1, data2)
13
Quelques ressources
• [Link] ricco/cours/slides/PI%20-
%20statistiques%20avec%[Link]
• [Link]
docs/stable/getting_started/[Link]-structures
• [Link]
• [Link]
• [Link]
python-cheat-sheet/
14