Encoding danych

Encoding danych polega na przekształceniu zmiennych kategorycznych (np. płeć, kolor, rodzaj produktu) na liczby, aby możliwe było ich przetwarzanie przez modele numeryczne.

W module pandas istnieje kilka sposobów na encoding danych.

Jednym ze sposobów jest użycie metody get_dummies(), która tworzy nowe kolumny dla każdej unikalnej wartości zmiennej kategorycznej i przypisuje do niej wartość 1 lub 0 w zależności od tego, czy dana wartość występuje w danym wierszu.

Przykład:

import pandas as pd

# utworzenie ramki danych
df = pd.DataFrame({'col1': ['male', 'female', 'male', 'female'], 'col2': [10, 20, 30, 40]})

# encoding danych z kolumny col1
df_encoded = pd.get_dummies(df, columns=['col1'])

print(df_encoded)

   col2  col1_female  col1_male
0    10            0          1
1    20            1          0
2    30            0          1
3    40            1          0

Jak widzisz, kolumna col1 została zakodowana za pomocą dwóch nowych kolumn col1_female i col1_male, gdzie każda z nich ma wartość 1 lub 0 w zależności od tego, czy dana wartość występuje w danym wierszu.

Innym sposobem na encoding danych jest użycie metody apply() do przekształcenia poszczególnych kolumn za pomocą odpowiedniej funkcji. Na przykład, aby zakodować dane z kolumny col1 tak, żeby każda unikalna wartość była przypisana do odpowiedniej liczby, można użyć następującego kodu:

import pandas as pd

# utworzenie ramki danych
df = pd.DataFrame({'col1': ['male', 'female', 'male', 'female'], 'col2': [10, 20, 30, 40]})

# encoding danych z kolumny col1
df['col1'] = df['col1'].apply(lambda x: 1 if x == 'male' else 0)

print(df)

   col1  col2
0     1    10
1     0    20
2     1    30
3     0    40

Jak widzisz, dane z kolumny col1 zostały zakodowane tak, że wartość male jest przypisana do 1, a wartość female jest przypisana do 0.

Innym sposobem na encoding danych jest użycie funkcji LabelEncoder z module sklearn.preprocessing. Funkcja ta działa podobnie jak metoda apply(), ale pozwala na zapamiętanie mapowania zakodowanych wartości na oryginalne, co może być przydatne w przypadku konieczności późniejszego odkodowania danych.

Przykład:

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# utworzenie ramki danych
df = pd.DataFrame({'col1': ['male', 'female', 'male', 'female'], 'col2': [10, 20, 30, 40]})

# utworzenie obiektu encodera
encoder = LabelEncoder()

# encoding danych z kolumny col1
df['col1'] = encoder.fit_transform(df['col1'])

print(df)

   col1  col2
0     1    10
1     0    20
2     1    30
3     0    40

Jak widzisz, dane z kolumny col1 zostały zakodowane tak, że wartość male jest przypisana do 1, a wartość female jest przypisana do 0.