Normalizacja danych

Normalizacja danych polega na przekształceniu każdego ze zmiennych w taki sposób, aby ich wartości mieściły się w określonym przedziale, najczęściej w przedziale od 0 do 1. Normalizacja danych jest często stosowana w celu zapewnienia porównywalności zmiennych o różnych skalach oraz zapobiegania zdominowaniu modelu przez zmienne o dużym zakresie wartości.

W module pandas istnieje kilka sposobów na normalizację danych.

Jednym ze sposobów jest użycie funkcji MinMaxScaler z module sklearn.preprocessing. Funkcja ta działa tak, że dla każdej kolumny danych oblicza minimalną i maksymalną wartość, a następnie dla każdej wartości w danej kolumnie oblicza jej nową wartość za pomocą wzoru:

new_value = (value - min_value) / (max_value - min_value)


import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# utworzenie ramki danych
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [10, 20, 30, 40, 50]})

# utworzenie obiektu scalera
scaler = MinMaxScaler()

# wykonanie normalizacji danych
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print(df_scaled)

       col1      col2
0  0.000000  0.000000
1  0.166667  0.166667
2  0.333333  0.333333
3  0.500000  0.500000
4  0.666667  0.666667

Innym sposobem na normalizację danych jest użycie metody apply() do przekształcenia poszczególnych kolumn za pomocą odpowiedniej funkcji. Na przykład, aby znormalizować dane z kolumny col1 tak, aby ich wartości mieściły się w przedziale od 0 do 1, można użyć następującego kodu:

import pandas as pd

# utworzenie ramki danych
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [10, 20, 30, 40, 50]})

# funkcja do normalizacji danych
def normalize(x):
    return (x - x.min()) / (x.max() - x.min())

# normalizacja danych z kolumny col1
df['col1'] = df['col1'].apply(normalize)

print(df)

       col1  col2
0  0.000000    10
1  0.166667    20
2  0.333333    30
3  0.500000    40
4  0.666667    50

Jak widzisz, dane z kolumny col1 zostały znormalizowane, natomiast dane z kolumny col2 pozostały niezmienione.