Корреляция между частотой текстовых элементов в наборе данных - PullRequest
0 голосов
/ 09 мая 2019

Попытка найти корреляцию между элементами, которые структурированы в один ряд набора данных.Хочу найти корреляцию частоты между наборами предметов.

Я должен признать, что я полностью потерян, и я пытался поискать в Google, чтобы найти решения в течение почти 6 часов на данный момент.

Попытка проиллюстрировать данные ниже:

#create a table
data = {'Customer': [1, 2, 3, 4],
    'Order': ['1 Hamburger, 1 Soda',
              '1 Soda, 1 Hamburger,  1 Fries',
              '1 Pizza, 2 Soda',
              '1 Soda, 1 Ice Cream']}

Таблица:

   Customer Order
0   1       1 Hamburger, 1 Soda
1   2       1 Soda, 1 Hamburger, 1 Fries
2   3       1 Pizza, 2 Soda
3   4       1 Soda, 1 Ice Cream

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

new = df["Order"].str.split(",", n = -1, expand = True) 
new.columns.astype('str')
new.rename(columns=lambda x: 'Item'+str(x), inplace=True)

После разделения элементов в столбце заказа я удалил число перед элементами, с помощью этого:

for i in list(new):
new[i] = new[i].map(lambda x: x.lstrip()[1:] if x is not None else None)

Которыйвозвращает эту таблицу:

    Item0     Item1       Item2
0   Hamburger Soda        None
1   Soda      Hamburger   Fries
2   Pizza     Soda        None
3   Soda      Ice Cream   None

Пока все хорошо (я думаю), теперь возникает проблема.

Я хочу посмотреть, как часто, например, Гамбургер и Сода покупаются вместе.Что в ответе означает, что я могу посмотреть на корреляцию между элементами, так что я могу видеть, например, как соотносятся Гамбургер и Фрис.

Пока я думаю, что решение может быть чем-то вроде этого (Пришлось составить таблицувручную, так как я не нашел способа сделать это в Пандах):

example = {'Hamburger': [1,1,0,0],
          'Soda': [1,1,1,1],
          'Pizza': [0,0,1,0],
          'Fries': [0,1,0,0],
          'Ice Cream': [0,0,0,1]}


    Hamburger   Soda    Pizza   Fries   Ice Cream
0   1           1       0       0       0
1   1           1       0       1       0
2   0           1       1       0       0
3   0           1       0       0       1

Есть ли хороший способ показать соотношение предметов?

Нужно ли конвертировать его?Например, в 0 и 1, как я делал в приведенной выше таблице, если так, что было бы лучше, если бы, скажем, набор данных составлял 1 миллион строк?

Меня также беспокоит эффект неравномерного количестваэлементов в строке, будет ли результат искажаться из-за различий в строках?

Например, в приведенной выше таблице Гамбургер и Сода находятся в строке 1, в то время как в строке 2 он также включает фри, какчто влияет на корреляцию?

1 Ответ

1 голос
/ 09 мая 2019

Лучший способ создать эту таблицу - сделать:

pd.get_dummies(your_table)

Для получения корреляции вы делаете:

your_table.corr()

Чтобы построить вашу корреляцию, вы должны:

import seaborn as sns
sns.heatmap(your_table.corr())

Если клиент покупает гамбургер с газировкой и картофель фри большую часть времени, то у человека будет высокая корреляция между гамбургером, газировкой и гамбургером, картофелем фри. Если в гамбургере будет меньше картофеля-фри и больше газировки, тогда у соды будет высокая корреляция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...