大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解基于wordcloud庫實現詞云圖
視頻在線地址:
2026版【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts+爬蟲) 視頻教程 (火爆連載更新中..)_嗶哩嗶哩_bilibili
課程簡介:
本課程采用主流的Python技術棧實現,Mysql8數據庫,Flask后端,Pandas數據分析,前端可視化圖表采用echarts,以及requests庫,snowNLP進行情感分析,詞頻統計,包括大量的數據統計及分析技巧。
實現了,用戶登錄,注冊,爬取微博帖子和評論信息,進行了熱詞統計以及輿情分析,以及基于echarts實現了數據可視化,包括微博文章分析,微博IP分析,微博評論分析,微博輿情分析。最后也基于wordcloud庫實現了詞云圖,包括微博內容詞云圖,微博評論詞云圖,微博評論用戶詞云圖等功能。
基于wordcloud庫實現詞云圖
詞云(Word Cloud) 是一種文本數據可視化形式,通過不同大小、顏色和布局的詞匯展示文本中的關鍵詞頻率。詞匯出現頻率越高,在詞云中顯示得越大、越突出。常用于快速識別文本主題、情感分析或數據摘要。
核心特點
-
視覺突出:高頻詞匯尺寸更大、更醒目
-
自定義靈活:支持形狀、顏色、字體等深度定制
-
快速洞察:一眼識別文本核心主題
-
應用廣泛:社交媒體分析、用戶評論摘要、報告生成等
安裝wordcloud庫
pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple
以下是 wordcloud.WordCloud
類構造方法的完整參數說明,掌握這些參數可以創建高度定制化的詞云:
WordCloud(# 核心參數font_path=None, # 字體路徑(解決中文顯示必備)width=400, # 圖像寬度(像素)height=200, # 圖像高度(像素)margin=2, # 邊距(像素)# 顏色與樣式background_color="black", # 背景色colormap=None, # 顏色映射(如'viridis'/'plasma',與color_func二選一)color_func=None, # 自定義顏色函數# 文本處理max_words=200, # 最大顯示詞數stopwords=None, # 停用詞集合min_word_length=0, # 最小詞長(過濾短詞)collocations=True, # 是否包含雙詞搭配(bigram)# 字體控制max_font_size=None, # 最大字體尺寸(自動計算)min_font_size=4, # 最小字體尺寸font_step=1, # 字體步進值(越大渲染越快)relative_scaling=.5, # 詞頻縮放比例(0-1,1為線性)# 布局與形狀mask=None, # 形狀蒙版(numpy數組)contour_width=0, # 輪廓線寬contour_color='black',# 輪廓顏色# 重復詞處理repeat=False, # 是否允許重復詞include_numbers=False, # 是否包含數字normalize_plurals=True # 復數歸一化(如word/words)# 其他高級參數prefer_horizontal=.9, # 水平詞比例(0.9=90%詞水平)scale=1, # 圖像縮放比例(>1提高分辨率)random_state=None, # 隨機種子(固定布局)collocation_threshold=30, # 雙詞搭配閾值mode="RGB", # 圖像模式(RGB/RGBA)
)
常用參數詳解
參數 | 說明 | 示例值 |
---|---|---|
width /height | 圖片尺寸 | 800 , 400 |
background_color | 背景色 | "white" , "#000000" |
max_words | 最大詞匯數量 | 200 |
colormap | 顏色映射 | "viridis" , "tab20" |
mask | 形狀模板 | numpy數組 |
stopwords | 停用詞表 | set(["a", "the"]) |
font_path | 字體路徑 | "arial.ttf" |
下面是示例代碼:
import sysimport numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from wordcloud import WordCloudsys.path.append('static')if __name__ == '__main__':text = "牛掰 牛逼 大佬 我去 張三 卡卡 嘿嘿 哈哈 生成 商城 氣死我了 不去 就不要 好滴 驕傲 好的 大戰 發展 求生 共存 火了 劉安 伙計 火雞 打火機"img = Image.open('article_mask.jpg') # 形狀模版圖片img_arr = np.array(img) # 轉成圖片數組對象wc = WordCloud(width=800,height=600,background_color='white',colormap='Blues',font_path='STHUPO.TTF',mask=img_arr)wc.generate_from_text(text)# 繪制圖片plt.imshow(wc)# 不顯示坐標軸plt.axis('off')outImg = 'wordcloud_test.jpg'plt.savefig('wordcloud_test.jpg', dpi=500)
我們可以封裝下,做成一個生成詞云圖的工具方法genWordCloudPic(),其他地方就可以傳參直接調用生成詞云圖。
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from wordcloud import WordClouddef genWordCloudPic(str, maskImg, outImg):"""生成云圖:param str: 詞云 空格隔開:param maskImg: 形狀模版圖片:param outImg: 輸出的詞云圖文件名:return:"""img = Image.open(maskImg) # 形狀模版圖片img_arr = np.array(img) # 轉成圖片數組對象wc = WordCloud(width=800,height=600,background_color='white',colormap='Blues',font_path='STHUPO.TTF',mask=img_arr)wc.generate_from_text(str)# 繪制圖片plt.imshow(wc)# 不顯示坐標軸plt.axis('off')plt.savefig(outImg, dpi=500)if __name__ == '__main__':text = "牛掰2 牛逼 大佬 我去 張三 卡卡 嘿嘿 哈哈 生成 商城 氣死我了 不去 就不要 好滴 驕傲 好的 大戰 發展 求生 共存 火了 劉安 伙計 火雞 打火機"genWordCloudPic(text, 'comment_mask.jpg', 'wordcloud_test2.jpg')
運行生成: