如何根据 pandas 数据框中的频率创建词云

问题描述 投票:0回答:2

我必须绘制一个词云。 “tweets.csv”是一个 Pandas 数据框,其中有一列名为“文本”。绘制的图表并不是基于最常见的词,艰难。单词大小如何与它们在数据框中的频率相关联?

text = df_final.text.values
wordcloud = WordCloud(
    #mask = logomask,
    max_words = 1000,
    width = 600,
    height = 400,
    #max_font_size = 1000,
    #min_font_size = 100,
    normalize_plurals = True,
    #scale = 5,
    #relative_scaling = 0,
    background_color = 'black',
    stopwords = STOPWORDS.union(stopwords)
).generate(str(text))
fig = plt.figure(
    figsize = (50,40),
    facecolor = 'k',
    edgecolor = 'k')
plt.imshow(wordcloud, interpolation = 'bilinear')
plt.axis('off')
plt.tight_layout(pad=0)
plt.show()

我的数据框是这样的:

0   RT @Pontifex_pt: Temos que descobrir as riquezezas ...
1   RT @Pontifex_pt: Todos estamos em viagem rumo ...
2   RT @Pontifex_pt: Unamos as forças, em todos ...
3   RT @GeneralMourao: #Segurançapública, preocupa ...
4   RT @FIFAcom: The Brasileirao U-17 final provided ...

link to the image

python pandas dataframe frequency word-cloud
2个回答
16
投票

设置示例数据框:

import pandas as pd

df = pd.DataFrame({'word': ['how', 'are', 'you', 'doing', 'this', 'afternoon'],
                   'count': [7, 10, 4, 1, 20, 100]}) 

        word  count
0        how      7
1        are     10
2        you      4
3      doing      1
4       this     20
5  afternoon    100

word
count
列转换为
dict

  • WordCloud().generate_from_frequencies()
    需要一个
    dict
  • 使用以下方法之一
# method 1: convert to dict 
data = dict(zip(df['word'].tolist(), df['count'].tolist()))

# method 2: convert to dict
data = df.set_index('word').to_dict()['count']

print(data)

[out]: {'how': 7, 'are': 10, 'you': 4, 'doing': 1, 'this': 20, 'afternoon': 100}                                                                          

词云:

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()

使用图像蒙版:

twitter_mask = np.array(Image.open('twitter.png'))
wc = WordCloud(background_color='white', width=800, height=400, max_words=200, mask=twitter_mask).generate_from_frequencies(data_nyt)

plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.figure()
plt.imshow(twitter_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis("off")
plt.show()


0
投票

我用例子展示它,

例子: 意志-2 自由8 环 3 第三天 梦5 让-2 每3 能-2 1-3 一起-4

首先导入必要的库,

from wordcloud import WordCloud
import matplotlib.pyplot as plt

然后创建我们的单词列表,

text={'will': 2, 'freedom': 8, 'ring': 3, 'day': 3, 'dream': 5, 'let': 2, 'every': 3, 'able': 2, 'one': 3, 'together': 4}

然后创建词云对象,

wordcloud = WordCloud(width=800, height=800, margin=0,repeat=True).generate_from_frequencies(text)

您必须添加到 repeat=True 否则它不起作用。

然后生成图像,

plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.margins(x=0, y=0)
plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.