Python数据可视化之绘制词云图
需掌握两种Python工具包:jieba作为一个专门用于中文分词的应用程序;wordcloud则是一个基于Python构建的词语频率可视化展示系统
jieba 类库使用介绍
支持三种分词模式:
- 详细模式旨在将句子尽可能精准地分割以实现文本分析。
- 全面扫描机制能够迅速捕获所有可独立成词的词汇然而无法处理歧义问题。
- 搜索引擎优化方案在详细模式基础上进行进一步优化以提升搜索效率特别适用于用于搜索引擎中的分词任务。
可以在PyCharm的文件夹→设置→项目(工作目录)→项目解析器中启用jieba工具包,并在下方用代码注释指定路径

也可以从网站获取半自动安装程序,在开始前访问 http://pypi.python.org/pypi/jieba/ 并进行下载,在完成解压后执行 python setup.py install 以完成安装。
功能介绍
1、分词
- jieba=cut这一方法设计了三个核心输入参数:待分割的文字串、cut_all开关以决定是否启用全模式切割功能、以及HMM模型选项来指导切割策略的选择。
- jieba=cut_for_search这一变体仅接收两个核心参数:待分割的文字串及是否启用隐马尔科夫模型参数(即HMM选项)。特别适用于搜索引擎中构建倒排索引时进行高效的分词任务。
# encoding=utf-8
import jieba
s_list = jieba.cut("我叫孙宇晨,来自广东广州!",cut_all=True)
print("内容(全模式):"+"/".join(s_list))
s_list = jieba.cut("我叫孙宇晨,来自广东广州!",cut_all=False)
print("内容(精准模式):"+"/".join(s_list))
s_list = jieba.cut("我叫孙宇晨,来自广东广州!")
print("内容(模式是精准模式):"+"/".join(s_list))
s_list=jieba.cut_for_search("我是孙宇晨,网传百万男孩,毕业于湖南科学院计算机")
print("内容(cut_for_search):"+"/".join(s_list))
输出结果:
我自称孙宇晨来自广东广州!
本人是孙宇晨传闻千万年轻人毕业于湖南科学与技术大学的计算机相关专业
2、添加自定义词典
开发者可配置一套自定义词典以补充现有词汇库,并非必要时可选择直接使用已有词汇以节省时间与资源消耗。通过新增个性化词汇可更好地满足项目特定需求
注
机器学习 3 i
云计算 5 r
常山赵子龙 6
河北上将
我叫孙宇晨 5 v
来自广东
运行代码
#自定义字典文件
jieba.load_userdict("dict.txt")
s_list = jieba.cut("我叫孙宇晨,来自广东广州!")
print("内容(自定义词典):"+"/".join(s_list))
运行结果:
内容(自定义词典):我叫孙宇晨/,/来自广东/广州/!
修改默认词典内容
支持根据需要调整各个单独词的频率,并使其实现实现在(或不)被识别出来
注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。
#将“广州”分词为”广“和”州“两个词
jieba.suggest_freq(('广','州'),True)
s_list = jieba.cut("我叫孙宇晨,来自广东广州!",HMM=False)
print("内容(分离):"+"/".join(s_list))
#将“广东”和 “广” 合并成为“广东广”这个词
jieba.suggest_freq('广东广', True)
s_list = jieba.cut("我叫孙宇晨,来自广东广州!",HMM=False)
print("内容(合并):"+"/".join(s_list))
运行结果:
内容(分离):我叫孙宇晨/,/来自广东/广/州/!
内容(合并):我叫孙宇晨/,/来自/广东广/州/!
3、词性标注
**jieba.posseg** 新建自定义分词器,可以查询每个词对应的词性
实例代码:
#查看默认词性,和自己设定词典的词性
import jieba.posseg as pseg
words = pseg.cut("我叫孙宇晨,来自广东广州!机器学习云计算常山赵子龙河北上将",HMM=False)
for word,index in words:
print(' 词性:',word," \t ",index)
运行结果:
属于我者为孙宇晨 n 属于我者为 x 来自 v 广东广 x 属于我者为 州 n 属于我者为!x 属于我者为机器学习 i 属于我者为云计算 d 属于我者为常山赵子龙 x 属于我者为河北上将 x
4、获取词的起始位置
jieba.Tokenize :返回词语在原文的起止位置
示例代码:
tk_list=jieba.tokenize(u'我叫孙宇晨,来自广东广州!机器学习云计算常山赵子龙河北上将')
for tk in tk_list:
print("内容:",tk[0],"\tstart:",tk[1],"\tend:",tk[2])
运行结果:
孙宇晨是我的名字。
孙宇晨源自广东省。
常山赵子龙来自常山县。
wordcloud类库使用介绍
首先来一个最简单的用法
WordCloud类是一个用于创建和管理词云的对象。
通过调用generate方法可以在WordCloud对象中导入并处理指定的文本文件txt。
调用to_file方法可以在指定路径下生成并保存词云图,并根据参数选择图片格式为.png或.jpg。
示例代码:
import wordcloud
w=wordcloud.WordCloud()
w.generate("hello world")
w.to_file("helloworld.png")
输出结果:

wordcloud如何将文本转化为词云
-
- 分割:基于空格进行区分
-
- 统计:计算单词频率并筛选出高频词
-
- 字体:基于统计结果设置字符大小
-
- 布局:设定显示参数包括颜色和显示区域尺寸
该WordCloud对象支持以下常用参数设置。允许多个参数同时配置于同一个WordCloud对象中,并通过逗号分隔符分隔。
w=wordcloud.WordCloud(width=600) #指定词云对象生成图片的宽度,默认400像素
w=wordcloud.WordCloud(height=400) #指定词云对象生成图片的高度,默认200像素
w=wordcloud.WordCloud(min_font_size=10) #指定词云中字体的最小字号,默认4号
w=wordcloud.WordCloud(max_font_size=20) #指定词云中字体的最大字号,根据高度自动调节
w=wordcloud.WordCloud(font_step=2) #指定词云中字体字号的步进间隔,默认为1
w=wordcloud.WordCloud(font_path="msyh.ttc") #指定文体文件的路径,默认None
w=wordcloud.WordCloud(max_words=20) #指定词云显示的最大单词数量,默认200
w=wordcloud.WordCloud(stop_words="Python") #指定词云的排除词列表,即不显示的单词列表
w=wordcloud.WordCloud(background_color="white") #指定词云图片的背景颜色,默认为黑色
新增参数的例子:
w=wordcloud.WordCloud(width=400,
height=300,
min_font_size=10,
max_font_size=200,
font_step=2,
background_color="yellow"
)
w.generate("hello world hello hello python")
w.to_file("helloworld.png")
运行结果:

wordcloud结合jieba类库综合使用
wordcloud负责数据展示,jieba负责数据处理,分工明确。
首先来一个简单的综合例子:
需求:实现对一段文字进行分词操作后生成词云图的具体流程如下:
Python作为一门跨平台的程序设计语言,在编程领域占据重要地位。
该语言特点包括:作为一门跨平台、支持多种编程 paradigms 的程序设计语言。
具体来说:
- Python最初被设计用于编写自动化脚本(如shell),并随着版本升级和功能拓展逐步发展成为独立开发大型项目的工具。
- 这种编程范式的演变使得Python在数据科学、人工智能等多个领域得到了广泛应用。
实现如下:
import jieba
import wordcloud
txt="Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,
最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,
越多被用于独立的、大型项目的开发。"
w=wordcloud.WordCloud(width=850,
height=600,
background_color="#33ffcc",
font_path="water.ttf"
)
w.generate(" ".join(jieba.cut(txt)))
print(" ".join(jieba.cut(txt)))
w.to_file("python.png")
运行结果:

设置图片形状显示
ImageColorGenerator和recolor
案例代码:
import jieba
import wordcloud
import numpy as np
from os import path
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
txt="Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言," \
"最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加," \
"越多被用于独立的、大型项目的开发。"
d = path.dirname(__file__)
#拿我的头像作为背景图片
back_coloring=np.array(Image.open(path.join(d,"黑白调小女孩.jpg")))
#设置中文字符集和图片背景颜色,还有图片显示区域
w=wordcloud.WordCloud(width=850,
height=600,
background_color="#33ffcc",
font_path="water.ttf",
mask=back_coloring
)
w.generate(" ".join(jieba.cut(txt)))
image_colors = ImageColorGenerator(back_coloring)
#将字体颜色与图片颜色一致
w.recolor(color_func=image_colors)
w.to_file("Python.png")
我头像图片:

执行结果:

ps:可以更换喜欢的一张图片;此外,可以选择阅读一篇较长的文字内容。
附上免费ttf字体下载地址:http://www.zhaozi.cn/s/all/ttf/
