wordcloud 词云绘制
- 准备
-
- 1.1 相应python库的安装
- 1.2 文件准备
- 知识储备
-
- 使用wordcloud绘制
-
- 1.1 词频分析
-
- 1.1.1 python库导入
- 1.1.2 文件内容读取
- 1.1.3 文本处理
-
- 1.1.3.1 英文文本
- 1.1.3.2 中文文本
- 1.2 词云绘制
-
- 1.2.1 无背景词云
-
- 1.2.2 无背景频率词云
-
- 1.2.3 背景词云
-
-
- 1.2.3.1 英文文本
-
- 1.2.3.2 中文文本
-
- 源码
- 参考文章
准备
1.1 相应python库的安装
库 |
作用 |
re |
正则表达式库 |
collections |
词频统计库 |
numpy |
numpy数据处理库 |
jieba |
分词 |
wordcloud |
词云展示库 |
PIL |
图像处理库 |
matplotlib |
图像展示库 |
1.2 文件准备
- 准备用以文本分析的文件;
1.1 命名为practice.txt, 保存在目标路径下, e.g. /Desktop/practice.txt
1.2 如文本中有中文单词,下载中文字体文件并保存在目标路径下, e.g. /Desktop/chinese.stzhongs
- 准备用作词云展示的图片,命名为image.jpg, 保存自目标路径下, e.g. /Desktop/image.jpg
- 使用相应的库进行词云绘制:
3.1 wordcloud:
3.1.1 使用 jieba将数据进行清洗,清洗前为txt文件,清洗后变为以空格分隔的词语字符串string
3.1.2 将字符串string传给wordcloud进行绘图即可
知识储备
1.1 jieba
方法 |
作用 |
jieba.cut(text) |
将text切分为若干组词语, 返回生成器 |
jieba.lcut(text) |
返回列表 |
1.2 wordcloud
- 词云每次随机生成,再次运行则生成新词云。
- wordcloud.to_file(‘myfig.png’)的方法生成词云比plt.savefig更清楚,后者不能反映词云设置的大小等参数。
参数 |
作用 |
width |
指定词云对象生成图片的宽度,,默认400像素 |
height |
指定词云对象生成图片的高度,默认200像素 |
mask |
指定词云形状,默认为长方形,需要引用imread()函数 |
min_font_size |
指定词云中字体的最小字号,默认4号 |
max_font_size |
指定词云中字体的最大字号,根据高度自动调节 |
font_step |
指定词云中字体字号的步进间隔,默认为1 |
font_path |
指定字体文件的路径,默认None |
max_words |
指定词云显示的最大单词数量,默认200 |
stop_words |
指定词云的排除词列表,即不显示的单词列表 |
background_color |
指定词云图片的背景颜色,默认为黑色 |
使用wordcloud绘制
1.1 词频分析
1.1.1 python库导入
import os
import re # 正则表达式
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba # 分词
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库
from wordcloud import WordCloud, ImageColorGenerator # 词云展示库
from imageio import imread # 图像处理库,读取照片RGB内容,转换照片格式
1.1.2 文件内容读取
# 读取英文文件
f = open('C://Users//Administrator//Desktop//practice.txt','rt') # 打开目标路径下的目标文件
fd = f.read() # 读取文件内容
# 等同于 f = open('C://Users//Administrator//Desktop//practice.txt', 'rt').read()
f.close()
# 等同于 f = open('C://Users//Administrator//Desktop//practice_2.txt',encoding='gbk').read()
# 等同于 f = open('C://Users//Administrator//Desktop//practice_2.csv',encoding='utf-8').read()
# 等同于 fd = open('C://Users//Administrator//Desktop//practice.txt', 'rt').read()
1.1.3 文本处理
1.1.3.1 英文文本
# 文本预处理
pattern = re.compile(u'\t|\'|\n|\.|-|_|#|:|:|;|\||/||(|)|\?|"') # 正则表达式匹配模式
fd = re.sub(pattern, '', fd) # 将符合模式的字符去除
# 文本分词
seg = jieba.cut(fd, cut_all=False) # 以空格将fd切分开,得到一个以空格分隔的词语字符串,供后面调用;
# print(type(seg))
# print(seg)
# 去除词库
# rwlist = [line.strip() for line in open('C://Users//Administrator//Desktop//rw.txt').readlines()]
# rwlist = [rw.strip() for rw in open('C://Users//Administrator//Desktop//rw.txt').read()]
rwlist = [u'-', ' ', 'u', '@', ',', u'( ', u')']
# 文本清洗
words = []
for word in seg:
if word not in rwlist and len(word) >= 1:
words.append(word.replace(' ', '')) # 如果词语不在去除词库中且长度大于1,添加进words列表’
# words.append(word)
cloud_text = ",".join(words) # 将分好的词用某个符号分割开连成字符串
# cloud_text = words
# 词频统计
count = collections.Counter(cloud_text) # 对列表中的词语做词频统计
count_top5 = count.most_common(5) # 获取词频统计中出现频率最高10位
print(type(count_top5))
for i in count_top5:
print('character: ', i[0], ';', 'count: ', i[1])
# generate_from_frequencies(dict)方法生成频率词云, 会囊括所有单词及其频率
wc = WordCloud(background_color='white')
cloud_word=WordCloud.process_text(wc,fd) # 用process_word()方法统计文本中所有单词出现的频率,返回dict(单词,频率)
print(type(cloud_word)) # type(cloud_word) = dict
# print(cloud_word)
for key, value in cloud_word.items():
print('character: ', key, ';', 'count: ', value)
1.1.3.2 中文文本
# 文本预处理
pattern = re.compile(u'\t|\'|\n|\.|-|_|#|:|:|;|\||/||(|)|\?|"') # 正则表达式匹配模式
fd = re.sub(pattern, '', fd) # 将符合模式的字符去除
# 文本分词
seg = jieba.cut(fd, cut_all=False)
# print(type(seg))
# print(seg)
# 去除词库
# rwlist = [line.strip() for line in open('C://Users//Administrator//Desktop//rw.txt').readlines()]
# rwlist = [rw.strip() for rw in open('C://Users//Administrator//Desktop//rw.txt').read()]
rwlist = [u'-', ' ', 'u', '@', ',', u'( ', u')']
# 文本清洗
words = []
for word in seg:
if word not in rwlist and len(word) >= 1:
words.append(word.replace(' ', '')) # 如果词语不在去除词库中且长度大于1,添加进words列表’
# words.append(word)
cloud_text = ",".join(words)
# cloud_text = words
# 词频统计
count = collections.Counter(cloud_text) # 对列表中的词语做词频统计
count_top5 = count.most_common(5) # 获取词频统计中出现频率最高10位
print(type(count_top5))
for i in count_top5:
print('character: ', i[0], ';', 'count: ', i[1])
1.2 词云绘制
1.2.1 无背景词云
wc = WordCloud(
background_color='white', # 背景颜色默认是black,此处设置为white
width=900,
height=600,
max_words=100, # 词云显示的最大词语数量
max_font_size=99, # 设置字体最大值
min_font_size=16, # 设置子图最小值
random_state=50 # 设置随机生成状态,即多少种配色方案
).generate(fd)
plt.imshow(wc, interpolation='bilinear') # 显示生成的词云图片
plt.axis('off') # 显示设置词云图中无坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show()
词云图
1.2.2 无背景频率词云
wc = WordCloud(
background_color='white', # 背景颜色默认是black,此处设置为white
width=900,
height=600,
max_words=100, # 词云显示的最大词语数量
max_font_size=99, # 设置字体最大值
min_font_size=16, # 设置子图最小值
random_state=50 # 设置随机生成状态,即多少种配色方案
).generate_from_frequencies(count) # 频率越大的单词词云中字体越大。
plt.imshow(wc, interpolation='bilinear') # 显示生成的词云图片
plt.axis('off') # 显示设置词云图中无坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show(
词云图
1.2.3 背景词云
背景图
1.2.3.1 英文文本
jpg = imread('C://Users//Administrator//Desktop//image.jpg') # 读取背景图片
wc = WordCloud( # 生成词云
mask = jpg,
background_color="white",
width = 1500,
height = 960,
margin = 10
).generate(cloud_text)
plt.imshow(wc) # 绘制图片
plt.axis("off") # 去除坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show()
词云图
jpg = Image.open('C://Users//Administrator//Desktop//image.jpg') # 读取背景图片
mask = np.array(jpg) # 图片转化为数组
#等同于 mask = np.array(Image.open('C:/Users/Violette/Desktop/data/heart.png'))
wc=WordCloud(
background_color="white",
width=600,
max_words=100,
mask=mask).generate(cloud_text)
image_colors = ImageColorGenerator(mask) # 提取mask颜色
# wordcloud.recolor(color_func=image_colors) # 重置颜色函数
image = wc.to_image()
fig,axes = plt.subplots(1,2)
axes[0].imshow(wc) # 不设置颜色
axes[1].imshow(wc.recolor(color_func=image_colors)) # 将词云颜色设置为mask的颜色
for ax in axes:
ax.set_axis_off() # 去除坐标轴
plt.savefig('C://Users//Administrator//Desktop//wordcloud.jpg')
plt.show()
词云图
1.2.3.2 中文文本
# 词云绘制
jpg = imread('C://Users//Administrator//Desktop//image.jpg') # 读取背景图片
wc = WordCloud( # 生成词云
mask = jpg,
font_path = 'C://Users//Administrator//Desktop//chinesestzhongs.ttf',
background_color="white",
width = 1500,
height = 960,
margin = 10
).generate(cloud_text)
plt.imshow(wc) # 绘制图片
plt.axis("off") # 去除坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show()
词云图
源码
wordcloud
参考文章
- jieba:
成功避开python安装jieba库的各种坑.
五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP.
通俗易懂理解——jieba中的HMM中文分词原理.
- wordcloud:
Python安装第三方库的常见方法(以word cloud 为例).
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐).
- imageio:
python 编程中的一个关于图片的库 imageio (读取照片RGB内容,转换照片格式).
- 词云绘制:
PYTHON自定义背景画词云.
Python词云wordcloud——根据词语生成图像.
PYTHON自定义背景画词云.
pycharm中报错:Error: failed to send plot to http://127.0.0.1:63342.
如何使用python绘制词云图wordcloud(超详细).
Python数据可视化 词云图 绘制词云的方法总结.