大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
在上一期我们使用jieba分词模块将《水浒传》全文进行了分割并统计了其中各个人名的出现次数。这一期我们就利用这些数据来制作出一张关于水浒传人物的词云图。
词云图从样子上来看就是将各种不同的词语填满整个形状,并且用词语的字符大小、颜色来体现词语的重要程度,这可以让人们在大量获取信息的同时了解到信息的重要程度。在Python中,wordcloud模块可以让我们非常容易地生成各种好看的词云图。
开始安装,wordcloud模块的安装名和导入名都是wordcloud。等一下,这是个什么情况,安装失败?
我们看一下详细信息:
在室长的工作环境中没有安装MicrosoftVisualC++14.0或以上版本,所以安装失败了。可见wordcloud并不是单纯靠Python工作的,我们需要把该安装的工具都安装了。然而之后仍然未成功,室长搜索后才发现最新版的wordcloud在windows上也只支持到Python3.9,而室长的Python3.10的环境自然是安装不上了。所以有些时候用最新版的软件程序也未必是好事,很多配套的东西都跟不上。
室长使用Anaconda重新配置了一个Python3.8的环境,并且成功地安装上了wordcloud,这下终于可以开搞啦!
首先我们先来导入模块以及上一期的分词结果:
五千多个词对于词云来说还是太多了,而且出现次数越少的越有可能是错误的分词结果,比如这个“谢了恩”。所以我们不妨只保留前一百个人名:
这下感觉还差不多,接下来就可以使用wordcloud模块生成词云了:
一个词云图就是一个WordCloud实例,我们先进行初始化。然后很重要的一点是,wordcloud自身不支持中文,所以如果我们直接使用中文生成词云,那么生成的都是一堆方框。好在我们可以为wordcloud指定字体文件来让它支持中文的显示。Win10的字体文件在C:\Windows\Fonts文件夹下,文件夹的样子与众不同:
我们可以使用这个路径或者将文件夹中的字体文件拷贝到代码所在的文件夹下,或者直接从网上下载更多炫酷的字体拿来使用。这里室长将字体文件拷贝到代码所在的文件夹下:
接下来需要将词频数据传入到WordCloud对象中,需要使用的是fit_words方法,它接受以词为键以出现次数或频率为值的字典,所以我们对DataFrame使用to_dict方法将其转换为字典:
转换得很成功,那我们将这个字典直接导入。导入之后词云图就生成了,我们使用to_file方法将它直接保存下来:
一张词云图就生成了。现在这个状态谈不上好看但是已经有那么点意思了。有些问题是分词的问题,这需要我们进一步处理数据,另一些则是绘图的问题,我们可以在初始化WordCloud实例的参数中进行调整。
这里重点强调两个参数,一个是background_color,它可以填写常见的颜色名称也可以支持16进制的颜色代码。另一个是mask,它便是词云图形成各种各样形状的关键。我们可以使用pillow库读取图片并使用numpy的array方法将其转换为数组,传递给mask参数。既然是水泊梁山,我们这里选取一张山的图片来做遮罩:
因为遮罩图片本身比较大,所以这里调整了一些参数,多显示一些人名,并且让词云显得相对密一些:
当然,想要获得更好看的图片,调参还是一个非常漫长的过程。不过,最基本的方法我们已经掌握了,那就快来亲手做一张好看的词云图吧!如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!