python 绘制词云图-python 词云图形状
有没有办法一眼就知道一篇很长的文章是关于什么的?
词云图就是为了这个目的,就像下图,
词云
是不是第一眼就看到了“数据、分析、功能”的概念?
那么这种画面是如何制作出来的呢? 这很简单。 下面我就带大家一步步制作这张图。
01 准备工作
首先安装python(我用的是3.6版)。 具体安装方法请参考文末链接。
下载几个扩展库
(在OS下执行以下语句,去掉#和后面的备注)
pip install re # 正则表达式库
pip install collections #词频统计库
pip install numpy # numpy数据处理库
pip install jieba # jieba 分词
pip install wordcloud #词云展示库
pip install PIL # 图像处理库
pip install matplotlib.pyplot #图像显示库
准备好你打算统计的文件,命名为article.txtpython 绘制词云图,保存在与程序文件相同的目录下
准备一张背景图片,命名为wordcloud.jpg,保存在与程序文件相同的目录下
02 编写代码
打开一个空的python文件,命名为wordcount.py,输入以下代码
#导入扩展库
import re#正则表达式库
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba #结巴分词
import wordcloud #词云展示库
from PIL import Image #图像处理库
import matplotlib.pyplot as plt # 图像显示库
# 读取文件
fn = open('article.txt') # 打开文件
string_data = fn.read() # 读取整个文件
fn.close() # 关闭文件
# 文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
string_data = re.sub(pattern, '', string_data) # 移除匹配模式的字符
# 文本分割
seg_list_exact = jieba.cut(string_data, cut_all = False) #精确模式分词
对象列表 = []
remove_words = [u'of',u',',u'and',u'is',u'with',u'for',u'to',u'etc',u'can',u '两者都',你'。 ',u' ',u', ',u'in',u'in',u'',
u'usually', u'if', u'we', u'rerequired'] # 自定义删除词库
for word in seg_list_exact: # 循环读取每个单词
if word not in remove_words: # 如果不在remove词库中
object_list.append(word) # 添加分词到列表中
# 词频统计
word_counts = collections.Counter(object_list) # 做分词词频统计
word_counts_top10 = word_counts.most_common(10) # 获取前10个出现频率最高的单词
print (word_counts_top10) # 输出检查
# 词频显示
mask = np.array(Image.open('wordcloud.jpg')) # 定义词频背景
wc = wordcloud.WordCloud(
font_path='C:/Windows/Fonts/simhei.ttf', #设置字体格式
mask=mask, # 设置背景图片
max_words=200, # 显示最大字数
max_font_size=100 # 最大字体大小
)
wc.generate_from_frequencies(word_counts) # 从字典生成词云
image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图像创建配色方案
wc.recolor(color_func=image_colors) # 设置词云颜色为背景图片方案
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭轴
plt.show() # 显示图像
03跑步
如果一切正常python 绘制词云图,输出将如下所示:
词云图输出结果