pyecharts製作詞雲圖

詞雲圖作爲一種分析熱度的可視化圖,在數據分析佔據重要地位,只一眼就可以看出某個事物的重要性。pyecharts和WordCloud都是比較方便的可視化庫,當遇上詞雲圖,會有怎樣的火花呢?我們來期待一下。

1.pyecharts

1.導入包

首先保證自己電腦安裝上了pyecharts包,關於包的安裝就不多說,來來去去就那幾種方法,網上已經說的太多了。

from pyecharts.charts import WordCloud

2.數據準備

用pyecharts畫詞雲時,待分析數據中的每一個詞爲應該爲(word,value)的元組形式,所有詞組成一個列表。其中,word爲我們需要在詞雲圖中顯示的詞彙,value是對應的頻率。在實現操作中,我將word和value分別形成列表進行輸入,結果發現參數個數錯誤,而使用(word,value)的形式就正確。

word=[("數學分析",0.9),("高等代數",0.9),("近世代數",0.6),("計算機網絡",0.8),("現代密碼學",0.5),
      ("c程序設計",0.8),("數據結構與算法",0.9),("泛函分析",0.8),("機器學習實戰",1.0),("數據挖掘導論",0.9)]

3.詞雲圖生成

pyecharts中,主要使用add()函數來生成並設置詞雲圖:

mywordcloud=WordCloud()
#shape詞雲圖輪廓,有’circle’, ‘cardioid’, ‘diamond’, ‘triangleforward’, ‘triangle’, ‘pentagon’, ‘star’可選 
mywordcloud.add("",word,shape='star')
#生成html文件
mywordcloud.render("1.html")

運行程序,得到
在這裏插入圖片描述
是不是很簡單,總結一下,用pyecharts生成詞雲圖

  • 優點
    當鼠標在html文件裏面拖動到某個詞,會出現對應的頻率,方便查看;
    使用簡單,用戶只需要構建好自己的(word,values);
    提供7種不同的詞輪廓,只需要簡單設置.

  • 缺點
    沒有詞雲填充圖片功能,也就是整個詞雲的輪廓爲所給圖片的形狀;
    當所給的是一段文字,需要整理成需要的(word,values),比較複雜.

2.WordCloud

WordCloud雖然沒有pyecharts那麼簡單,但是其製作詞雲圖的功能更強大,可以製作任意形狀的詞雲圖,在舉例子之前,我們先來看看主要的配置參數:(部分引用於wordcloud參數


> 這裏是引用

font_path : string  #字體路徑,默認狀態是隻支持英文,如果是中文需要展現什麼字體就把該字體路徑+後綴名寫上,如:font_path = '黑體.ttf'
width :int #畫布寬度,默認爲400像素
height :int #畫布高度,默認爲200像素
scale: float#水平排版出現的概率,默認0.9,垂直排版概率0.1
mask:nd-array or None (default=None) #當讀取圖片爲背景時,背景色一定要設置成白色
min_font_size : int (default=4)  #最小字體
max_font_size : int or None #一般不設置最好,不然會很小
font_step : int (default=1) #字體步長,如果步長大於1,會加快運算但是可能導致結果出現較大的誤差
max_words : number (default=200) #要顯示的詞的最大個數
stopwords : set of strings or None #使用時需要從wordcloud中導入STOPWORDS,設置需要屏蔽的詞
background_color : color value (default=”black”) #背景顏色
random_state : int or None  #爲每個單詞返回一個PIL顏色
mode : string (default=”RGB”) #當參數爲“RGBA”並且background_color不爲空時,背景爲透明
relative_scaling : float (default=.5) #詞頻和字體大小的關聯性
color_func : callable, default=None #生成新顏色的函數,如果爲空,則使用 self.color_func
regexp : string or None (optional) #使用正則表達式分隔輸入的文本
collocations : bool, default=True #是否包括兩個詞的搭配
colormap : string or matplotlib colormap, default=”viridis” #給每個單詞隨機分配顏色,若指定color_func,則忽略該方法

#重要函數
fit_words(frequencies)  #根據詞頻生成詞雲
generate(text)  #根據文本生成詞雲
generate_from_frequencies(frequencies[, ...])   #根據詞頻生成詞雲
generate_from_text(text)    #根據文本生成詞雲
process_text(text)  #將長文本分詞並去除屏蔽詞(此處指英語,中文分詞還是需要自己用別的庫先行實現,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, colormap])   #對現有輸出重新着色。重新上色會比重新生成整個詞雲快很多
to_array()  #轉化爲 numpy array
to_file(filename)   #輸出到文件

下面我以從微博上"Alex是大叔"關於12星座運勢的語句,部分如下圖
太陽或上升雙子座:任何人都怕斤斤計較的人,你在本週很可能就會遇到這種人,或者自己變成這種人,如果你遇到了斤斤計較的人,拿出你打太極的本領,迂迴過去,自己就會安全過關。但如果你變成了一個斤斤計較的人,你很可能會把一件原本很不錯的事情給搞砸,甚至可能會改變別人本來對你的美好印象。這周隨着滿月發生在你的人際關係宮位,可能會有某個合作敲定下來或者是被人搶走(也可能是取消了、打水漂了),在本週一到週四中午之前你就會知道這個消息,也許可能是你追問獲得的。
我們運用wordcloud來製作詞雲圖。背景圖片爲
在這裏插入圖片描述

from wordcloud import WordCloud,STOPWORDS
from PIL import Image
import matplotlib.pyplot as plt
import jieba
import numpy as np

content=open("1.txt","r",encoding="utf-8").read()
tag=jieba.cut(content)
#一定要用空格將關鍵字串起來
text=" ".join(tag)
#讀入背景圖片
image=np.array(Image.open("pikaqiu.jpg"))
#設置不顯示的詞,停頓詞
sw=set(STOPWORDS)
sw.add("不好")
sw.add("失落")

#生成詞雲對象
wc=WordCloud(font_path=r'C:\Users\lixue\Desktop\simhei.ttf',
             #指定詞雲的形狀
             mask=image,
             #背景顏色
             background_color="white",
             scale=0.9,
             random_state=20
             )
#生成詞雲圖片
wc=wc.generate(text)
#顯示詞雲圖片
plt.imshow(wc)
plt.axis("off")
plt.show()
#保存圖片
wc.to_file("new_love.png")

值得注意的是,在上述代碼中,因爲我使用的是PIL包,所以讀取圖片之後要進行轉換,如果不用numpy,直接用下面的語句

image=Image.open("pikaqiu.jpg")

程序會報錯:
在這裏插入圖片描述
觀察最前面的參數mask,屬於nd-array or None 類型,所以我們必須將Image.open(“pikaqiu.jpg”)之後的結果轉爲array類型,才能保證程序的正常運行。下圖爲生成的詞雲圖

皮卡丘背景詞雲圖
不過如果採用另外一個包scipy,就不用進行數據轉換了。將

image=np.array(Image.open("pikaqiu.jpg"))

換成

image=imread("pikaqiu.jpg"))

同時導入包

from scipy.misc import imread

兩種方法各取所需,關於參數配置,有時間的各位可以好好研究一樣,如何取到合適的值,讓生成的詞雲圖更加美觀。喜歡的點個贊吧。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章