這篇也是因為工作上需要,所以用Python進行文字雲的分析,想要從常用字詞,進行資料的分類,預期的結果除了統計常用字詞的次數以外,還有好像很炫但要細心看的文字雲圖式,這次做的是【以五月天30首熱門歌曲文字分析,統計出常用字詞,並以五月天 Mayday 的logo視覺化】 (如有侵權請告知,我很怕被吉...)
插個題外話,寫著寫這(其實是貼著貼著),覺得應該寫一系列叫做【輕輕鬆鬆複製貼上 寫Python】,Keep Calm and Copy Paste Series#2 (Keep calm 系列的典故請看這,看個blog順便學學歷史,做個好深宅)
回到主題,如果要文字分析產生文字雲,有很多工具或網站可以直接使用,但如果想要用自己的字典跟特殊的停用字句,還是需要自己動手做。既然Python也不難寫,就來動手做一下,以後也好累積自己的字典跟停用詞句,以後也方便自己做分析分類。
這次是用五月天 在KKBOX 2018/6 最流行的30首歌詞分析,目的是知道哪些字詞是常用的語句,在應用上滿多種的,如果是分析PTT,那就等於是特定主題的輿情分析,其他領域可以是文章分類等非結構化的文章判斷,那就來看一看程式跟結果吧:
mayday_mask是五月天的皇冠logo,當作遮罩,套上文字雲後,最後的結果就類似這樣,
看來 "一天"、"快樂"、"相信"、"人生"、"回憶"、"愛"是五月天常用的文字。
如果朋友們有更簡單的方式也歡迎跟小弟交流教學相長~~
如果文字內容或圖片有侵權也請告知
#Python
#資料分析
#Word cloud
#文字雲
#Sky is limit
插個題外話,寫著寫這(其實是貼著貼著),覺得應該寫一系列叫做【輕輕鬆鬆複製貼上 寫Python】,Keep Calm and Copy Paste Series#2 (Keep calm 系列的典故請看這,看個blog順便學學歷史,做個好深宅)
回到主題,如果要文字分析產生文字雲,有很多工具或網站可以直接使用,但如果想要用自己的字典跟特殊的停用字句,還是需要自己動手做。既然Python也不難寫,就來動手做一下,以後也好累積自己的字典跟停用詞句,以後也方便自己做分析分類。
這次是用五月天 在KKBOX 2018/6 最流行的30首歌詞分析,目的是知道哪些字詞是常用的語句,在應用上滿多種的,如果是分析PTT,那就等於是特定主題的輿情分析,其他領域可以是文章分類等非結構化的文章判斷,那就來看一看程式跟結果吧:
- 運作方式: 以下以步驟的方式說明程式運作的方式,如果想直接看完整的程式,請直接到: https://github.com/stacepsho/Word_Cloud_zh-tw
- Step 1 Import 與定義變數
# coding: utf-8 # 部分參考: https://ithelp.ithome.com.tw/articles/10192043 # 非常感謝王選仲大大 # 部分參考 http://blog.fukuball.com/ru-he-shi-yong-jieba-jie-ba-zhong-wen-fen-ci-cheng-shi/ # 非禪感謝林志傑 Fukuball大大 # 字典來自 https://git.oschina.net/fxsjy/jieba # 真的是做最好的中文分词组件 # from PIL import Image import matplotlib.pyplot as plt from wordcloud import WordCloud, ImageColorGenerator import jieba import numpy as np from collections import Counter
- Step 2 利用Jieba切字
#要分析的來源,這個範例是五月天30首歌 text_from_file_with_apath = open(r'lyrics.txt', "r",encoding="utf-8").read() #設定字典 jieba.set_dictionary('dict.txt.big') #設定自訂的字典,譬如五月天的 "動次" jieba.load_userdict(r'userdict_mayday.txt') #設定停用詞,譬如唱歌會用到的oh,喔 with open(r'stopWord_mayday.txt', 'r', encoding='utf8') as f: stops = f.read().split('\n') # #開始段詞與排序,沒錯就這麼簡單就做完了 # terms = [t for t in jieba.cut(text_from_file_with_apath, cut_all=True) if t not in stops] sorted(Counter(terms).items(), key=lambda x:x[1], reverse=True)
- Step 3 分析完後丟給文字雲繪圖
#中文繪圖需要中文字體,請自己從windows font目錄抓 #微軟正黑體 font = r'msjh.ttc' #想要文字雲出現的圖示 mask = np.array(Image.open(r"mayday_mask.png")) #背景顏色預設黑色,改為白色 #mark改用五月天的皇冠 #其他參數請自行參考wordcloud my_wordcloud = WordCloud(background_color="white",mask=mask,font_path=font,collocations=False, width=2400, height=2400, margin=2) my_wordcloud.generate_from_frequencies(frequencies=Counter(terms)) #產生圖片 plt.figure( figsize=(20,10), facecolor='k') plt.imshow(my_wordcloud,interpolation='bilinear') plt.axis("off") plt.tight_layout(pad=0) #顯示用 plt.show() #存檔用 #plt.savefig("Mayday_Wordcloud.png")
mayday_mask是五月天的皇冠logo,當作遮罩,套上文字雲後,最後的結果就類似這樣,
看來 "一天"、"快樂"、"相信"、"人生"、"回憶"、"愛"是五月天常用的文字。
如果朋友們有更簡單的方式也歡迎跟小弟交流教學相長~~
如果文字內容或圖片有侵權也請告知
#Python
#資料分析
#Word cloud
#文字雲
#Sky is limit