Как создать диаграмму wordcloud для каждого идентификатора пользователя на основе частоты и значения в python

Я пытаюсь создать каждый граф облака слов для каждого пользователя на основе частоты слова и подсчета, и я хочу сохранить вывод пути изображения облака слов в кадре данных вместе с UID. Нужно ли мне применять группу? Любая помощь будет высоко оценена.

|UID         |word                     |count          
=================================================
|ccf878ec9315|RT                       |28               
|ccf878ec9315|Newpin                   |6                
|ccf878ec9315|Benefit Bond             |6                
|ccf878ec9315|Covid                    |5                
|ccf878ec9315|Blues                    |5                
|ccf878ec9316|TPG                      |10               
|ccf878ec9316|Learn                    |8                
|ccf878ec9316|An                       |6                
|ccf878ec9317|GIINs Market Roadmap     |9                
|ccf878ec9317|amp                      |5                
|ccf878ec9317|Varsity                  |3                
|ccf878ec9318|International Womens Day |10               
|ccf878ec9318|Solving                  |8                
|ccf878ec9318|Hadewych                 |4                
|ccf878ec9319|GIF16                    |4               
|ccf878ec9319|Kuyper                   |9                
|ccf878ec9320|Impact Investments       |8                
|ccf878ec9320|Climate                  |3  

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

from wordcloud import WordCloud

wc = WordCloud(width=800, height=400, max_words=200).generate_from_frequencies(data)
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()    

      

person marjun    schedule 31.08.2020    source источник


Ответы (1)


data в generate_from_frequencies(data) должен быть словарем Python, подобным {'RT': 28, 'Newpin': 6, 'Benefit Bond': 6, 'Covid': 5, ...}. Вот подход к созданию такого словаря из данного фрейма данных:

import pandas as pd
import numpy as np

df = pd.DataFrame({'UID': ['ccf878ec9315', 'ccf878ec9315', 'ccf878ec9315', 'ccf878ec9315', 'ccf878ec9315',
                           'ccf878ec9316', 'ccf878ec9316', 'ccf878ec9316', 'ccf878ec9317', 'ccf878ec9317',
                           'ccf878ec9317', 'ccf878ec9318', 'ccf878ec9318', 'ccf878ec9318', 'ccf878ec9319',
                           'ccf878ec9319', 'ccf878ec9320', 'ccf878ec9320'],
                   'word': ['RT', 'Newpin', 'Benefit Bond', 'Covid', 'Blues', 'TPG', 'Learn', 'An',
                            'GIINs Market Roadmap', 'amp', 'Varsity', 'International Womens Day', 'Solving', 'Hadewych',
                            'GIF16', 'Kuyper', 'Impact Investments', 'Climate'],
                   'count': [28, 6, 6, 5, 5, 10, 8, 6, 9, 5, 3, 10, 8, 4, 4, 9, 8, 3]})
data = {wrd: cnt for wrd, cnt in zip(df['word'], df['count'])}

from wordcloud import WordCloud

wc = WordCloud(width=800, height=400, max_words=200).generate_from_frequencies(data)
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

пример графика

В качестве альтернативы, чтобы полностью создать словарь в пандах:

data = df.set_index('word')['count'].to_dict()

Чтобы создать облако слов для каждого UID:

uids = np.unique(df['UID'])

fig, axes = plt.subplots(nrows=(len(uids)+2)//3, ncols=3, figsize=(20, 8),
                         gridspec_kw={'hspace': 0.05, 'wspace': 0.05, 'left': 0.01, 'right': 0.99, 'top': 0.99, 'bottom': 0.01})for uid, ax in zip(uids, axes.ravel()):
    data = df[df['UID'] == uid].set_index('word')['count'].to_dict()

    wc = WordCloud(width=800, height=400, max_words=200).generate_from_frequencies(data)
    ax.imshow(wc, interpolation='bilinear')
    ax.set_title(f'UID = {uid}')
    ax.axis('off')
plt.show()

все UID

person JohanC    schedule 31.08.2020
comment
Спасибо. Но как мы можем применить его на основе UID? - person marjun; 31.08.2020
comment
Обновленный ответ работает для вас? Также Как сохранить облако слов как .png в python ? может оказаться полезным. - person JohanC; 31.08.2020
comment
Спасибо, Йохан, ты сэкономил мое время. - person marjun; 31.08.2020