一、简介词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词:!
图1 词云图示例 在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些框架并不是专门用于制作词云图的,因此并不支持更加个性化的制图需求,要想创作出更加美观个性的词云图,需要用到一些专门绘制词云图的第三方模块,本文就将针对其中较为优秀易用的wordcloud以及stylecloud的用法进行介绍和举例说明。 二、利用wordcloud绘制词云图wordcloud是Python中制作词云图比较经典的一个模块,赋予用户高度的自由度来创作词云图:
图2 wordcloud制作词云图示例 2.1 从一个简单的例子开始 这里我们使用到来自wordcloud官方文档中的constitution.txt来作为可视化的数据素材:
图3 constitution.txt 首先我们读入数据并将数据清洗成空格分隔的长字符串: import re with open(‘constitution.txt’) as c: ‘’’抽取文本中的英文部分并小写化,并将空格作为分隔拼接为长字符串’’’ text = ‘ ‘.join([word.group().lower() for word in re.finditer(‘[a-zA-Z]+’, c.read())]) ‘’’查看前100个字符’’’ text[:500]
图4 清洗后的片段文本 接着使用wordcloud中用于生成词云图的类WordCloud配合matplotlib,在默认参数设置下生成一张简单的词云图: from wordcloud import WordCloud import matplotlib.pyplot as plt %matplotlib inline ‘’’从文本中生成词云图’’’ wordcloud = WordCloud().generate(text) plt.figure(figsize=[12, 10]) plt.imshow(wordcloud) plt.axis(‘off’) plt.show() 生成的词云图:
对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:855408893 ,从0基础的python脚本到web开发、爬虫、django、数据挖掘数据分析等,0基础到项目实战的资料都有整理。送给每一位python的小伙伴!每晚分享一些学习的方法和需要注意的小细节,学习路线规划,利用编程赚外快。点击加入我们的 python学习圈
图5 默认参数下的词云图 毕竟是在默认参数下生成的词云图,既丑陋又模糊,为了绘制好看的词云图,接下来我们来对wordcloud绘制词云图的细节内容进行介绍,并不断地对图5进行升级改造。 2.2 WordCloud 作为wordcloud绘制词云图最核心的类,WordCloud的主要参数及说明如下: fontpath:字符型,用于传入本地特定字体文件的路径(ttf或otf文件)从而影响词云图的字体族width:int型,用于控制词云图画布宽度,默认为400height:int型,用于控制词云图画布高度,默认为200prefer_horizontal:float型,控制所有水平显示的文字相对于竖直显示文字的比例,越小则词云图中竖直显示的文字越多mask:传入蒙版图像矩阵,使得词云的分布与传入的蒙版图像一致contour:float型,当mask不为None时,contour参数决定了蒙版图像轮廓线的显示宽度,默认为0即不显示轮廓线contour_color:设置蒙版轮廓线的颜色,默认为’black’scale:当画布长宽固定时,按照比例进行放大画布,如scale设置为1.5,则长和宽都是原来画布的1.5倍min_font_size:int型,控制词云图中最小的词对应的字体大小,默认为4max_font_size:int型,控制词云图中最大的词对应的字体大小,默认为200max_words:int型,控制一张画布中最多绘制的词个数,默认为200stopwords:控制绘图时忽略的停用词,即不绘制停用词中提及的词,默认为None,即调用自带的停用词表(仅限英文,中文需自己提供并传入)background_color:控制词云图背景色,默认为’black’mode:当设置为’RGBA’且background_color设置为None时,背景色变为透明,默认为’RGB’relative_scaling:float型,控制词云图绘制字的字体大小与对应字词频的一致相关性,当设置为1时完全相关,当为0时完全不相关,默认为0.5color_func:传入自定义调色盘函数,默认为Nonecolormap:对应matplotlib中的colormap调色盘,默认为viridis,这个参数与参数color_func互斥,当color_func有函数传入时本参数失效repeat:bool型,控制是否允许一张词云图中出现重复词,默认为False即不允许重复词random_state:控制随机数水平,传入某个固定的数字之后每一次绘图文字布局将不会改变 了解了上述参数的意义之后,首先我们修改背景色为白色,增大图床的长和宽,加大scale以提升图片的精细程度,并使得水平显示的文字尽可能多: ‘’’从文本中生成词云图’’’wordcloud = WordCloud(background_color=‘white’, # 背景色为白色 height=400, # 高度设置为400 width=800, # 宽度设置为800 scale=20, # 长宽拉伸程度设置为20 prefer_horizontal=0.9999).generate(text)plt.figure(figsize=[8, 4])plt.imshow(wordcloud)plt.axis(‘off’)‘’’保存到本地’’’plt.savefig(‘图6.jpg’, dpi=600, bbox_inches=‘tight’, quality=95)plt.show()
图6 可以看到相较于图5,在美观程度上有了很大的进步,接下来,我们在图6的基础上添加美国本土地图蒙版:
图7 美国本土地图蒙版 利用PIL模块读取我们的美国本土地图蒙版.png文件并转换为numpy数组,作为WordCloud的mask参数传入: from PIL import Imageimport numpy as npusa_mask = np.array(Image.open(‘美国本土地图蒙版.png’))‘’’从文本中生成词云图’’’wordcloud = WordCloud(background_color=‘white’, # 背景色为白色 height=4000, # 高度设置为400 width=8000, # 宽度设置为800 scale=20, # 长宽拉伸程度程度设置为20 prefer_horizontal=0.9999, mask=usa_mask # 添加蒙版 ).generate(text)plt.figure(figsize=[8, 4])plt.imshow(wordcloud)plt.axis(‘off’)‘’’保存到本地’’’plt.savefig(‘图8.jpg’, dpi=600, bbox_inches=‘tight’, quality=95)plt.show()
图8 可以看到图8在图6的基础上进一步提升了美观程度,接下来我们利用wordcloud中用于从图片中提取调色方案的类ImageColorGenerator来从下面的星条旗美国地图蒙版中提取色彩方案,进而反馈到词云图上:
图9 美国地图蒙版星条旗色 from PIL import Image import numpy as np from wordcloud import ImageColorGenerator usamask = np.array(Image.open(‘美国地图蒙版星条旗色.png’)) image_colors = ImageColorGenerator(usa_mask) ‘’’从文本中生成词云图’’’ wordcloud = WordCloud(background_color=‘white’, # 背景色为白色 height=400, # 高度设置为400 width=800, # 宽度设置为800 scale=20, # 长宽拉伸程度