1. 程式人生 > >如何生成關鍵詞雲圖

如何生成關鍵詞雲圖

1、商業化雲圖

參考知乎
1、用了國內的一個圖悅,第一眼覺得生成的圖片形狀很侷限,且關鍵字都擠在一起,大小區別也不明顯,顏色雜亂。
這裡寫圖片描述

匯出其excel結果表,相比較我簡單粗暴的jieba統計,這個更高階一下,對不同長度的詞都智慧提煉出來了。下面看一下它的介紹學習
介紹

TF:熱詞詞頻指標
TF指標是一個詞在文章中出現次數,出現的次數越多一般越重要,輸出的詞頻資訊只是參考,目前採用的分詞方法是大詞優先,不是以小詞優先的,比如“改革”和“改革開放”都是詞,在統計詞頻時,“改革開放”中的“改革”不會計入“改革”的詞頻,算兩個不同的詞,輸出的圖有“熱詞詞頻圖”、“詞頻柱狀圖”,圖形模式可自選。

Score,熱詞權重指標

1) Score指標是指一個詞在文章中重要性,主要由TF熱詞詞頻,IDF倒轉文件頻率,other其它三個指標決定,輸出的圖有熱詞權重圖,圖形模式可自選。
2) IDF,“倒轉文件頻率”,表示詞的區分能力,區分能力越差的詞其主題代表性越弱,比如各種常用詞如“如果”;詞在文章中的位置因素;
3) Other,詞在文章中與其他詞的語義聚合程度等。

所以這個優點在於大詞優先和IDF

IDF:TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。
—–大致是說這些詞在大部分文章中都用到的多,一般是個常用詞,在該篇文章中沒有特指性,所以重要性會低。
TFIDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。

2、BDP個人版
需要註冊 懶。。BDP
這是一款資料視覺化工具,除了詞雲,還有很多其他酷炫的圖表,如GIS地圖、漏斗圖、瀑布圖、桑基圖等,來了解它們的詞雲。工具很容易上手,直接把詞語這個資料拉到維度欄,再選擇詞雲就瞬間呈現詞雲圖表,BDP會自動算好詞頻,你可以設定顏色,快速實現詞雲視覺化,特別簡單。
不是專門製作詞雲的工具,但是還有幾十種圖表供你使用,是一款比較好的資料分析工具。
3、藍標
BlueView詞雲工具。藍標
————————————————————————————————————————
以上均是一些商業化的平臺,下面我自己試著做一個:
參考文章

1、準備工作

python中有第三方包可以用:wordcloud,下載安裝如下:
1)直接cmd中

pip install wordcloud

提示錯誤如下:

Failed building wheel for wordcloud
Running setup.py clean for wordcloud
Failed to build wordcloud
Installing collected packages: wordcloud
Running setup.py install for wordcloud ... error

[解決方法參考]123
然後根據參考文章,自行下載whl安裝檔案:wrapt‑1.10.10‑cp36‑cp36m‑win_amd64.whl檔案(下載連結),然後到本檔案所在目錄執行。
切換到安裝目錄下:

cd D:\download

執行安裝:

pip install wordcloud-1.3.2-cp35-cp35m-win_amd64.whl

然而還是出錯,提示:

Requirement 'wordcloud-1.3.2-cp35-cp35m-win_amd64.whl' looks like a filename, bu
t the file does not exist
wordcloud-1.3.2-cp35-cp35m-win_amd64.whl is not a supported wheel on this platfo
rm.

發現因為字尾名是.whl,所以要先安裝wheel。
但是 pip install wheel 提示我已經存在d:\anaconda\lib\site-packages。
反正不管我怎麼把whl檔案放到同一檔案下,都無法找到檔案,用dir檢視一下當前的路徑發現是目錄切換沒成功:
如果要切換碟符的目錄,正確的用法是在cd 和路徑中間 增加一個“/d”,如cd /d d:
所以在這裡,正確的語句是:

cd /d D:\download

如此切換成功後, 也不用自己下載安裝包了,直接pip即可。
這裡寫圖片描述

至此,準備工作完畢,可以引入wordcloud包了:

from wordcloud import WordCloud

生成雲圖

參考文章
自己程式碼如下:

import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba #1-3行分別匯入畫圖的庫,詞雲生成庫,jieba分詞庫
text_from_file_with_apath = open('/Users/Administrator/shijiuda.txt').read() #讀取本地檔案
wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all = True)
wl_space_split = " ".join(wordlist_after_jieba) # 使用結巴進行分詞,並對分詞結果以空格隔開
my_wordcloud = WordCloud().generate(wl_space_split)  #對分詞後的文字生成詞雲
plt.imshow(my_wordcloud) #用pyplot展示詞雲圖
plt.axis("off")
plt.show()

注:其中讀取本地檔案,試了放在D盤的檔案讀不到, No such file or directory: ‘/桌面/shijiuda.txt’。或者加上D:也不行,而直接讀取C盤的可以。不知道是不是預設目錄的問題?
但是執行以上程式碼,得到的結果並不樂觀,如下:
這裡寫圖片描述

其中wl_space_split結果是正確的,應該是沒有設定字型格式的緣故,所以顯示不了中文。

後來發現原來作者也遇到了同樣的問題:

遇到的一個小坑,剛開始執行這十行程式碼的時候,只顯式了若干彩色的小矩形框,中文詞語顯式不出來,以為是萬惡的UTF8問題,debug一下,發現print結巴分詞的結果是可以顯示中文的,那就是wordcloud 生成詞語的字型庫問題了。開源的好處來了,直接進入wordcloud.py 的原始碼,找字型庫相關的程式碼。

注:此時小白就去找wordcloud原始碼了,在Python的安裝目錄下面,有個sites package什麼的目錄,所以直接搜到:D:\anaconda\Lib\site-packages\wordcloud,開啟wordcloud.py,直接找到以下:

FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__), "DroidSansMono.ttf"))

wordcloud 預設使用了DroidSansMono.ttf 字型庫,改一下換成一個支援中文的ttf 字型檔,比如simsun.ttf(宋體)、simhei(黑體 )、msyh(微軟雅黑 ),儲存修改原始碼。在這裡,又出現一個坑,本來直接改成simsun.ttf,再次執行時,突然提示”cannot open resource“,找不到字型的資原始檔,那麼可能是因為simsun.ttf檔名不對,直接去Windows/fonts目錄下看看,發現名字後面少了個b。
這裡寫圖片描述

然而以上這些坑都改完以後發現還是方框,大哭,再次查詢原因:參考1參考2
再次修改如下:

wc1 = WordCloud(
     background_color="black",
     width=4000,
     height=2860,
     max_words = 100,
     font_path="C:\Windows\Fonts\STFANGSO.ttf", #必須在此加一句,在原始碼裡面改並沒有效果。
     random_state = 15,
     margin=2)
wc2 = wc1.generate(wl_space_split)

plt.imshow(wc2)
plt.axis("off")
plt.show()

至此終於顯示中文了~
這裡寫圖片描述
但是還是不夠好看,且關鍵詞有點不合理,“會主”這種明顯分錯了。
接下來調整一下。
1)調整jieba分詞模式:高頻詞發生變化。

wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all = False)

2)調整詞圖設定:

background_color = 'white', # 設定背景顏色
mask = backgroud_Image, # 設定背景圖片
max_words = 2000, # 設定最大現實的字數
stopwords = STOPWORDS, # 設定停用詞
font_path = 'C:/Users/Windows/fonts/msyh.ttf',# 設定字型格式,如不設定顯示不了中文
max_font_size = 50, # 設定字型最大值
random_state = 30, # 設定有多少種隨機生成狀態,即有多少種配色方案

width,height 顧名思義,畫布的長寬。
prefer_horizontal :詞雲的字型優先水平放置
mask:這是背景的形狀,預設是畫布的形狀。
修改完好看一些:
這裡寫圖片描述
3)我想按照指定圖片顏色和形狀畫(參考),改了幾次發現都沒成功。後來得知是我自己沒有引入包的緣故,導致不能採用圖片顏色。

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
backgroud_Image = plt.imread('/Users/Administrator/timg.jpg')
image_colors = ImageColorGenerator(backgroud_Image)
plt.imshow(wc2.recolor(color_func=image_colors))
plt.axis("off")
plt.show()

黨徽顏色:
這裡寫圖片描述

OK!下面還想搞個圖形,比如黨徽圖形。