wordcloud是一个非常优秀的词云展示的第三方库,词云是以词语为基础,通过汇总不用的字更加直观和艺术性的展示我们的文本。
首先,安装wordcloud
包时,直接用 pip install wordcloud
是会报错的,会出现文件缺失的问题。这一点不少人都有类似反馈。
解决方案可看我一下两篇博客:
python快速安装资源包
手把手教你进行pip换源
当然也可以通过下载.whl
文件进行安装:.whl文件链接
在cmd中命令:pip install .whl文件的路径
这种方法比较麻烦,每次安装模块时都要去找.whl文件,我反正是拒绝的。。。。。。
正确打开方式:
打开cmd在命令框中输入:
pip install wordcloud -i https://pypi.doubanio.com/simple
wordcloud官方简介:github:https://github.com/amueller/word_cloud
官方地址:
https://amueller.github.io/word_cloud/
jieba分词器模块有三种分词的模式:
jieba分词器模块安装同wordcloud模块安装一样,在cmd在输入:
pip install jieba -i https://pypi.doubanio.com/simple
wordcloud 生成词云有两个方法:from text 和 from frequencies ,即文本生成和频率生成,每一个都有对应的函数可以使用。
generate(text) Generate wordcloud from text.
generate_from_text(text) Generate wordcloud from text.
generate_from_frequencies Create a word_cloud from words and frequencies.
参数 | 描述 |
---|---|
width | 指定词云对象生成图片的宽度,默认400像素 |
height | 指定词云对象生成图片的高度,默认200像素 |
min_ font_size | 指定词云中字体的最小字号,默认4号 |
max_ font_ size | 指定词云中字体的最大字号,根据高度自动调节 |
font_ step | 指定词云中字体字号的步进间隔,默认为1 |
font_ path | 指定字体文件的路径,默认None,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = ‘黑体.ttf’ |
max_ words | 指定词云显示的最大单词数量,默认200 |
stop_ words | 指定词云的排除词列表,即不显示的单词列表,设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS |
mask | 指定词云形状,默认为长方形,需要引用imread()函数,如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代 |
background_ color | 指定词云图片的背景颜色,默认为黑色 |
prefer_horizontal | 词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 ) |
scale | 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍 |
mode | 当参数为“RGBA”并且background_color不为空时,背景为透明 |
relative_scaling | 词频和字体大小的关联性 |
color_func | 生成新颜色的函数,如果为空,则使用 self.color_func |
regexp | 使用正则表达式分隔输入的文本 |
collocations | 是否包括两个词的搭配 |
colormap | 给每个单词随机分配颜色,若指定color_func,则忽略该方法 |
fit_words(frequencies) | 根据词频生成词云【frequencies,为字典类型】 |
generate(text) | 根据文本生成词云 |
generate_from_frequencies(frequencies[, …]) | 根据词频生成词云 |
generate_from_text(text) | 根据文本生成词云 |
process_text(text) | 将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) ) |
recolor([random_state, color_func, colormap]) | 对现有输出重新着色。重新上色会比重新生成整个词云快很多 |
to_array() | 转化为 numpy array |
to_file(filename) | 输出到文件 |
遮罩图即背景图片。字的大小布局和颜色都会依据遮罩图生成。其实理论上这对字大小和清晰程度的影响不大,但是遮罩图色和背景色background_color
混淆,则可能导致看起来不清晰;另外遮罩图自身各个颜色之间的对比不强烈,也可能使图看起来层次感不够。
比如,一些图明度比较高,再加上背景白色,有可能导致字色太浅(背景色background_color
又是白色)于是看起来不够“清晰”。
背景色默认为黑色。就像在mask
中提到的,如果遮罩图像颜色过浅、背景设置白色,可能导致字看起来“不清晰”。而实际上,对一个浅色遮罩图分别用白、黑两种背景色后发现,黑色背景的强烈对比之下会有若干很浅也很小的词浮现出来,而之前因背景色、字色过于相近而几乎无法用肉眼看出这些词。
默认“RGB”,根据说明文档,如果想设置透明底色的云词图,那么可以设置background_color=None, mode="RGBA"
但是!!!实际中我尝试设置透明背景色并没有成功过!
当我选取的遮罩图是白色底时,如果background_color
设置为"white"或"black"
时,生成的云词确实是对应的“白色”“黑色”;但是按照上述参数设置透明色时,结果出来依然是白色。
最大字号,图的生成会依据最大字号等因素去自动判断词的布局。
经测试,哪怕同一个图像,只要图本身尺寸不一样(比如我把一个300×300的图拉大到600×600再去当遮罩),那么同样的字号也是会有不同的效果。
原理想想也很自然,字号决定了字的尺寸,而图的尺寸变了以后,最大字相对于图的尺寸比例自然就变了。
所以,需要根据期望显示的效果,去调整最大字号参数值。
最小字号,不设置的情况下,默认是4。尝试了设置比4大的字号,例如8、10,结果就是原本小于设定值且大于4号的词都直接不显示了,其它内容和未设置该值时都一样。
表示词频和云词图中字大小的关系参数,默认0.5。为0时,表示只考虑词排序,而不考虑词频数;为1时,表示两倍词频的词也会用两倍字号显示。
根据说明文档,当云词图很大的,加大该值会比使用更大的图更快,但值越高也会越慢(计算更复杂)。默认值是1。实际测试中,更大的值,确实输出图像看起来更精细(较小较浅的词会颜色更重,也感觉清楚,大的词差异不明显)。
用open函数打开文件,编码用utf-8
text_from_file_with_apath = open('2019nCov.txt', encoding='utf-8').read()
sep’.join(seq)
以sep
作为分隔符,将seq所有的元素合并成一个新的字符串
wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all=True)
#sep’.join(seq)以sep作为分隔符,将seq所有的元素合并成一个新的字符串
wl_space_split = " ".join(wordlist_after_jieba)
wc = WordCloud(
background_color="white", # 设置背景颜色
mask=backgroud_Image, # 设置背景图片
width=1000,
height=860,
font_path="C:\\Windows\\Fonts\\msyhbd.ttc", # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
max_words=2000, # 设置最大现实的字数
stopwords=STOPWORDS, # 设置停用词
max_font_size=150, # 设置字体最大值
# min_font_size=10, # 设置字体最小值
random_state=30, # 设置有多少种随机生成状态,即有多少种配色方案
scale=8,
)
调用plt.imshow()函数显示词云
plt.imshow(my_wordcloud)
#是否显示x轴、y轴下标
plt.axis("off")
我这里用的是WordCloud
中自带.to_file
可以将云词图输出到文件
my_wordcloud.to_file('wordcloud6.png')
另一种输出图片的方式:用plt.savefig("这里是生成图片的路径")
来存储生成的云词图
plt.savefig('wordcloud6.png',dpi=200)
plt.show()
注意:一定要把
plt.savefig
放在plt.show
之前,否则得到的是一张空白的图
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import jieba
# 打开文件
text_from_file = open('2019nCov.txt',encoding='utf-8').read()
# 中文分词
wordlist_after_jieba = jieba.cut(text_from_file, cut_all=True)
# sep’.join(seq)以sep作为分隔符,将seq所有的元素合并成一个新的字符串
txt = " ".join(wordlist_after_jieba)
# 生成对象
'''设置词云样式'''
wc = WordCloud(
background_color="white", # 设置背景颜色
width=1000,
height=860,
font_path="C:\\Windows\\Fonts\\STFANGSO.ttf", # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
max_words=2000, # 设置最大现实的字数
stopwords=STOPWORDS, # 设置停用词
max_font_size=150, # 设置字体最大值
random_state=30 # 设置有多少种随机生成状态,即有多少种配色方案
)
my_wordcloud = wc.generate(txt)
# 显示词云
plt.imshow(my_wordcloud)
# 是否显示x轴、y轴下标
plt.axis("off")
plt.show()
# 保存文件
my_wordcloud.to_file('wordcloud.png')
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import jieba
# 打开文件
text_from_file = open('2019nCov.txt',encoding='utf-8').read()
# 中文分词
wordlist_after_jieba = jieba.cut(text_from_file, cut_all=True)
# sep’.join(seq)以sep作为分隔符,将seq所有的元素合并成一个新的字符串
txt = " ".join(wordlist_after_jieba)
# 背景图片
backgroud_Image = plt.imread('yuntu.jpg')
print('加载图片成功!')
# 生成对象
'''设置词云样式'''
wc = WordCloud(
background_color="white", # 设置背景颜色
mask=backgroud_Image, # 设置背景图片
width=1000,
height=860,
font_path="C:\\Windows\\Fonts\\msyhbd.ttc", # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
max_words=2000, # 设置最大现实的字数
stopwords=STOPWORDS, # 设置停用词
max_font_size=150, # 设置字体最大值
random_state=30 # 设置有多少种随机生成状态,即有多少种配色方案
)
my_wordcloud = wc.generate(txt)
print('开始加载文本')
# 显示词云
plt.imshow(my_wordcloud)
# 是否显示x轴、y轴下标
plt.axis("off")
plt.show()
# 保存文件
my_wordcloud.to_file('wordcloud1.png')
print('生成词云成功!')
STFANGSO.ttf:字体为华文仿宋 字体
msyhbd.ttc:字体为微软雅黑粗体
背景图:
STFANGSO.ttf:字体为华文仿宋 字体
有帮助的话来个三连击,鼓励鼓励一下我
有帮助的话来个三连击,鼓励鼓励一下我
有帮助的话来个三连击,鼓励鼓励一下我