文本分析相關(guān)的問題經(jīng)常會(huì)用到詞云圖這種可視化形式蛆挫,因此特意開一個(gè)博客記錄一下詞云圖相關(guān)妙黍。
首先推薦幾個(gè)詞云圖生成網(wǎng)頁,如果只有少量詞的話用網(wǎng)頁可能會(huì)方便一點(diǎn)拭嫁。
Tendcode
這個(gè)工具非常簡(jiǎn)單可免,也是免費(fèi)的做粤。
https://tendcode.com/tool/word-cloud/
缺點(diǎn)在于生成的圖看起來還是有點(diǎn)草率了。怕品。
詞云文字
這個(gè)網(wǎng)站功能多但是免費(fèi)版最多支持20個(gè)詞
https://www.ciyunwenzi.com/web/ciyun/#/ciyun/data
最后就是我們的python啦
python畫詞云圖的庫是wordcloud,使用步驟大概是調(diào)庫,配置參數(shù)肉康,生成,保存圖片四步
1. 調(diào)庫
from wordcloud import WordCloud
2. 配置參數(shù)
wc= wordcloud.WordCloud(<參數(shù)>)
wc = WordCloud( width=500, height=400, mode="RGBA",
background_color=None)
3. 生成
wc.generate(text)
此處的text是一個(gè)字符串涨薪,即詞云圖中所有詞通過空格連接起來合成的字符串:比如“科技 科技 創(chuàng)新 發(fā)展....”
但很多時(shí)候我們的輸入都是一個(gè)txt文件如何轉(zhuǎn)化成長字符串呢?這里就會(huì)用到j(luò)ieba這個(gè)庫刚夺,jiaba是python中文分詞的一個(gè)庫,輸入txt文件jieba會(huì)幫忙分詞并連接末捣。具體用法如下:
import jieba
text = open("/Users/yezizhi/Desktop/test.txt", encoding="utf-8").read() # 標(biāo)明文本路徑,打開
text = ' '.join(jieba.cut(text))
4. 保存圖片
# 顯示詞云圖
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存文件
wc.to_file("/Users/yezizhi/Desktop/all_word_cloud.png")
然后我就發(fā)現(xiàn)自己的詞云圖是這個(gè)樣子的??塔粒!
在網(wǎng)上查閱資料得知,應(yīng)該在詞云圖配置那一步增加“collocations=False,”避免出現(xiàn)重復(fù)圖卒茬,第二步修改為
wc = WordCloud( width=500, height=400, mode="RGBA",
background_color=None,collocations=False,)
完整代碼
def word_cloud():
# 導(dǎo)入txt文件
text = open("/Users/yezizhi/Desktop/test.txt", encoding="utf-8").read() # 標(biāo)明文本路徑,打開
text = ' '.join(jieba.cut(text))
# 生成對(duì)象
wc = WordCloud(width=500, height=400, mode="RGBA",collocations=False,
background_color=None).generate(text)
# 顯示詞云圖
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存文件
wc.to_file("/Users/yezizhi/Desktop/all_word_cloud.png")
下面這段代碼是因?yàn)槲业妮斎胧且粋€(gè)xls文件圃酵,第一列是詞,第二列是對(duì)應(yīng)詞頻郭赐,因此我就自己手動(dòng)拼接成了一個(gè)長字符串,大家如果有不同的輸入也是同理,給word_cloud一個(gè)長字符串就好了俘陷,不過注意詞與詞之間空格連接。
def xlsx_word_cloud():
data = pd.read_excel('整體詞頻.xlsx')
data_cy = data.copy()
max_word = 300
string_data = ''
for i_row in range(1,max_word):
times = data.iloc[i_row, 1]
for i_time in range(1,times):
string_data += data.iloc[i_row, 0]
string_data += " "
wc = WordCloud(width=500, height=400, mode="RGBA",
background_color=None,collocations=False,).generate(string_data)
# 顯示詞云圖
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
# 保存文件
wc.to_file("/Users/yezizhi/Desktop/all_word_cloud.png")