python tablewidget 显示字体大小_【趣味案例】用Python制作各种酷炫词云图,原来这么简单!...

一、简介词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词:!

6cda1e34701609e89abb6ec69fa2deb9.png

图1 词云图示例   在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些框架并不是专门用于制作词云图的,因此并不支持更加个性化的制图需求,要想创作出更加美观个性的词云图,需要用到一些专门绘制词云图的第三方模块,本文就将针对其中较为优秀易用的wordcloud以及stylecloud的用法进行介绍和举例说明。 二、利用wordcloud绘制词云图wordcloud是Python中制作词云图比较经典的一个模块,赋予用户高度的自由度来创作词云图:

0b1730ad3da00f5d1b4e0bf0a46d9407.png

图2 wordcloud制作词云图示例 2.1 从一个简单的例子开始   这里我们使用到来自wordcloud官方文档中的constitution.txt来作为可视化的数据素材:

9b381a81e4781c9c6b2a378860b962e7.png

图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]

a6cf87012e5f3df3e7870a954e2f8818.png

图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()   生成的词云图:

800ff3228ce680adab5a68d9c19747aa.png

对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()

c473a999a3236f5892a671d93ebe85b1.png

图6 可以看到相较于图5,在美观程度上有了很大的进步,接下来,我们在图6的基础上添加美国本土地图蒙版:

6ede36714e50b6dee7e431ca8d86b2ba.png

图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()

1b8c4c865908274938b3572f310b4cff.png

图8 可以看到图8在图6的基础上进一步提升了美观程度,接下来我们利用wordcloud中用于从图片中提取调色方案的类ImageColorGenerator来从下面的星条旗美国地图蒙版中提取色彩方案,进而反馈到词云图上:

5444a8bdd31d8df5e662f56ca8fda3c5.png

图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, # 长宽拉伸程度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值