LAB 3: Data Preprocessing/preparation des données¶

Preprocessing: Apprendre a préparer un data set avant de construire le model de ML. Dans cette section nous allons :

  • Importer les librairies ;
  • Importer le data set ;
  • Extraire les predicteurs et la cible ;
  • Gérer les données manquantes ;
  • Gérer les variables catégoriques ;
  • Diviser le jeu de données en Training set et Test set ;
  • Appliquer le feature scaling (le mise des données sous la même échelle)

1- Importer les librairies

In [1]:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

2- Importer le data set puis extraire la matrice des variables dépendantes et le vecteur des de la variable indépendante

In [2]:
# Importer le data set
dataset = pd.read_csv('Data.csv')
dataset.head()
Out[2]:
Country Age Salary Purchased
0 France 44.0 72000.0 No
1 Spain 27.0 48000.0 Yes
2 Germany 30.0 54000.0 No
3 Spain 38.0 61000.0 No
4 Germany 40.0 NaN Yes
  • Variables indépendantes- explicative- feature : country, age, salary informations sur des clients d’une entreprise.
  • Variables dépendante - a predire: purshased ; le client à acheter ou non un produit

3- Extraire les predicteurs et la cible

In [3]:
# extraire la matrice des variables indépendantes et le vecteur des de la variable dépendante
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
In [4]:
X
Out[4]:
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, nan],
       ['France', 35.0, 58000.0],
       ['Spain', nan, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)
In [5]:
y
Out[5]:
array(['No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes'],
      dtype=object)

3- # Gérer les données manquantes

  • Données distribuées selon une loi normale et absence d'outliers, imputer par la moyenne
  • dans le cas contraire imputer par la médiane
In [6]:
dataset.dtypes
Out[6]:
Country       object
Age          float64
Salary       float64
Purchased     object
dtype: object
In [8]:
# importer la classe Imputer
from sklearn.impute import SimpleImputer
In [9]:
# instancier la classe SimpleImputer en précisant la stratégie d'imputation
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
In [10]:
# Lier l'objet imputer aux colonnes de X à imputer 
imputer.fit(X[:, 1:3])
Out[10]:
SimpleImputer()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
SimpleImputer()
In [11]:
# remplacer les valeurs manquantes par la moyenne des colonnes
X[:, 1:3] = imputer.transform(X[:, 1:3])

# imputer.fit_transform(X, fit_params) Mieux !!!
In [12]:
X
Out[12]:
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, 63777.77777777778],
       ['France', 35.0, 58000.0],
       ['Spain', 38.77777777777778, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)

4- # Gérer les variables catégoriques ;

Pourquoi ? : Les modelés ML sont basés sur des équations mathématiques qui implémentent difficilement les variables non numériques

In [13]:
dataset.dtypes
Out[13]:
Country       object
Age          float64
Salary       float64
Purchased     object
dtype: object
In [14]:
# importer les classes LabelEncoder et OneHotEncoder
from sklearn.preprocessing import LabelEncoder ,OneHotEncoder
from sklearn.compose import ColumnTransformer
In [15]:
X[:, 0]
Out[15]:
array(['France', 'Spain', 'Germany', 'Spain', 'Germany', 'France',
       'Spain', 'France', 'Germany', 'France'], dtype=object)
In [16]:
# creer une instance de LabelEncoder pour la variable categorique de X
labelencoder_X = LabelEncoder()
In [17]:
# fiter et transformer sur la colonne a transformer. il transforme la variable 
#catégorique a trois niveau en valeurs numérique 0 - 1- 2 pour utiliser OneHotEncoder 
#qui ne travail qu’avec des variables numériques

X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
In [18]:
X[:, 0]
Out[18]:
array([0, 2, 1, 2, 1, 0, 2, 0, 1, 0], dtype=object)
In [19]:
# instancier OneHotEncoder pour l'encodager sous forme de demie variable 0 entre crocher pour l'indice la/des colonnes a encoder
columntransformer = ColumnTransformer([("Country",OneHotEncoder(),[0])],remainder='passthrough')
In [20]:
# fiter puis transformer 
X = columntransformer.fit_transform(X)
In [21]:
X
Out[21]:
array([[1.0, 0.0, 0.0, 44.0, 72000.0],
       [0.0, 0.0, 1.0, 27.0, 48000.0],
       [0.0, 1.0, 0.0, 30.0, 54000.0],
       [0.0, 0.0, 1.0, 38.0, 61000.0],
       [0.0, 1.0, 0.0, 40.0, 63777.77777777778],
       [1.0, 0.0, 0.0, 35.0, 58000.0],
       [0.0, 0.0, 1.0, 38.77777777777778, 52000.0],
       [1.0, 0.0, 0.0, 48.0, 79000.0],
       [0.0, 1.0, 0.0, 50.0, 83000.0],
       [1.0, 0.0, 0.0, 37.0, 67000.0]], dtype=object)
In [22]:
# instancier LabelEncoder pour y
labelencoder_y = LabelEncoder()
# fiter et transformer
y = labelencoder_y.fit_transform(y)
In [23]:
y
Out[23]:
array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1])
In [24]:
# Diviser le dataset entre le Training set et le Test set
# importer la fonction train_test_split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
In [25]:
X_train
Out[25]:
array([[0.0, 1.0, 0.0, 40.0, 63777.77777777778],
       [1.0, 0.0, 0.0, 37.0, 67000.0],
       [0.0, 0.0, 1.0, 27.0, 48000.0],
       [0.0, 0.0, 1.0, 38.77777777777778, 52000.0],
       [1.0, 0.0, 0.0, 48.0, 79000.0],
       [0.0, 0.0, 1.0, 38.0, 61000.0],
       [1.0, 0.0, 0.0, 44.0, 72000.0],
       [1.0, 0.0, 0.0, 35.0, 58000.0]], dtype=object)
In [26]:
X_test
Out[26]:
array([[0.0, 1.0, 0.0, 30.0, 54000.0],
       [0.0, 1.0, 0.0, 50.0, 83000.0]], dtype=object)
In [27]:
y_train
Out[27]:
array([1, 1, 1, 0, 1, 0, 0, 1])
In [28]:
y_test
Out[28]:
array([0, 0])

6- mise à l'echelle

In [29]:
# pour le feature scaling importons la classe StandardScaler
from sklearn.preprocessing import StandardScaler
In [30]:
# instancier StandardScaler
sc = StandardScaler()
In [31]:
# fiter et transformer le training et le test set
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)
In [32]:
X_train
Out[32]:
array([[-1.        ,  2.64575131, -0.77459667,  0.26306757,  0.12381479],
       [ 1.        , -0.37796447, -0.77459667, -0.25350148,  0.46175632],
       [-1.        , -0.37796447,  1.29099445, -1.97539832, -1.53093341],
       [-1.        , -0.37796447,  1.29099445,  0.05261351, -1.11141978],
       [ 1.        , -0.37796447, -0.77459667,  1.64058505,  1.7202972 ],
       [-1.        , -0.37796447,  1.29099445, -0.0813118 , -0.16751412],
       [ 1.        , -0.37796447, -0.77459667,  0.95182631,  0.98614835],
       [ 1.        , -0.37796447, -0.77459667, -0.59788085, -0.48214934]])
In [33]:
X_test
Out[33]:
array([[ 0.,  0.,  0., -1., -1.],
       [ 0.,  0.,  0.,  1.,  1.]])

Formateur - M ASSOHOUN E Stanislas

In [ ]: