您的位置:首页 > 编程语言 > Python开发

python + wordcloud实现任意形状标签云

2016-12-12 19:48 525 查看
公司最新App——AirOh已经上线三个多月,积累了首批原始用户。后台分别对用户和功能进行了统计分析,得到了丰富的数据结果。除了常规的表格、曲线、柱状图及污染热图等展示形式,亦对数据进行标签化处理,得到了非常有意思的展现形式。结果如下:

纯文字标签云




图片叠加效果标签云




从两张图的对比来看,标签云的效果比表格形象,用户更加容易理解,并带有一些小心思的创新。

目前,python + wordcloud实现标签云效果的教程很多,但由于机子的配置等一些问题,还是趟了一些坑,做下记录,供查询。

简要流程

系统配置:Ubuntu 14.04, Python 2.7


安装python插件

sudo apt-get install python-tk

注意:一定要提前安装该插件,不然会出现报错

错误:wordcloud no display name and no $DISPLAY environment variable


主要原因是matplotlib插件中plt.imshow(wordcloud)中默认backend设置为Agg,而改GUI无法加载图片, 修改/etc/matplotlibrc

backend      : TkAgg


sudo apt-get install python-numpy

sudo apt-get install python-matplotlib

运行事例代码

这里就不赘述,直接拷贝一段我试验过的一段代码

from wordcloud import WordCloud
import PIL
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

###

Note:Following 3 lines are for the problem of Chinese Font display

###

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

def wordcloudplot(txt):

###

Note:一定要加上以下三行代码。
最早把这三行注释掉,ubuntu系统缺少matplotlib支持中文字体
生成的标签云中文显示为口,查了很多材料,都没有明确说明这个问题
最好加上这三行,或者自己添加为自己喜欢的字体!!!

###

path='msyh.ttf'
path=unicode(path, 'utf8').encode('gb18030')
alice_mask = np.array(PIL.Image.open('air.jpg'))
wordcloud = WordCloud(font_path=path,
background_color="white",
margin=5,
width=1800,
height=800,
mask=alice_mask,
max_words=2000,
max_font_size=60,
random_state=42)
#wordcloud = wordcloud.generate(txt)
wordcloud = wordcloud.fit_words(txt)
wordcloud.to_file('output.png')
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

def main():
a=[]
f=open(r'android.txt','r').readlines()
for line in f:
tempArr = line.strip()split("  ")
tempArr[0] = tempArr[0].decode("utf-8")
tempArr[1] = int(tempArr[1])
a.append(tempArr)
wordcloudplot(a)

if __name__=='__main__':
main()


Note:

wordcloud支持两种标签云生成方式,针对不同的txt格式,其中

generate方法输入数据格式为字符串,直接输入文本流即可,实现原理可查看方法实现

txt = open("test.txt",'r').readlines()


fit_words方法输入数据,已经对数据进行了处理,比如格式为

txt = [(u'空气龙',50000),(u'出行地图',4000),(u'社区PK',609029),...]


参考链接:

个人网站

【下载】msyh.tff

https://www.zhihu.com/question/28975391
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python wordcloud 标签云