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.