Python視覺化-generate_from_frequencies給定詞頻畫詞雲圖(WordCloud)

kewlgrl發表於2018-04-24

詞雲圖是根據詞出現的頻率生成詞雲,詞的字型大小表現了其頻率大小。

〇、碎碎念

用wc.generate(text)直接生成詞頻的方法使用很多,所以不再贅述。

但是對於根據generate_from_frequencies()給定詞頻如何畫詞雲圖的資料找了很久,下面只講這種方法。

generate_from_frequencies適用於我已知詞及其對應的詞頻是多少,不需要自動生成的情況下。

官方文件說generate_from_frequencies函式的引數是array of tuple,但是我試了很久都不行,最後發現居然應該是dict 字典形式!

即形如:{ word1: fre1, word2: fre2,  word3: fre3,......,  wordn: fren }

注意詞雲wordcloud的中文顯示,需要特殊處理,在網上看了不少是說加字型路徑之類的方法我試了都不行,最後只好採用改變編碼的形式才解決好Σ(っ°Д°;)っ:

name[i] = name[i].decode('gb2312')

( • ̀ω•́ )✧還有,示例詞雲的輪廓背景圖由back.jpg給出,如下圖:



一、資料檔案準備

1、price.csv

name,val
南京,3.19
徐州 ,3.18
淮安,3.16
鹽城,3.15
宿遷,3.14
泰州,3.14
揚州,3.13
南通,3.13
連雲港 ,3.14
鎮江,3.15
無錫,3.14
蘇州,3.16
常州,3.17

第一列是城市名,第二列是詞頻數值,

csv檔案本質上就是以逗號(,)分隔開的txt檔案,所以用excel開啟形式為:



二、匯入模組包

可參考Windows下安裝Python、matplotlib包 及相關
https://blog.csdn.net/mikasa3/article/details/78942650 

1、numpy

2、pandas

3、wordcloud

4、matplotlib

三、完整程式碼

如下:

import random  
import numpy as np
import pandas as pd
from pyecharts import WordCloud
import matplotlib.pyplot as plt
from PIL import Image,ImageSequence
from wordcloud import WordCloud,ImageColorGenerator
def DrawWordcloud(read_name):
    image = Image.open('back.jpg')#作為背景形狀的圖
    graph = np.array(image)
    #引數分別是指定字型、背景顏色、最大的詞的大小、使用給定圖作為背景形狀
    wc = WordCloud(font_path = 'C:\\windows\\Fonts\\simhei.ttf', background_color = 'White', max_words = 50, mask = graph)
    fp = pd.read_csv(read_name)#讀取詞頻檔案
    name = list(fp.name)#詞
    value = fp.val#詞的頻率
    for i in range(len(name)):
      name[i] = str(name[i])
      #注意因為要顯示中文,所以需要轉碼
      name[i] = name[i].decode('gb2312')
    dic = dict(zip(name, value))#詞頻以字典形式儲存
    wc.generate_from_frequencies(dic)#根據給定詞頻生成詞雲
    image_color = ImageColorGenerator(graph)
    plt.imshow(wc)
    plt.axis("off")#不顯示座標軸
    plt.show()
    wc.to_file('Wordcloud.png')#儲存的圖片命名為Wordcloud.png
if __name__=='__main__':
    DrawWordcloud("Price.csv")

四、執行結果

1、詞雲圖


相關文章