Проблема, которую вы описываете, заключается в преобразовании категориальных данных, обычно в форме строк или числовых идентификаторов, в чисто числовые данные. Я уверен, что вы знаете, что использование числовых идентификаторов имеет проблему: это приводит к ложной интерпретации, что данные имеют некоторый порядок. Как apple < orange < lime
, когда это не так.
Обычно используется однократное кодирование для получения числовых переменных индикатора. После кодирования одного столбца у вас есть N столбцов, где N - количество уникальных меток. Столбцы имеют значение 1, когда соответствующая категориальная переменная имеет это значение, и 0 в противном случае. Это особенно удобно, если в одном столбце несколько уникальных ярлыков. И у Pandas
, и у sklearn
есть такие функции, хотя они не настолько полны, как можно было бы надеяться.
Столбец "описание", который у вас есть, кажется немного хитрее, потому что он на самом деле включает в себя язык, а не только категориальные данные. Так что этот столбец нужно будет проанализировать или обработать другим способом. Хотя схема «горячего» кодирования вполне может использоваться для всех слов в описании, создавая вектор, который имеет больше единиц.
Например:
>>> import pandas as pd
>>> df = pd.DataFrame(['a', 'b', 'c', 'a', 'a', pd.np.nan])
>>> pd.get_dummies(df)
0_a 0_b 0_c
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 1 0 0
5 0 0 0
Для получения кодирования слово за словом потребуется дополнительная обработка. Этот подход рассматривает только полные значения в качестве переменных.