作者出版頻率詞雲圖

作者出版頻率詞雲圖

詞雲圖可用作數據頻率的比較。在詞雲圖中,比較多頻的數據,其名稱會以較大的字體演示;頻率較少的數據,其名稱會以一個較小的字體演示。

製作詞雲圖的方法

坊間有現成製作詞雲圖的軟件,但是它們未必能處理大量的數據,又或未能以自設的圖案模版及色調製作詞雲圖,因此我們在此介紹如何利用 Python 電腦程式來製作詞雲圖,用此方法可以處理大量數據,並可以由製作者自己決定詞雲圖內所顯示數據名稱的數量和圖案的形狀與顏色。

 我們首先要準備一個包含了所有數據名稱的檔案(可以是 .txt 文字檔),這檔案(如圖三)只需要把數據名稱每一次的出現列出來,不用包含統計。為了在詞雲圖中比較《周報》的作者頻率,我們利用了由 def create_full_name_list 從《周報》元數據中抽出共 55,506 個作者名稱的檔案。另外,亦需要準備一個詞雲圖形狀的圖案模版,然後,使用本頁的電腦程式,把作者名稱的檔案處理,詞雲圖就出現了。

圖三:《周報》的作者數據名稱檔案(節錄)

使用不同的圖案模版,可以使詞雲圖的形狀和顏色有所改變。圖四是利用了一個淨色的長方形圖案,通過電腦程式製作出來的。

圖四:《周報》作者出版頻率詞雲圖

由於《周報》內刊印了不少花生漫畫,因此我們亦使用了史路比和他的狗屋的形狀,分別製作了圖五和圖六。

圖五:史路比形狀的《周報》作者出版頻率詞雲圖

圖六:史路比狗屋形狀的《周報》作者出版頻率詞雲圖(包含一百個數據名稱)

函式  def MakeImage 的指令可製作雲圖,電腦程式的最後一行是進行這函式:

MakeImage("Image_Template.jpg", text, 100, "out_WordCloud.jpg")

製作者可以在第一個參數填上圖案模版的檔案名稱,再在第三個參數填上詞雲圖內數據名稱的數量,並在第四個參數填上製作出來的詞雲圖檔案名稱,把本頁的電腦程式進行一次,詞雲圖就會根據指定的圖案、數據名稱的數量、和詞雲圖檔案名稱出現了。使用史路比狗屋的圖六包含了一百個數據名稱,而圖七則包含了三百個數據名稱。

圖七:史路比狗屋形狀的《周報》作者出版頻率詞雲圖(包含三百個數據名稱)

詞雲圖的顏色是程式預設的,若果希望於詞雲圖中使用圖案模版的色調,可以把 plt.imshow 的指示改作:

plt.imshow(wc.recolor(color_func=image_colors))

狗屋的原圖色調是紅色,若使用以上的指示,圖八的詞雲圖就會出現了。

圖八:使用史路比狗屋原圖色調的《周報》作者出版頻率詞雲圖

電腦程式

以下的電腦程式(Python 3.7),可以用作準備詞雲圖。

import numpy as np
import pandas as pd
from os import path
from PIL import Image
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
font_path = "msjh.ttc"
file = open("Author name weekly.txt", encoding = "utf-8")
text = file.read()
file.close()

def MakeImage(image, text, 100, outfilename):
   mask = np.array(Image.open(image))
   # generate word cloud
   wc = WordCloud(font_path = font_path, background_color="white", max_words=num, collocations = False, mask=mask)
   wc.generate((text))
   image_colors = ImageColorGenerator(mask)
   plt.imshow(wc)
   plt.axis("off")
   plt.savefig(outfilename)
   plt.show()
plt.imshow(wc.recolor(color_func=image_colors))
MakeImage("Image_Template.jpg", text, 100, "out_WordCloud.jpg")