用Python绘制词云图
2018-01-26 10:03
239 查看
前言
词云图是数据分析中比较常见的一种可视化手段。正好,Python下也有一款词云生成库,word_cloud:https://github.com/amueller/word_cloud
基于我之前爬取的微博数据,制作了一批词云图,由此来讲讲此模块的使用。
一、分词
1.1 制作停止词库
分词之前先准备一下停止词,因为中文中有很多的语气词啊,副词啊等,对于我们展现词频热度是无意义的干扰词。于是,我们就想个法子把他们排除掉。def make_stopdict(): stopdict = set() f = open("stopwords.txt","r") #网上下载来的停止词文本,近2000个,可以自己往里面添加 lines = f.readlines() for l in lines: stopdict.add(l.strip()) f.close() return stopdict stopdict = make_stopdict()
1.2 分词
利用正则排除掉分词后符号、数字、emoji表情等不容易表明意义的内容,只保留中英文。分词用的是jieba分词,中文分词领域的大佬:https://pypi.python.org/pypi/jieba/
import re zhongwen_pat = re.compile(r'^[\u4e00-\u9fa5a-zA-Z]+$') all_content = [] f = open("weibo.txt","w") for t in tweets: #tweets是从数据库中取出来的待制作词云图的文本源 cut_list = [c for c in jieba.cut(t[0]) if zhongwen_pat.search(c)] cut_set = set(cut_list) res_set = cut_set - stopdict res_list = list(res_set) all_content.extend(res_list) f.writelines(res_list) f.close()
1.3 统计词频
对于英文文本,word_cloud可以直接对文本源生成词云图。但是对中文的支持没有那么给力,需要我们自己分词并且统计词频生成文本作为参数传入。def get_top_keywords(file): #这里的file即上一步生成的“weibo.txt” top_word_lists = [] # 关键词列表,待填充 with open(file,'r') as f: texts = f.read() # 读取整个文件作为一个字符串 result = jieba.analyse.textrank(texts,topK=400,withWeight=True) #保留最高频的400个词 for r in result: top_word_lists.append(r[0]) return top_word_lists
1.4 生成词云图
from scipy.misc import imread from wordcloud import WordCloud from wordcloud import ImageColorGenerator import matplotlib.pyplot as plt from os import path def draw_wordcloud(txt): #读入一个txt文件,基于此文本知错词云图 d = path.dirname(__file__) #当前文件文件夹所在目录 color_mask = imread("te.jpg") #读取背景图片, cloud = WordCloud( #设置字体,不指定就会出现乱码,文件名不支持中文 font_path="fzmw.ttf", #font_path=path.join(d,'simsun.ttc'), #设置背景色,默认为黑,可根据需要自定义为颜色 background_color='black', #词云形状, mask=color_mask, #允许最大词汇 max_words=400, #最大号字体,如果不指定则为图像高度 max_font_size=100, #画布宽度和高度,如果设置了msak则不会生效 width=600, height = 400, margin = 2, #词语水平摆放的频率,默认为0.9.即竖直摆放的频率为0.1 prefer_horizontal = 0.8 ) wc = cloud.generate_from_frequencies(txt) #产生词云 #wc = cloud.fit_words(txt) 跟以上是同一意思 wc.to_file("weibo_cloud.jpg") #保存图片 #显示词云图片 plt.imshow(wc) #不现实坐标轴 plt.axis('off') #绘制词云 #plt.figure(dpi = 600) image_colors = ImageColorGenerator(color_mask) #plt.imshow(wc.recolor(color_func=image_colors)) 重新上色, plt.show()
二、词云图结果
我找了新浪logo的图片做mask,结果效果比较差。所以直接用了默认的长方形画布。爬虫采集到的微博女性词云图:
微博男性用户词云图:
注意1:字体、颜色、大小等等得多次尝试来调整,一般默认生成的都比较丑。
注意2:停止词与分词的选择很重要,我这次的结果就不是特别好,看不出个所以然来-。-
相关文章推荐
- python3.6 爬取微信好友列表和个性签名,绘制个性签名云图
- Python词云图绘制—看博客大佬们的写作热点
- 测试python--绘制天龙八部词云图
- 在python3中绘制地图,国别码:人口数量
- Python图表绘制:matplotlib绘图库入门
- Python绘制CPU曲线图
- 【python】 读取Excel文件并绘制图表
- caffe的python接口学习(7):绘制loss和accuracy曲线
- Python爬取链家的数据并绘制热力图
- Python开发【模块】:Pygal 绘制直方图
- 用python绘制cpu曲线
- python绘制二叉树的实现
- Python图表绘制:matplotlib绘图库入门
- python3.6 使用pycha进行图表绘制(由于pycha长期未更新无法直接兼容python3.6,需做部分修改)
- Python实现在tkinter中使用matplotlib绘制图形的方法示例
- 使用python绘制人人网好友关系图示例
- 【Python那些事儿】为多变量数据绘制散点图
- 6月29日云栖精选夜读:Java、PHP、Python、JS 等开发者都如何绘制统计图
- python实现绘制树枝简单示例