Gegevens standaardiseren in python: met voorbeelden


Het standaardiseren van een dataset betekent het schalen van alle waarden in de dataset zodat de gemiddelde waarde 0 is en de standaardafwijking 1.

We gebruiken de volgende formule om waarden in een dataset te normaliseren:

x nieuw = (x ikx ) / s

Goud:

  • x i : de i- de waarde van de dataset
  • x : De steekproefgemiddelden
  • s : de standaarddeviatie van het monster

We kunnen de volgende syntaxis gebruiken om snel alle kolommen in een pandas DataFrame in Python te normaliseren:

 (df- df.mean ())/df. std ()

De volgende voorbeelden laten zien hoe u deze syntaxis in de praktijk kunt gebruiken.

Voorbeeld 1: standaardiseer alle DataFrame-kolommen

De volgende code laat zien hoe u alle kolommen in een pandas DataFrame kunt standaardiseren:

 import pandas as pd

#create data frame
df = pd. DataFrame ({' y ': [8, 12, 15, 14, 19, 23, 25, 29],
                   ' x1 ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' x2 ': [11, 8, 10, 6, 6, 5, 9, 12],
                   ' x3 ': [2, 2, 3, 2, 5, 5, 7, 9]})

#view data frame
df

	y x1 x2 x3
0 8 5 11 2
1 12 7 8 2
2 15 7 10 3
3 14 9 6 2
4 19 12 6 5
5 23 9 5 5
6 25 9 9 7
7 29 4 12 9

#standardize the values in each column
df_new = (df- df.mean ())/df. std ()

#view new data frame
df_new

	        y x1 x2 x3
0 -1.418032 -1.078639 1.025393 -0.908151
1 -0.857822 -0.294174 -0.146485 -0.908151
2 -0.437664 -0.294174 0.634767 -0.525772
3 -0.577717 0.490290 -0.927736 -0.908151
4 0.122546 1.666987 -0.927736 0.238987
5 0.682756 0.490290 -1.318362 0.238987
6 0.962861 0.490290 0.244141 1.003746
7 1.523071 -1.470871 1.416019 1.768505

We kunnen verifiëren dat het gemiddelde en de standaardafwijking van elke kolom respectievelijk gelijk zijn aan 0 en 1:

 #view mean of each column
df_new. mean ()

y 0.000000e+00
x1 2.775558e-17
x2 -4.163336e-17
x3 5.551115e-17
dtype:float64

#view standard deviation of each column
df_new. std ()

y 1.0
x1 1.0
x2 1.0
x3 1.0
dtype:float64

Voorbeeld 2: specifieke DataFrame-kolommen normaliseren

Soms wilt u misschien alleen specifieke kolommen in een DataFrame normaliseren.

Voor veel machine learning-algoritmen wil je bijvoorbeeld alleen de voorspellende variabelen standaardiseren voordat je een bepaald model aan de gegevens toevoegt.

De volgende code laat zien hoe u specifieke kolommen in een Panda DataFrame kunt standaardiseren:

 import pandas as pd

#create data frame
df = pd. DataFrame ({' y ': [8, 12, 15, 14, 19, 23, 25, 29],
                   ' x1 ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' x2 ': [11, 8, 10, 6, 6, 5, 9, 12],
                   ' x3 ': [2, 2, 3, 2, 5, 5, 7, 9]})

#view data frame
df

	y x1 x2 x3
0 8 5 11 2
1 12 7 8 2
2 15 7 10 3
3 14 9 6 2
4 19 12 6 5
5 23 9 5 5
6 25 9 9 7
7 29 4 12 9

#define predictor variable columns
df_x = df[[' x1 ', ' x2 ', ' x3 ']]

#standardize the values for each predictor variable
df[[' x1 ',' x2 ',' x3 ']] = (df_x- df_x.mean ())/df_x. std ()

#view new data frame
df

         y x1 x2 x3
0 8 -1.078639 1.025393 -0.908151
1 12 -0.294174 -0.146485 -0.908151
2 15 -0.294174 0.634767 -0.525772
3 14 0.490290 -0.927736 -0.908151
4 19 1.666987 -0.927736 0.238987
5 23 0.490290 -1.318362 0.238987
6 25 0.490290 0.244141 1.003746
7 29 -1.470871 1.416019 1.768505

Merk op dat kolom „y“ ongewijzigd blijft, maar de kolommen „x1“, „x2“ en „x3“ zijn allemaal gestandaardiseerd.

We kunnen verifiëren dat het gemiddelde en de standaardafwijking van elke kolom met voorspellende variabelen respectievelijk gelijk zijn aan 0 en 1:

 #view mean of each predictor variable column
df[[' x1 ', ' x2 ', ' x3 ']]. mean ()

x1 2.775558e-17
x2 -4.163336e-17
x3 5.551115e-17
dtype:float64

#view standard deviation of each predictor variable column
df[[' x1 ', ' x2 ', ' x3 ']]. std ()

x1 1.0
x2 1.0
x3 1.0
dtype:float64

Aanvullende bronnen

Hoe kolommen in een Pandas DataFrame te normaliseren
Hoe uitschieters in Python te verwijderen
Standaardisatie of normalisatie: wat is het verschil?

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert