主要步驟:
- 准備素材,可以是爬取的內容,也可以是手動輸入的內容,是字符串即可,這里是使用前面爬取並保存在本地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夢的圖片
附上樹形底圖