嗨嗨~
今天的主題相對比較簡單,就是要教大家用文字雲 (word cloud)的方式來呈現資料裡的關鍵詞!
大家應該多多少少都有看過文字雲吧~?就是像下圖這樣,由一堆字詞組成的圖,字體越大,代表它在文章中出現得越多或越重要。
相較於單純用圖表呈現字詞出現的頻率高低,文字雲能讓我們一眼就看出重點詞,不論是小說章節分析、社群熱門話題等,都非常實用!
今天就是要帶大家把這幾天學到的 正則表達式、斷詞、停用詞、詞頻等資料預處理技巧全部一起使用,然後生出一張漂亮的文字雲!
好啦~那我們就來實作吧!
! pip wordcloud
! pip matplotlib
! pip install textblob
我這邊選擇一則有關鏈鋸人的新聞當作範例,連結可以點這裡
text = '''
《鏈鋸人》電視動畫版結束已將近三年,《劇場版『鏈鋸人蕾潔篇』》再次帶著隆隆電鋸聲歸來,全球觀眾熱切期待。
因為在體驗以優秀動畫手法詮釋的電視版之後,大家都期待動畫製作公司MAPPA在大銀幕上會製造什麼驚人的娛樂效果。
《劇場版『鏈鋸人蕾潔篇』》確實很驚人,而且很震撼。讓我們在它9/24上映之前,分析這部電影的震撼魅力,讓你知道自己能在這一百分鐘裡享受到什麼。
《劇場版『鏈鋸人蕾潔篇』》的故事是什麼?
獵魔人「鏈鋸人」淀治正慢慢習慣他的新公安生活,他與同事早川秋與帕瓦生活在一起,
而他對頂頭上司真紀真無可救藥的迷戀也一點不變。真紀真突如其來的約會邀請,更讓淀治內心惡魔亂撞。
但在一個下雨天,淀治在電話亭遇到了神秘美女蕾潔。蕾潔可愛、性感、是在咖啡店打工的年輕學生,而且,她竟然喜歡淀治噁爛的行為與不好笑的笑話。蕾潔主動表達好感,希望淀治能跟她遠走高飛……淀治面臨人生重大抉擇,他應該忠心若即若離的真紀真?
還是投向蕾潔愛的懷抱?但無論他怎麼選,這只是一場瘋狂殺戮的開始。
魅力一:MAPPA瘋勁全開
一鯨落,萬物生。1971年手塚治虫的動畫製作公司「虫製作」發生經營危機,此時手塚本人甚至都早已離開這間公司。兩年後虫製作倒閉,這兩年內大量人才陸續外流,其中的丸山正雄與出崎統出來自立門戶,成立了新動畫公司「MADHOUSE」。這個名稱只不過是丸山的玩心:他覺得當代的動畫公司都叫「XX工作室」或「OO製作」,不如選一個特立獨行的名稱,而MADHOUSE也不過是從一家名為「松戶House」的店名轉換而來(丸山堅持不透露這是什麼店)。
但Madhouse在英文裡就是瘋人院之意,對丸山來說,被當作瘋子也不要緊,而且儘管這個名字在日本受到側目,但在歐美可是大獲好評。在強烈強調個人主義的歐美,能瘋敢瘋才是王道。而且,Madhouse就是這麼瘋,他們製作的《獸兵衛忍風帖》、《最臭兵器》、《吸血鬼獵人D》、與今敏的《藍色恐懼》等等作品,全都在內容與美術上超越當代水準。這股瘋勁在丸山離開Madhouse,成立MAPPA之後依舊存在,而你在《鏈鋸人》與《劇場版『鏈鋸人蕾潔篇』》裡,依舊可以感受到這股持續五十年的瘋狂。
《鏈鋸人》裡的惡魔們不會高喊必殺技,他們的舉手投足都是破壞力極強的殺招,因此,在善於描繪人物動作(看看《咒術迴戰》裡精湛的武打動作)的MAPPA手上,這些惡魔的肢體語言本身就極富魅力。飛踢、或被踢飛,他們在空中的肢體舞動,連真人電影都難以比擬,更別提數位人偶在表現這些動作時的不自然感。
但MAPPA可不是架好攝影機固定不動,拍出長鏡頭就算數。這些動作鏡頭本身自帶節奏感,它們由一系列的零碎鏡頭組成,而換鏡通常配合著劇情節奏進行。當炸彈惡魔輕聲說出一句「砰」,你得準備好接下來幾秒鐘會有一系列鏡頭不斷地砸到臉上,可能是不同角度的爆炸畫面,可能是被炸的角色從不同方向飛走。這種節奏感讓華麗的畫面切換,更能讓觀眾產生共鳴。
2018年電影《蜘蛛人:新宇宙》嘗試讓多種不同畫風塞進一部電影裡,《劇場版『鏈鋸人蕾潔篇』》裡也能看到這種奇妙效果。在後40分鐘的大混戰橋段裡,不只主角們打成一團,MAPPA的美術風格也在此時引爆大混戰,你會看到美術風格也變成一種展現角色精神狀態的手段,當他們慷慨激昂,畫風也隨之不羈;當他們高速飛馳,這些角色身上的線條也開始變形扭曲。《劇場版『鏈鋸人蕾潔篇』》是一部畫面與風格極端混亂的電影,因為,這部電影裡的角色內心負擔了巨大的悲哀與崩壞。
很難想像如果不是MAPPA來執行這個計畫,《劇場版『鏈鋸人蕾潔篇』》是否還能如此在畫面上忠實呈現原著角色的心境。這部電影沒有旁白解釋,沒有人出來說明行事動機。你會感受到的是淀治內心的情慾衝動、蕾潔的嬌俏可愛、與真紀真的美麗之下似乎隱藏著什麼。因此美術很重要,它們必須勾引觀眾「見山不是山」,讓他們在一連串的蒙太奇之中,理解這些角色為何相愛相殺。
狂氣無處不在,炸彈惡魔衝向鏡頭要給淀治一拳,你可以畫牠跑向鏡頭、飛向鏡頭,但MAPPA偏偏不這麼做,這個畫面位於一片漆黑的樓面,他們畫的是惡魔身上的火焰亮紋,一身黃光快速欺近鏡頭,你看不到牠完整的全身,但你感受到了牠逼近的速度感與威嚇感。
魅力二:蕾潔純潔性感魅力全開
這部電影都叫「蕾潔篇」了,新角色蕾潔當然很重要。作為一個全新角色,觀眾不認識她,也沒有任何伏筆鋪墊她的背景或動機。而觀眾必須在這一百分鐘裡認識陌生的她,甚至可能得喜歡她,這樣電影才能讓劇情高潮順利打擊觀眾的內心。而《劇場版『鏈鋸人蕾潔篇』》成功了。
看到男孩嘔吐著從口中拿出一朵花,蕾潔露出笑顏讓觀眾看到她整個臉龐,這是她在漫畫的初登場。就在這一頁的前幾頁,淀治正按著心臟對自己說,「我絕對不會喜歡上別人!」。但是,幾頁後的蕾潔就要讓淀治立刻天人交戰。事實上,這一話從蕾潔登場到結束,僅有14頁。那麼,電影在這14頁的份量裡,電影要如何快速說服觀眾,蕾潔有讓淀治背叛自我誓言的魅力?
答案是上田麗奈。她銀鈴般的嗓音立刻讓平面紙上的蕾潔增加了不同想像,她喊著「淀治」時刻意拉長音與連字黏音的念法,增加了一種特別的親暱感。在蕾潔邀請淀治到她打工的咖啡店時,我們不認識蕾潔是誰,不了解她的動機。在這種未知狀況下,上田麗奈的聲音演技是讓這個角色變得可人的主因,她的笑聲是天真無邪,她撒嬌般的說話語氣似乎暴露了她的真心,這不是你能在漫畫上感受的可愛,這是上田麗奈的實力。
淀治一步步踏進(自認為)的愛情迷宮,蕾潔沒有親口說出我喜歡你,但淀治已經對她心醉神迷。可是,蕾潔的魅力還要繼續升級,她邀請淀治一起到深夜的學校裡玩,兩人一起享受無人的學校泳池。這段夜間戲水橋段是整部電影的重點之一,因為淀治第一次享受愛情帶給他的甜蜜震撼(他此前遇見的所有女性幾乎都曾對他不利)。同樣的,這個橋段在漫畫裡也只有七頁的短篇幅。但是,《劇場版『鏈鋸人蕾潔篇』》不但把每一格漫畫都複製進來了,它還加上了上田的配音,與MAPPA描繪的如夢如幻風景,以及緊跟淀治的主觀跳水鏡頭,這些讓這個愛情迷宮變得更加堅不可摧。
《劇場版『鏈鋸人蕾潔篇』》有備而來,它成功讓觀眾認識蕾潔,甚至讓她有足夠的魅力,去挑戰過去故事裡如女神一般地位崇高的真紀真。這讓整個故事在最後的結局,才能帶給觀眾更大的震撼。
魅力三:音樂大咖功力全開
米津玄師為本片演唱的主題曲《Iris out》,MV在YouTube上架短短八天,播放量已經超過1,800萬次。你可以在《劇場版『鏈鋸人蕾潔篇』》開場聽到這首歌,這首快節奏且毫不掩飾愛意熱情的勁曲,讓觀眾快速進入這部以愛情為主的動作電影世界。而電影最後工作人員名單出現時,你還能聽到由米津與宇多田光首次合作的新曲《Jane Doe》,兩位音樂大神首度合作這首哀傷情歌,當然不能錯過用電影院大喇叭聆聽的機會。而更重要的是,這兩首主題曲都與《劇場版『鏈鋸人蕾潔篇』》劇情很有關連,非常值得細細品味。
當然的,牛尾憲輔的配樂才是《劇場版『鏈鋸人蕾潔篇』》的主菜,為這部混亂的電影添上更多混亂淒厲的重拍。但別忘了牛尾可是從小學習鋼琴,在談情說愛的溫柔橋段,你可以聽到他令人心碎的鋼琴演奏。在電影院觀賞,才能清晰聽到這位電音好手的玩心實力:《from below with love》加進了雷鬼的慵懶節拍;《our film》看似無規則的琴鍵單擊,帶來意味不明又疏離的情緒;還有《first glance》用沉穩的鋼琴彈出一見鍾情的小甜蜜。牛尾的這張原聲帶如同電影一般混亂,前半是以鋼琴為主的抒情、後半則是電吉他與效果器的轟天合鳴,非常有趣。
還需要推薦《劇場版『鏈鋸人蕾潔篇』》嗎?其實好像是多此一舉。MAPPA為這部作品打造更多面向的魅力,儘管你可能在幾年前早就看完了漫畫,但《劇場版『鏈鋸人蕾潔篇』》絕對會給你更豐富的視聽體驗,那是超越漫畫文本的多媒體享受。
'''
再來我們就可以用前幾天有學到的re 來清理文本中的標點符號、空格等,我這邊沒有清掉數字或英文,因為以這則新聞來說我覺得也是必要的
# 先用re 簡單清除掉不必要的標點符號以及停用詞
import re
no_punction = re.sub(r"[^\w\s]+", "", text)
#清掉換行符號
clean_text = no_punction.replace("\n", "")
#去掉停用詞
stopwords = r"再|在|的|了|和|是|就|也|那|等|因|上|頁|以|那麼|已將|再次|著|為|之|後|都|他|她|這些|那些|得|更|它|讓|你|到|但|而|這|與|不"
flitered_words = re.sub(stopwords, '', clean_text)
小小不一樣的地方是,前幾天的停止詞我們是建立字典,那大家其實也可以直接用這個方式來清理停止詞喔!
那因為是要處理中文的資料,所以這邊使用結巴來協助我們斷詞
記得可以引入自己定義的字典來輔助喔!
#用結巴斷詞
import jieba
#引入自定義的字典
jieba.load_userdict("/Users/xxuan/Desktop/斷詞字典.txt")
#斷詞
words = jieba.lcut(flitered_words)
結束之後可以先看看斷詞結果是不是滿意~
印出前10 個高頻詞來看看!
word_freq = Counter(words)
print(word_freq.most_common(5))
輸出結果
[('淀治', 18), ('蕾潔', 18), ('劇場版', 15), ('鏈鋸人蕾潔篇', 15), ('MAPPA', 10)]
嘿嘿~挺滿意,那我們就來畫畫文字雲吧!
我們這邊是使用wordcloud
套件來幫忙
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 設定中文字型路徑,這邊是以mac 作為範例喔!
font_path = "/System/Library/Fonts/STHeiti Medium.ttc"
#開始設定文字雲會顯示的東西!
wc = WordCloud(
font_path=font_path,
width=800,
height=400,
background_color="white",
colormap="rainbow" # 顏色主題,可改成 'rainbow'、'cool' 等
)
wc.generate_from_frequencies(word_freq) #開始製作文字雲
最後我們就可以把它印出來惹!
# 顯示文字雲
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()
登登登登~
是不是馬上就看到重點惹!!這就是視覺化的好處拉~
當然,最後也可以將這張圖存到想要存的地方
wc.to_file("/Users/xxuan/Desktop/wordcloud.png")
這邊應該就可以看出來,製作文字雲是可以客製化的!!不管是顏色還是排版都可以自行設定,這邊提供大家一些簡單可以調整的參數參考
參數 | 作用 |
---|---|
width |
圖片寬度 |
height |
圖片高度 |
background_color |
背景顏色 |
colormap |
文字配色方案 |
max_words |
顯示的最多詞數 |
max_font_size |
最大字體大小 |
min_font_size |
最小字體大小 |
prefer_horizontal |
水平排版比例 |
mask |
自訂形狀 |
比如說,你可能覺得現在製作出來的圖有點太雜,太多字了,那我們就可以來新增一下max_words
,並將參數設置為100
wc = WordCloud(
font_path=font_path,
width=800,
height=400,
background_color="white",
colormap="rainbow", # 顏色主題,可改成 'rainbow'、'cool' 等/
max_words = 100
)
最後文字雲效果
看起來就沒這麼擁擠惹~如果還是覺得不滿意的話,可以再改改其他參數試試看😇
文字雲還可以自訂形狀喔!有興趣的朋友們可以用一張淀治的圖來製作專看看XD 我覺得非常😁
今天大概就到這邊~ 今天算是比較輕鬆一點,也順便讓大家複習一下前面整個儲利資料的流程~
還是老話一句,越練習就會越上手!大家不妨拿起手邊的資料,做一張專屬自己的文字雲吧~
那我們明天見嚕~~