WordCloud 词云
主要步骤:
- 准备素材,可以是爬取的内容,也可以是手动输入的内容,是字符串即可,这里是使用前面爬取并保存在本地excel的豆瓣top250榜单;
- 使用jieba将字符串分词,jieba.cut()会将我们的句子分词一个个词语;
- 准备掩饰图片,掩饰图片就是词云显示各个词语的背景范围,默认是矩形背景;
- 将词云转换成图片输出,同时保存图片到本地,注意,先保存图片之后再显示图片,互换顺序有可能会出现保存空白图的情况;
主要代码:
# -*- coding = utf-8 -*-
# 词云
import wordcloud as wd
# 分词,支持中文
import jieba
# 绘图,数据可视化
from matplotlib import pyplot as plt
# 矩阵运算
import numpy as np
# 操作excel主要用到xlrd和xlwt这两个库,xlrd是读excel,xlwt是写excel
import xlrd
# 图片处理
from PIL import Image
# 准备词云所需的数据,获取excel数据,这里以第5列的电影名言(总结)为例
def get_data_excel(excel_path):
# 打开excel,并创建excel对象
excel = xlrd.open_workbook(excel_path)
# 选择excel中下标为0的工作表,就是excel文件中的第一个sheet表
sheet = excel.sheets()[0]
# 获取第一行的内容, 索引从0开始
# row = sheet.row_values(0)
# 获取第一列的整列的内容
# col = sheet.col_values(0)
# 获取下标第0列,[0, 4)行数据,0~3行 (不包括第4行)
# print(sheet.col_values(0, 0, 4))
# 获取下标第0行,[0, 5)列数据,0~4列 (不包括第5列)
# print(sheet.row_values(0, 0, 5))
# 获取单个单元格数据,第几行第几个,索引从0开始
# data = sheet.cell(2, 0).value
# 获取第5列的电影名言作为内容分析
data_list = sheet.col_values(5)
# 把第5列第一行的标题 "电影名言" 去掉
data_list.remove('电影名言')
# 打印查看获取的内容
# for data in data_list:
# print(data, end='\n')
# 将所有的名言连接成一个字符串,便于词云分析
contents = ""
for data in data_list:
# 将内容添加到contents末尾
contents += data
# print(contents)
return contents
# 词云分析
def word_cloud(data):
# 使用jieba.cut切分str句子
word = jieba.cut(data)
# 使用空格隔开,看看句子分词的个数,以及其效果
word_all = ' '.join(word)
# print(f"The number of word is {len(word_all)}")
# print(word_all)
# 使用Image打开模板图片
# 打开树形图
img_tree = Image.open('../Data/img/tree.jpg')
# 将图片的像素点转换成矩阵数据
tree_array = np.array(img_tree)
# 打开哆啦A梦图片
img_love = Image.open('../Data/img/哆啦A梦.jpg')
# 将图片的像素点转换成矩阵数据
love_array = np.array(img_love)
# 生成词云的对象,并设置格式
tree = wd.WordCloud(
# 设置词云的背景颜色,这里设置成白色
background_color='white',
# 掩饰背景,就是存放词云的背景区域,默认是矩形,以下三个测试背景选择一个就好
# mask=None,
# 使用树形图作为背景
mask=tree_array,
# 使用哆啦A梦作为背景
# mask=love_array,
# 在C盘目录下搜索 Fonts,选择一个字体,右键查看属性,复制常规项里面的 完整名称
# 设置字体,不然可能不支持中文,simsun.ttc是本机的宋体字体格式
font_path='simsun.ttc'
)
# 词云对象加入分析句子的来源
tree.generate_from_text(word_all)
# 设置图片的名称和尺寸
plt.figure('电影词云', figsize=(9, 6))
# 设置不使用坐标轴
plt.axis('off')
# 将词云对象放入图片中
plt.imshow(tree)
# 保存图片,注意先savefig()再show(),否则保存的图片可能一片空白,dpi是图像每英寸长度内的像素点数
plt.savefig('../Data/img/film.jpg', dpi=500)
# 显示图片
plt.show()
# 主程序
def main():
# excel保存路径
excel_path = '../Data/excel/top250.xls'
# 获取excel数据
data = get_data_excel(excel_path)
# 词云分析
word_cloud(data)
# 主程序入口
if __name__ == '__main__':
main()
使用默认生成词云
使用树形掩饰
使用哆啦A梦掩饰
可能有些人跟我一样也很喜欢哆啦A梦,所以一定要附上哆啦A梦的图片
附上树形底图