python大数据之简易词云图
2017-02-15 本文已影响1612人
Bugl0v3r
python实现简易词云图
0b01:环境准备
- 推荐使用Anaconda 它包含了(numpy,codecs,pandas,matplotlib),当然也可以自行安装这些包。
- 此外还要安装jieba(分词包),WordCloud(词云包)
直接pip install jieba
,pip install WordCloud
即可 - 用来生成词云的txt文件 (比如,聊天记录,影视剧本,台词等等)
- 词云背景图(形状)。(默认为矩形)
- 素材获取百度云盘分享密码: kbw7
0b10: 代码实现
- 测试环境
Anaconda2(python2.7 64bit) on win10
# -*- coding:utf-8 -*-
import jieba # 分词包
import numpy # numpy计算包
import codecs # codecs提供open方法指定打开的文件的语言编码,它会在读取时自动转换为内部的unicode
import pandas # 统计学工具包
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator # 词云包
from scipy.misc import imread
# 导入文本,分词处理
file = codecs.open(u'大话西游.txt', 'r')
content = file.read()
file.close()
segment = []
segs = jieba.cut(content) # 使用jieba分词
for seg in segs:
if len(seg) > 1 and seg != '\r\n':
segment.append(seg)
# 去停用词(文本去噪)
words_df = pandas.DataFrame({'segment': segment})
# 字典中的keys就是DataFrame里面的columns,但是没有index的值,所以需要自己设定,不设定默认是从零开始计数。
words_df.head()
stopwords = pandas.read_csv("stopwords.txt", index_col=False,
quoting=3, sep='\t', names=['stopword'], encoding="utf8")
words_df = words_df[~words_df.segment.isin(stopwords.stopword)]
# 词汇频率表
words_stat = words_df.groupby(by=['segment'])['segment'].agg({"count": numpy.size})
words_stat = words_stat.reset_index().sort_values(by="count", ascending=False)
# 自定义词云背景
bimg = imread('heart.jpeg')
wordcloud = WordCloud(background_color="white", mask=bimg, font_path='simhei.ttf')
wordcloud = wordcloud.fit_words(words_stat.head(4000).itertuples(index=False))
bimgColors = ImageColorGenerator(bimg)
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))
plt.show()