Я знаю, что это можно легко реализовать с помощью пакета pandas, но поскольку он слишком редок и большой (170 000 x 5000), и в конце мне нужно использовать sklearn для обработки данных снова, мне интересно, это способ сделать с sklearn. Я попробовал один горячий кодер, но застрял, чтобы связать манекены с «id».Как создать фиктивную переменную, а затем агрегировать с помощью scikit-learn?
df = pd.DataFrame({'id': [1, 1, 2, 2, 3, 3], 'item': ['a', 'a', 'c', 'b', 'a', 'b']})
id item
0 1 a
1 1 a
2 2 c
3 2 b
4 3 a
5 3 b
dummy = pd.get_dummies(df, prefix='item', columns=['item'])
dummy.groupby('id').sum().reset_index()
id item_a item_b item_c
0 1 2 0 0
1 2 0 1 1
2 3 1 1 0
Update:
Теперь я здесь, и 'идентификатор' теряется, как сделать агрегацию тогда?
lab = sklearn.preprocessing.LabelEncoder()
labels = lab.fit_transform(np.array(df.item))
enc = sklearn.preprocessing.OneHotEncoder()
dummy = enc.fit_transform(labels.reshape(-1,1))
dummy.todense()
matrix([[ 1., 0., 0.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 1., 0., 0.],
[ 0., 1., 0.]])
Вы можете сделать категории в dataframe, как вы показываете, а затем использовать метод as_matrix() для преобразования в Numpy представления массива? –
@SteveMisuta Да, я могу это сделать. Не могли бы вы объяснить причину? – Chen
@Chen Вы когда-нибудь поняли это? – Afflatus