欢迎关注零壹研究所 【微信号: Research_LAB】
从词云图开始第一个Python实例
一、引言
词云图其实是一种词频统计的可视化,可以塑造成各种形状,显得很新奇,被广泛应用于各种场合。那么如何制作一个词云图呢?用Excel显然无法快速实现(如果给一个高达几百万字的文本文档的话,统计词频工作量就很可怕了),而利用Python只需要几分钟就可以搞定。
(词云图,图源网络)
二、步骤解析
在词云图的制作中,主要分为对文本的解析(主要是分词)、词频统计、制图。
分词,就是把文本分割成单个词汇。计算机实际上不能识别自然语言,比如“李雷喜欢韩梅梅”,如果不分词,这对于计算机来说就是一串字符,没有特定含义。经过分词,可以被识别为“李雷”、“喜欢”和“韩梅梅”三个词语这里假定分词包能够识别李雷之类的词语)
分词后才能进行词频统计。比如可以统计“李雷”出现了多少次,“喜欢”出现了多少次,这样可以统计出各个词语出现的频次。
制图。词频统计好以后,就可以根据各自的频次制作词云图(用词语在图中的大小来表示词语出现的频率)。
三、准备工作
准备工作之jieba、matplotlib、wordcloud的安装。
包可以理解为一种封装好的标准化的程序,跟函数类似。包某种程度上是函数的集合,利用包我们可以大大减少开发工作量,只要调用别人已经封装好的标准包,我们就可以快速完成开发任务。
不像C语言,一个诸如1873892748989*18972428948之类的大数运算都需要设计数组去实现(当然,C语言在执行速度上领先Python)。
那么,要调用包的话就要先安装包。安装包的主要方式:
全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
这里推荐用easy_install jieba安装。
上一篇推送介绍环境变量的时候提到Python.exe,easy_install跟Python一样,也是一个exe可执行文件,不同的是easy_install是Python中专用于安装包的,一般在安装Pyhton的时候已经自动安装好了,并且easy_instal.exe所在的路径也添加到环境变量了(意味着在任何地方打开Powershell,输入easy_install都可以被计算机搜索到并且执行)。
如图,注意观察路径,Pyhton.exe在C:\Users\mcc\AppData\Local\Programs\Python\Python37-32,Easy_install.exe则在其下一级目录中(C:\Users\mcc\AppData\Local\Programs\Python\Python37-32\Scripts):
即上一目录中的Scripts文件夹下。如果不能执行Easy_install.exe,按照上一篇推送中的办法查看环境变量,将这个路径添加到环境变量中去。
这里推荐用easy_stall的原因是,由于pip方法中,pip是最新版本的话,存在冲突,如果用pip会出错,只有把pip降级到9.0.3才可以正常用。
可以在Powershell(按住Shift+右键打开)中执行:
python -m pip install --upgrade pip==9.0.3
实现对pip的降级,这样就可以用pip安装。降级后在Pycharm中也可以手动搜索安装,File—Settings—Project:XXX—Project Interpreter中,点击右上角绿色加号,在弹出来的上方搜索框输入包的名字,左下角install pkg,会显示(installing)等待下载安装完,会弹出安装成功的字样。
用easy_stall安装的详细步骤是:在任意位置打开Powershell,输入:
easy_stall jieba
等待进度条走完。
如上,根据上述方法安装完毕剩下的matplotlib(画图的包)和wordcloud(词云图统计词频的包):
easy_stall matplotlib
easy_stall wordcloud
至此,准备工作完毕。
四、词云图制作
在Python中,首先就是导入相应的包:
import jieba
from wordcloud import WordCloud #注意py文件名不能跟wordcloud重复,否则会出错!!
import matplotlib.pyplot as plt
然后,准备好我们要制作词云图的文档,这里用斗破苍穹.txt演示:
这里有1600余万字节,每个汉字两个字节计算就有800余万字(因此人工统计词频不可想象)。
f = open(r'D:\Desktop\Python Learning Notes\input files\斗破苍穹前5章.txt','rb').read()#读取二进制文件用rb(读取错误'gbk' codec can't decode的时候使用)
上述代码表示打开并且读取该文档到变量f(关于路径、字符串、文档编码等较为复杂,后续整理后详述)。
cut_text = jieba.cut(f)#分词
text = "/".join(cut_text)
上述代码时分词,用斜杠/分隔开。
wordcloud = WordCloud(font_path="C:\\Windows\\Fonts\\simfang.ttf", background_color="white").generate(text)
plt.figure("词云图") #指定所绘图名称
plt.imshow(wordcloud)# 以图片的形式显示词云
plt.axis("off") #关闭图像坐标系
plt.savefig(r"D:\Desktop\ciyuntu.png",dpi=200) #用反斜杠的话会报错
plt.show()
上述代码就是具体制作词云图的步骤,每一步骤后续都有注释。
在Python中,用“#”来注释,“#”后面的字符不会被python解释器解释。其它语言解释符号:
C语言、java、JavaScript和Stata等
1//(C语言以及学术研究中常用的Stata等注释字符:
2//注释内容
3/*注释内容*/
注意,执行后该词云图保存路径为:
D:\Desktop\ciyuntu.png
这是我的桌面路径。
因此添加了:
1plt.show()
这个语句保证在执行后可以立即看到词云图效果。
五、效果图
这就是这斗破苍穹这部小说800万字的词频效果。
显然,一些语句中常用的连接词词频最高,也符合预期。更进一步可以通过剔除等操作实现更加精准、更加符合预设目标的词云图制作。
当然,这是最基础的词云图,用于创建第一个Python实例比较合适。更丰富的,还可以变换形状,按照特定形状排列词汇、透明度设置等等,这里不再详述。
最后附上词云图的完整代码:
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3import jieba
4from wordcloud import WordCloud #注意py文件名不能跟wordcloud重复,否则会出错!!
5import matplotlib.pyplot as plt
6
7f = open(r'D:\Desktop\Python Learning Notes\input files\斗破苍穹.txt','rb').read()#一般用r,读取二进制文件或者gbk编码的文档时用rb(读取错误'gbk' codec can't decode的时候使用)
8cut_text = jieba.cut(f)#分词
9text = "/".join(cut_text)
10wordcloud = WordCloud(font_path="C:\\Windows\\Fonts\\simfang.ttf", background_color="white").generate(text)
11plt.figure("词云图") #指定所绘图名称
12plt.imshow(wordcloud)# 以图片的形式显示词云
13plt.axis("off") #关闭图像坐标系
14plt.savefig(r"D:\Desktop\ciyuntu.png",dpi=200) #用反斜杠的话会报错
15plt.show()