Python数据可视化——词云图
一、配置环境
要生成词云图,必备的插件是wordcloud。课堂上给出了两种安装插件的方法。一是通过调用命令行,输入pip3 install wordcloud进行安装。二是下载whl文件,通过pip3 install xxx.whl安装。可是这两种方法都无法成功安装。这一步耗费了非常多的时间,最终在同学的提示下,我在jupyter中直接输入了安装命令。

安装成功。
此外,还需要安装jieba分词库,对文本进行分词,才能生成词云。

二、数据准备
找到一篇报告,将其全文文本复制,另存在本地为.txt文件。需要跟python文件存在同一目录下。
三、编程部分
1.打开文件
首先import os模块、wordcloud库和matplotlib库。os模块的功能是处理文件,需要用它来打开我们刚才保存的.txt文件,这里一定要输入[encoding='utf-8']处理中文字符,否则会报错。matplotlib库用于制图。
将文件赋值为text,可以先print出来,确认文本是否有问题。
import os
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text=open("China145.txt","r",encoding="utf-8").read()
#print(text)
2.jieba分词
加载文本文件,分词为模式为精确模式(cut_all=False)。精确模式是指将句子最精确地切开,适合文本分析。如:今天天气,真,好
新建一个字典,赋值为tf。遍历jieba分词结果中的所有词,通过循环语句计数。将字典的值,也就是词本身放到列表中,这一步是为剔除无用数据做准备。
import jieba
jieba.load_userdict("China145.txt")
seg_list=jieba.cut(text,cut_all=False)
tf={}
for seg in seg_list:
if seg in tf:
tf[seg]+=1
else:
tf[seg]=1
ci=list(tf.keys())
3.剔除无用数据
遍历分词结果列表中所有的词,满足出现次数足够多并且长度>2,且不在停词文档中的词才能够用来绘制词云图。(这里的出现次数可以视情况而定,一般使词云图中的词在50~300左右为宜)将不满足条件的词剔除。
with open("stopword.txt","r",encoding="UTF-8") as ft:
stopword=ft.read()
for seg in ci:
if tf[seg]<20 or len(seg)<2 or seg in stopword or "-" in seg:
tf.pop(seg)
4.遍历字典,将值放在前面,键放在后面,放入data列表中。用list的sort方法将词按出现次数由小到大排序,再用reverse方法倒叙,得到出现次数由大到小排序的列表。再将数字和词位置互换,存入字典中。
ci,num,data=list(tf.keys()),list(tf.values()),[]
for i in range(len(tf)):
data.append((num[i],ci[i]))
data.sort()
data.reverse()
#print(data)
tf_sorted={}
print(len(data),data[0],data[0][0],data[0][1])
for i in range(len(data)):
tf_sorted[data[i][1]]=data[i][0]
print(tf_sorted)
5.生成词云
可以将词语字体、颜色、情况按喜好进行设置。然后关掉词云的坐标轴,输出并保存到本地即可。
import os
from wordcloud import WordCloud
import matplotlib.pyplot as plt
wc=WordCloud(font_path=font,width=800,height=600).generate_from_frequencies(tf)
plt.imshow(wc)
plt.axis('off')
plt.show()
wc.to_file('AI2.jpg')

输出结果
