Python可视化-generate_from_frequencies给定词频画词云图(WordCloud)

版权声明:原创文章要转载的话麻烦请dalao注明出处呢٩(๑❛ᴗ❛๑)۶ https://blog.csdn.net/MIKASA3/article/details/80066001

词云图是根据词出现的频率生成词云,词的字体大小表现了其频率大小。

〇、碎碎念

用wc.generate(text)直接生成词频的方法使用很多,所以不再赘述。

但是对于根据generate_from_frequencies()给定词频如何画词云图的资料找了很久,下面只讲这种方法。

generate_from_frequencies适用于我已知词及其对应的词频是多少,不需要自动生成的情况下。

官方文档说generate_from_frequencies函数的参数是array of tuple,但是我试了很久都不行,最后发现居然应该是dict 字典形式!

即形如:{ word1: fre1, word2: fre2,  word3: fre3,......,  wordn: fren }

注意词云wordcloud的中文显示,需要特殊处理,在网上看了不少是说加字体路径之类的方法我试了都不行,最后只好采用改变编码的形式才解决好Σ(っ°Д°;)っ:

name[i] = name[i].decode('gb2312')

( • ̀ω•́ )✧还有,示例词云的轮廓背景图由back.jpg给出,如下图:



一、数据文件准备

1、price.csv

name,val
南京,3.19
徐州 ,3.18
淮安,3.16
盐城,3.15
宿迁,3.14
泰州,3.14
扬州,3.13
南通,3.13
连云港 ,3.14
镇江,3.15
无锡,3.14
苏州,3.16
常州,3.17

第一列是城市名,第二列是词频数值,

csv文件本质上就是以逗号(,)分隔开的txt文件,所以用excel打开形式为:



二、导入模块包

可参考Windows下安装Python、matplotlib包 及相关
https://blog.csdn.net/mikasa3/article/details/78942650 

1、numpy

2、pandas

3、wordcloud

4、matplotlib

三、完整代码

如下:

import random  
import numpy as np
import pandas as pd
from pyecharts import WordCloud
import matplotlib.pyplot as plt
from PIL import Image,ImageSequence
from wordcloud import WordCloud,ImageColorGenerator
def DrawWordcloud(read_name):
    image = Image.open('back.jpg')#作为背景形状的图
    graph = np.array(image)
    #参数分别是指定字体、背景颜色、最大的词的大小、使用给定图作为背景形状
    wc = WordCloud(font_path = 'C:\\windows\\Fonts\\simhei.ttf', background_color = 'White', max_words = 50, mask = graph)
    fp = pd.read_csv(read_name)#读取词频文件
    name = list(fp.name)#词
    value = fp.val#词的频率
    for i in range(len(name)):
      name[i] = str(name[i])
      #注意因为要显示中文,所以需要转码
      name[i] = name[i].decode('gb2312')
    dic = dict(zip(name, value))#词频以字典形式存储
    wc.generate_from_frequencies(dic)#根据给定词频生成词云
    image_color = ImageColorGenerator(graph)
    plt.imshow(wc)
    plt.axis("off")#不显示坐标轴
    plt.show()
    wc.to_file('Wordcloud.png')#保存的图片命名为Wordcloud.png
if __name__=='__main__':
    DrawWordcloud("Price.csv")

四、运行结果

1、词云图


猜你喜欢

转载自blog.csdn.net/MIKASA3/article/details/80066001