2015-03-23 16 views
7

Mam zestaw danych, który ma kilka kolumn z kategorycznych danych.Pandy: get_dummies vs kategorialne

Używam funkcji kategorialnej do zamiany wartości kategorycznych na wartości liczbowe.

data[column] = pd.Categorical.from_array(data[column]).codes 

Niedawno natknąłem się na funkcję pandas.get_dummies. Czy są wymienne? Czy istnieje przewaga korzystania z jednego na drugim?

+1

Jeśli chcesz tylko do konwersji wartości numerycznych dla sklearn dlaczego nie [DictVectoriser] (http://scikit-learn.org/ stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html)? – EdChum

+1

Szczerze mówiąc, Ed, ponieważ nie wiedziałem, że istnieje :) –

+0

Prawdopodobnie okaże się, że sklearn ma większość twoich potrzeb przetwarzania danych – EdChum

Odpowiedz

5

Dlaczego konwertujesz kategoryczne dane na liczby całkowite? Nie wierzę, że oszczędzasz pamięć, jeśli to jest twój cel.

df = pd.DataFrame({'cat': pd.Categorical(['a', 'a', 'a', 'b', 'b', 'c'])}) 
df2 = pd.DataFrame({'cat': [1, 1, 1, 2, 2, 3]}) 

>>> df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 6 entries, 0 to 5 
Data columns (total 1 columns): 
cat 6 non-null category 
dtypes: category(1) 
memory usage: 78.0 bytes 

>>> df2.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 6 entries, 0 to 5 
Data columns (total 1 columns): 
cat 6 non-null int64 
dtypes: int64(1) 
memory usage: 96.0 bytes 

Kody kategoryczne są po prostu liczbami całkowitymi dla unikatowych pozycji w danej kategorii. Natomiast get_dummies zwraca nową kolumnę dla każdego unikalnego elementu. Wartość w kolumnie wskazuje, czy rekord ma ten atrybut.

>>> pd.core.reshape.get_dummies(df) 
Out[30]: 
    cat_a cat_b cat_c 
0  1  0  0 
1  1  0  0 
2  1  0  0 
3  0  1  0 
4  0  1  0 
5  0  0  1 

Aby uzyskać kody bezpośrednio, można użyć:

df['codes'] = [df.cat.codes.to_list()] 
+1

Dzięki Aleksander, faktycznie przygotowuję zbiór danych do regresji Losowego Lasu, więc Potrzebuję wszystkiego, by być numerycznym. W rzeczywistości okazuje się, że get_dummies da mi błędy pamięci, natomiast kategoryczne nie będzie to –

+0

To nie jest odpowiedź na drugą część pytania, która była kluczową częścią, jak sądzę: niedawno natknąłem się na pandas.get_dummies funkcjonować. Czy są wymienne? Czy istnieje przewaga korzystania z jednego na drugim? – Geeocode

+0

Druga część pytania nie jest pytaniem programistycznym. Algorytm uczenia maszynowego interpretuje kategoryczne dane w 'df2' jako mające kolejność (np. Zielony jest większy niż czerwony). To, czy jest to pożądane, zależy od twojego przypadku użycia. Aby obejść ten problem, zmienne typu "dummy" (inaczej "One-Hot-Encoding") tworzą nowe funkcje dla każdej z kategorii jakościowych. – Alexander