词云算是社交数据分析必不可少的一项技能了吧。下面就从安装到生成词云整个过程详细做个介绍。
安装wordcloud
pip install wordcloud
如果安装出错,细心的人会发现,cmd上面已经给出了解决方案。
其一,从http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud下载whl文件
再 pip install filename.whl
备注:不要图方便把原先的whl文件名改了,否则要重新下载。
其二,在pip install 失败时,cmd明确指出了error:Microsoft Visual C++ 14.0 is required. 而且在error后面还提供了该文件的下载地址,进入下载地址页面下载后安装再重新pip install wordcloud 即可成功。
相比一的方法,个人觉得这个才是治本的方案,尽管在安装Microsoft Visual C++ 14.0时有些慢。
安装成功啦,接下来开始放代码。。。
import 库
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
import wordcloud
import jieba
from scipy.misc import imread
因为这篇介绍的是中文词云,所以word cloud的STOPWORDS库不是必须的。
读取text
text = open('filename.txt',encoding='GB2312', errors='ignore').read()
cut_text = " ".join(jieba.cut(text)) # jieba中文分词,英文则不需要。
注意点:encoding 方式不能只用‘uft-8’格式,有时候text会出现乱码,应该按照原text的编码方式进行解码。方法如下:
import chardet
f = open('filename.txt','rb')
f_read = f.read()
f_charInfo = chardet.detect(f_read)
f_charInfo # 我的filename.text输出如下:
>>>{'confidence': 0.99, 'encoding': 'GB2312', 'language': 'Chinese'}
在输出信息中encoding 后面明确给出了’GB2312’,所以在open函数的参数encoding上也要改为’GB2312’才可以正确打开文件,否则就会是乱码。
停用词
stopwords = set()
# stopwords = set(STOPWORDS)
# STOPWPRD自带的是英文停用词,所以在制作中文词云要自己添加或者调用nltk库的stopword,nltk这里不做介绍
# stopwords.add("然而") # 单项添加
stopwords.update(["然而","这样","另一方面","但是","因此","我们","一个","如果",
'它们','具有','人们','可以','这个','这种','不能','因为',
'或者','没有','这些','一种','非常','可能','他们','而且',
'所有','也许','就是','认为','正如','必须','确定','所以',
'任何','发生','甚至','能够','过去','对于','知道','这是',
'现在','不同','并且','似乎','那样','其他','什么','不是',
'那么','一点','已经','之间','如何','仍然']) # 多项添加
需要添加什么停用词,可以对text进行词频统计再排序,不过这一步骤需要在设置wordcloud参数后才可以调用,具体操作如下:
# 查看词频,方便重新增加停用词
process_word = WordCloud.process_text(wc, cut_text)
# 下面是字典排序
sort = sorted(process_word.items(),key=lambda e:e[1],reverse=True) # sort为list
print(sort[:50]) # 输出前词频最高的前50个
读取背景图片
# 如果图片过小,会产生wc.generate(text) out of index error。
# 两种方式读取
# imagename = np.array(Image.open("imagename.png"))
imagename= imread( "imagename.png")
wordcloud参数设置及说明
wc = WordCloud(background_color="white", # 背景图片中不添加word的颜色
max_words=2000, # 最大词个数
mask=imagename, stopwords=stopwords,
font_path = 'X:\Windows\Fonts\simfang.ttf',
# 设置字体格式,如不设置显示不了中文,而且字体名不能是中文
max_font_size = 75, # 设置字体大小的最大值
random_state = 42
)
# generate word cloud 生成词云
wc.generate(cut_text)
# save to file
wc.to_file("wordcloud.png")
显示词云图像
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.figure()
总结:wordcloud自带许多函数,但常用的也就那么几个。。。
wordcloud制作并不难,踩过那几个坑后就简单了,安装失败坑,读取text乱码坑,输出词云乱码坑,还有背景图片不能太小。
如果有直接的中文停用词调用那就更完美了。