已知词频生成词云图(数据库到生成词云)--generate_from_frequencies(WordCloud)

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

 

写在前面:python

用wc.generate(text)直接生成词频的方法使用不少,因此再也不赘述。正则表达式

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

generate_from_frequencies适用于我已知词及其对应的词频是多少(已有数据库),不须要分词的状况下。数据库

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

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

 

注意:函数

词云wordcloud的中文显示,须要特殊处理,在网上看了很多是说加字体路径之类的方法我试了都不行,最后只好采用改变编码的形式才解决好。工具

fp = pd.read_csv(read_name, encoding='gbk') # 读取词频csv文件, 编码为gbk

 

还有,示例词云的轮廓背景图由china_map.jpg给出,以下图:字体

 

1、数据文件准备

support_institution.csv

数据库字段分组查询数量

select support_institution name,count(support_institution) value from nsfc GROUP BY name ORDER BY value DESC; 

查询结果部分截图:  

 

导出为csv文件:support_institution.csv

 

2、导入模块包

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

一、numpy

二、pandas

三、wordcloud

四、matplotlib

 

3、完整代码

import numpy as np import pandas as pd from wordcloud import WordCloud, ImageColorGenerator import matplotlib.pyplot as plt from PIL import Image def draw_cloud(read_name): image = Image.open('china_map.jpg') # 做为背景轮廓图 graph = np.array(image) # 参数分别是指定字体、背景颜色、最大的词的大小、使用给定图做为背景形状 wc = WordCloud(font_path='simkai.ttf', background_color='black', max_words=100, mask=graph) fp = pd.read_csv(read_name, encoding='gbk') # 读取词频文件, 由于要显示中文,故编码为gbk name = list(fp.name) # value = fp.val # 词的频率 for i in range(len(name)): name[i] = str(name[i]) 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('nsfc依托单位词云.png') # 图片命名 if __name__ == '__main__': draw_cloud("support_institution.csv")

 

4、运行结果

 词云图:

 

5、补充:WordCloud的参数详解

WordCloud(font_path='', width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling=0.5, regexp=None, collocations=True, colormap=None, normalize_plurals=True )
wordcloud参数

 

font_path : string # 字体路径,须要展示什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'
 width : int (default=400) # 输出的画布宽度,默认为400像素
 height : int (default=200) # 输出的画布高度,默认为200像素
 prefer_horizontal : float (default=0.90) # 词语水平方向排版出现的频率,默认 0.9 (因此词语垂直方向排版出现频率为 0.1 )
 mask : nd-array or None (default=None) # 若是参数为空,则使用二维遮罩绘制词云。若是 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其他部分会用于绘制词云。 # 如:bg_pic = imread('读取一张图片.png'),背景图片的画布必定要设置为白色(#FFFFFF),而后显示的形状为不是白色的其余颜色。能够用ps工具将本身要显示的形状复制到一个纯白色的画布上再保存,就ok了。
 scale : float (default=1) # 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。
 min_font_size : int (default=4) # 显示的最小的字体大小
 font_step : int (default=1) # 字体步长,若是步长大于1,会加快运算可是可能致使结果出现较大的偏差。
 max_words : number (default=200) # 要显示的词的最大个数
 stopwords : set of strings or None # 设置须要屏蔽的词,若是为空,则使用内置的STOPWORDS
 background_color : color value (default=”black”) # 背景颜色,如background_color='white',背景颜色为白色。
 max_font_size : int or None (default=None) # 显示的最大的字体大小
 mode : string (default=”RGB”) # 当参数为“RGBA”而且background_color不为空时,背景为透明。
 relative_scaling : float (default=.5) # 词频和字体大小的关联性
 color_func : callable, default=None # 生成新颜色的函数,若是为空,则使用 self.color_func
 regexp : string or None (optional) # 使用正则表达式分隔输入的文本
 collocations : bool, default=True # 是否包括两个词的搭配
 colormap : string or matplotlib colormap, default=”viridis” # 给每一个单词随机分配颜色,若指定color_func,则忽略该方法。
wordcloud参数详解

 

 

PS:如下内容能够不看,固然,看我也拦不住 ○( ^皿^)っHiahiahia…

 

上面的中国地图显示的词云并很差看(可能由于词语过长),因此补充一个好看的做品(*^▽^*)

2019国务院政府工做报告词云。

文本地址:

http://www.gov.cn/guowuyuan/baogao.htm

全文代码:

 

# coding:utf-8 import jieba # 分词 import matplotlib.pyplot as plt # 数据可视化 from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS # 词云 import numpy as np # 科学计算 from PIL import Image # 处理图片 def draw_cloud(text, graph, save_name): textfile = open(text).read() # 读取文本内容 wordlist = jieba.cut(textfile, cut_all=False) # 中文分词 space_list = " ".join(wordlist) # 链接词语 backgroud = np.array(Image.open(graph)) # 背景轮廓图 mywordcloud = WordCloud(background_color="white", # 背景颜色 mask=backgroud, # 写字用的背景图,从背景图取颜色 max_words=100, # 最大词语数量 stopwords=STOPWORDS, # 停用词 font_path="simkai.ttf", # 字体 max_font_size=200, # 最大字体尺寸 random_state=50, # 随机角度 scale=2, collocations=False, # 避免重复单词  ) mywordcloud = mywordcloud.generate(space_list) # 生成词云 ImageColorGenerator(backgroud) # 生成词云的颜色 plt.imsave(save_name, mywordcloud) # 保存图片 plt.imshow(mywordcloud) # 显示词云 plt.axis("off") # 关闭保存  plt.show() if __name__ == '__main__': draw_cloud(text="government.txt", graph="china_map.jpg", save_name='2019政府工做报告词云.png')

 

 词云图:

 

原文出处:https://www.cnblogs.com/liangmingshen/p/11312257.html

相关文章
相关标签/搜索