Преобразование текстовых данных столбца в функции, использующие python для машинного обучения - PullRequest
3 голосов
/ 01 мая 2019

enter image description here

Левый CSV-файл содержит пять столбцов .application В столбце есть несколько типов приложений, разделенных ;.В зависимости от типа app, device и district я хочу предсказать target.Но сначала я хочу преобразовать файл в правый фрейм данных, чтобы применить машинное обучение.

Как я могу сделать это с помощью Python?

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Вам необходимо применить многократное кодирование для столбца application и одно горячее кодирование для других столбцов.

Вот мое решение!

>>> import pandas as pd
>>> import numpy as np

>>> df = pd.DataFrame({'number': np.random.randint(0,10,size=5),
                  'device': np.random.choice(['a','b'],size=5),
                  'application': ['app2;app3','app1','app2;app4', 'app1;app2', 'app1'],
                  'district': np.random.choice(['aa', 'bb', 'cc'],size=5)})

>>> df

    application device  district    number
0   app2;app3   b         aa    3
1   app1        a         cc    7
2   app2;app4   a         aa    3
3   app1;app2   b         bb    9
4   app1        a         cc    4

from sklearn.preprocessing import OneHotEncoder, MultiLabelBinarizer

lb = MultiLabelBinarizer()
# Assuming appl names are separated by ;
mhv = mlb.fit_transform(df['application'].apply(lambda x: set(x.split(';'))))
df_out = pd.DataFrame(mhv,columns=mlb.classes_)

enc = OneHotEncoder(sparse=False)
ohe_vars = ['device','district'] # specify the list of columns here
ohv = enc.fit_transform(df.loc[:,ohe_vars])
ohe_col_names = ['%s_%s'%(var,cat) for var,cats in zip(ohe_vars, enc.categories_) for cat in cats]

df_out.assign(**dict(zip(ohe_col_names,ohv.T)))

df_out

enter image description here

0 голосов
/ 01 мая 2019

Вы можете сначала прочитать в CSV, как это есть, а затем сделать все редактирование. Итак, сначала ..

   df = pd.read_csv("data.csv")

затем возьмите данные в столбце приложения и внесите их в список. Затем возьмите список, объедините его в строку и разбейте на «;» deliminator.

   col = list(df.application)
   col_join = ";".join(col)
   col_split = col_join.split(";")

Получив этот список, вы можете просмотреть и удалить дубликаты ...

   i=0
   while i < len(col_split):
      j=i+1
      while j < len(col_split):
           if col_split[i] == col_split[j]:
               del(col_split[j])
      else:
        j += 1
    i += 1

Теперь у вас есть список всех уникальных записей приложения, которые вы можете прочитать во фрейме данных для использования в качестве столбцов.

...