如何基于python中的频率和值为每个用户ID创建wordcloud图表

问题描述

我正在尝试根据单词和计数频率为每个用户创建每个单词云图,我想将单词云图像路径的输出与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()    

      

解决方法

generate_from_frequencies(data)中的data必须是类似于{'RT': 28,'Newpin': 6,'Benefit Bond': 6,'Covid': 5,...}的Python字典。 这是一种从给定的数据帧创建此类字典的方法:

import pandas as pd
import numpy as np

df = pd.DataFrame({'UID': ['ccf878ec9315','ccf878ec9315','ccf878ec9316','ccf878ec9317','ccf878ec9318','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,5,10,8,9,3,4,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()

example plot

或者,在大熊猫中完全创建字典:

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,max_words=200).generate_from_frequencies(data)
    ax.imshow(wc,interpolation='bilinear')
    ax.set_title(f'UID = {uid}')
    ax.axis('off')
plt.show()

all UIDs