想知道一部沒看過的影視劇能否符合自己口味犬缨,卻又怕被劇透喳魏?沒關(guān)系,我們可以用情緒分析來了解故事情節(jié)是否足夠跌宕起伏怀薛。本文一步步教你如何用Python和R輕松愉快完成文本情緒分析刺彩。一起來試試吧。
煩惱
追劇是個令人苦惱的事情枝恋。
就拿剛剛播完第7季的《權(quán)力的游戲》來說创倔,每周等的時(shí)候那叫一個煎熬,就盼著周一能提早到來焚碌。
可是最后一集播完畦攘,你緊張、興奮呐能、激動和過癮之后呢念搬?是不是又覺得很失落?
因?yàn)椤旅嫖以摽词裁磩“摆出。?/p>
現(xiàn)在的影視作品朗徊,不是太少,而是太多偎漫。如果你有選擇困難癥爷恳,更會有生不逢時(shí)的感覺。
Netflix, Amazon和豆瓣等推薦引擎可以給你推薦影視作品象踊。但是它們的推薦温亲,只是把觀眾劃分成了許多個圈子。你的數(shù)據(jù)杯矩,如果足夠真實(shí)準(zhǔn)確的話栈虚,可能剛好和某一個圈子的特性比較接近,于是就給你推薦這個圈子更喜歡的作品史隆。
但是這不一定靠譜魂务。有可能你的觀影和評價(jià)信息分散在不同的平臺上。不完整泌射、不準(zhǔn)確的觀影數(shù)據(jù)粘姜,會導(dǎo)致推薦的效果大打折扣。
即便有了推薦的影視劇熔酷,它是否符合你的口味呢孤紧?畢竟看劇也是有機(jī)會成本的。放著《絕命毒師》不看拒秘,去看了一部爛劇号显,你的生命中的數(shù)十小時(shí)就這樣被浪費(fèi)了臭猜。
可除了從頭到尾看一遍,又如何能驗(yàn)證一部劇是否是自己喜歡的呢押蚤?
你可能想到去評論區(qū)看劇評获讳。那可是個危險(xiǎn)區(qū)域,因?yàn)殡S時(shí)都有被劇透的風(fēng)險(xiǎn)活喊。
你覺得還是利用社交媒體吧,在萬能的朋友圈問問好友量愧。有的好友確實(shí)很熱心钾菊,但有的時(shí)候,也許會過于熱心偎肃。
例如下面這位(圖片來自于網(wǎng)絡(luò)):
你可能抓狂了煞烫,覺得這是個不可能完成的任務(wù),就如同英諺所云:
You can't have your cake and eat it too.
真的是這樣嗎累颂?不一定滞详。在這個大數(shù)據(jù)泛濫,數(shù)據(jù)分析工具并不稀缺的時(shí)代紊馏,你完全可以利用技術(shù)幫自己選擇優(yōu)秀的影視作品料饥。
故事情節(jié)的文本,你可以到互聯(lián)網(wǎng)上找劇本朱监,或者是字幕岸啡。當(dāng)然,不是讓你把劇本從頭讀到尾赫编,那樣還不如直接看劇呢巡蘸。你需要用技術(shù)來對文本進(jìn)行分析。
情緒
我們提到的這個技術(shù)擂送,叫做情緒分析(emotional analysis)悦荒。它和情感分析(sentiment analysis)有相似之處。都是通過對內(nèi)容的自動化分析嘹吨,來獲得結(jié)果搬味。
情感分析的結(jié)果一般分為正向(positive)和負(fù)向(negative),而情緒分析包含的種類就比較多了躺苦。
加拿大國家研究委員會(National Research Council of Canada)官方發(fā)布的情緒詞典包含了8種情緒身腻,分別為:
- 憤怒(anger)
- 期待(anticipation)
- 厭惡(disgust)
- 恐懼(fear)
- 喜悅(joy)
- 悲傷(sadness)
- 驚訝(surprise)
- 信任(trust)
有了這些情緒的標(biāo)記,你可以輕松地對一段文本的情緒變化進(jìn)行分析匹厘。
這時(shí)候嘀趟,你可以回憶起中學(xué)語文老師講作文時(shí)說過的那句話:
文如看山不喜平。
故事情節(jié)會伴隨著各種情緒的波動愈诚。通過分析這些情緒的起伏她按,我們可以看出故事的基調(diào)是否符合自己的口味牛隅,情節(jié)是否緊湊等。這樣酌泰,你可以根據(jù)自己的偏好媒佣,甚至是當(dāng)前的心境,來選擇合適的作品觀看了陵刹。
我們需要用到Python和R默伍。這兩種語言在目前數(shù)據(jù)科學(xué)領(lǐng)域里最受歡迎。Python的優(yōu)勢在于通用衰琐,而R的優(yōu)勢在于統(tǒng)計(jì)學(xué)家組成的社區(qū)也糊。這些統(tǒng)計(jì)學(xué)家真是高產(chǎn),也很酷羡宙,經(jīng)常制造出令人驚艷的分析包狸剃。
咱們這里就用Python來做數(shù)據(jù)清理,然后用R做情緒分析狗热,并且把結(jié)果可視化輸出钞馁。
準(zhǔn)備
數(shù)據(jù)
我們首先需要找到的是來源數(shù)據(jù)。作為例子匿刮,我們選擇了《權(quán)利的游戲》第三季的第9集僧凰,名字叫做"The Rains of Castamere"。
你可以到這個網(wǎng)址下載這一集的劇本熟丸。
你只需要全選頁面拷貝允悦,然后打開一個文本編輯器,把內(nèi)容粘貼進(jìn)去虑啤。好了隙弛,現(xiàn)在你就有可供分析的文本了。
請建立一個工作目錄狞山。后面的操作都在這個目錄里進(jìn)行全闷。例如我的工作目錄是~/Downloads/python-r-emotion
。
把剛剛獲得的文本文件放到這個目錄中萍启。
Python
我們需要用到Jupyter Notebook总珠,請安裝Anaconda套裝。具體的安裝方法請參考《 如何用Python做詞云 》一文勘纯。
R
到這個網(wǎng)址下載R基礎(chǔ)安裝包局服。你會看到R的下載位置有很多。
我建議你選擇中國的鏡像驳遵,這樣連接速度更快淫奔。清華大學(xué)的鏡像就不錯。
請根據(jù)你的操作系統(tǒng)平臺選擇其中對應(yīng)的版本下載堤结。我選擇的是macOS版本唆迁,下載得到pkg文件鸭丛。雙擊就可以安裝。
安裝了基礎(chǔ)包之后唐责,我們繼續(xù)安裝集成開發(fā)環(huán)境RStudio鳞溉。下載地址為這里。
還是依據(jù)你的操作系統(tǒng)情況鼠哥,選擇對應(yīng)的安裝包熟菲。macOS安裝包為dmg文件。雙擊打開后朴恳,把其中的RStudio.app圖標(biāo)拖動到Applications文件夾中科盛,安裝就完成了。
好了,現(xiàn)在你就有了R的運(yùn)行環(huán)境了。
清理
我們首先需要清理文本數(shù)據(jù)孵构,完成以下這兩個任務(wù):
- 把與劇情正文無關(guān)的內(nèi)容去除瘤旨;
- 將數(shù)據(jù)轉(zhuǎn)換成R可以直接做情緒分析的結(jié)構(gòu)化數(shù)據(jù)格式。
到你的系統(tǒng)“終端”(macOS, Linux)或者“命令提示符”(Windows)下谴垫,進(jìn)入我們的工作目錄章母,執(zhí)行以下命令。
jupyter notebook
這時(shí)候工作目錄下還只有那個文本文件翩剪。
我們打開看看內(nèi)容乳怎。
往下翻頁,我們找到了劇本正文正式開始的標(biāo)記Opening Credits
前弯。
翻到文本的結(jié)尾蚪缀,我們可以看到劇本結(jié)束的標(biāo)記End Credits
。
我們回到主頁面下恕出,新建一個Python的Notebook询枚。點(diǎn)擊右方的New按鈕,選擇Python 2浙巫。
有了全新的Notebook后金蜀,我們首先引入需要用到的包。
import pandas as pd
import re
然后讀取當(dāng)前目錄下的文本文件的畴。
with open("s03e09.txt") as f:
data = f.read()
看看內(nèi)容:
print(data)
結(jié)果如下:
數(shù)據(jù)正確讀入渊抄。下面我們依照剛才瀏覽中發(fā)現(xiàn)的標(biāo)記把正文以外的文本內(nèi)容去掉。
先去掉開頭的非劇本正文內(nèi)容丧裁。
data = data.split('Opening Credits]')[1]
再次打印护桦,可以看見現(xiàn)在從正文開頭了。
print(data)
下面我們同樣處理結(jié)尾部分煎娇。
data = data.split('[End Credits')[0]
打印出來試試看嘶炭。
print(data)
拖動到尾部抱慌。
移除了開頭和結(jié)尾的多余內(nèi)容后,我們來移除空行眨猎。這里我們需要用到正則表達(dá)式抑进。
regex = r"^$\n"
subst = ""
data = re.sub(regex, subst, data, 0, re.MULTILINE)
然后我們再次打印。
print(data)
空行都已經(jīng)成功挪走了睡陪∷律可是我們注意到還有一些分割線組成的行,也需要去除掉兰迫。
regex = r"^-+$\n"
subst = ""
data = re.sub(regex, subst, data, 0, re.MULTILINE)
至此信殊,清理工作已經(jīng)完成了。下面我們把文本整理成數(shù)據(jù)框汁果,每一行分別加上行號涡拘。
利用換行符把原本完整的文本分割成行。
lines = data.split('\n')
然后給每一行加上行號据德。
myrows = []
num = 1
for line in lines:
myrows.append([num, line])
num = num + 1
我們看看前三行的行號是否已經(jīng)正常添加鳄乏。
myrows[:3]
一切正常,下面我們把目前的數(shù)組轉(zhuǎn)換成數(shù)據(jù)框棘利。如果你對數(shù)據(jù)框的概念不太熟悉橱野,請參考《貸還是不貸:如何用Python和機(jī)器學(xué)習(xí)幫你決策?》一文善玫。
df = pd.DataFrame(myrows)
我們來看看執(zhí)行結(jié)果:
df.head()
數(shù)據(jù)是正確的水援,不過表頭不對。我們給表頭重新命名茅郎。
df.columns = ['line', 'text']
再來看看:
df.head()
好了蜗元,既然數(shù)據(jù)框已經(jīng)做好了。下面我們把它轉(zhuǎn)換成為csv格式系冗,以便于R來讀取和處理许帐。
df.to_csv('data.csv', index=False)
我們打開data.csv文件,可以看到數(shù)據(jù)如下:
數(shù)據(jù)清理和準(zhǔn)備工作結(jié)束毕谴,下面我們用R進(jìn)行分析成畦。
分析
RStudio可以提供一個交互環(huán)境,幫我們執(zhí)行R命令并即時(shí)反饋結(jié)果涝开。
打開RStudio之后循帐,選擇File->New,然后從以下界面中選擇 R Notebook舀武。
然后拄养,我們就有了一個R Notebook的模板。模板附帶一些基礎(chǔ)使用說明。
我們嘗試點(diǎn)擊編輯區(qū)域(左側(cè))代碼部分(灰色)的運(yùn)行按鈕瘪匿。
立即就可以看到繪圖的結(jié)果了跛梗。
另外我們還可以點(diǎn)擊菜單欄上的Preview按鈕,來看整個兒代碼的運(yùn)行結(jié)果棋弥。
RStudio為我們生成了HTML文件核偿,我們的文字說明、代碼和運(yùn)行結(jié)果圖文并茂呈現(xiàn)出來顽染。
好了漾岳,熟悉了環(huán)境后,我們該實(shí)際操作運(yùn)行自己的代碼了粉寞。咱們把左側(cè)編輯區(qū)的開頭說明區(qū)保留尼荆,把全部正文刪除,并且把文件名改成有意義的名字唧垦,例如emotional-analysis
捅儒。
這樣就清爽多了。
下面我們讀入數(shù)據(jù)振亮。
setwd("~/Downloads/python-r-emotion/")
script <- read.csv("data.csv", stringsAsFactors=FALSE)
讀入的時(shí)候一定要注意設(shè)置stringsAsFactors=FALSE
巧还,不然R在讀取字符串?dāng)?shù)據(jù)的時(shí)候,會默認(rèn)轉(zhuǎn)換為level双炕,后面的分析就做不成了。讀取之后撮抓,在右側(cè)的數(shù)據(jù)區(qū)域你可以看到script這個變量妇斤,雙擊它,可以看到內(nèi)容丹拯。
數(shù)據(jù)有了站超,下面我們需要準(zhǔn)備分析用的包。這里我們需要用到4個包乖酬,請執(zhí)行以下語句安裝死相。
install.packages("dplyr")
install.packages("tidytext")
install.packages("tidyr")
install.packages("ggplot2")
注意安裝新軟件包這種操作只需要執(zhí)行一次∫瘢可是我們每次預(yù)覽結(jié)果的時(shí)候算撮,文件里所有語句都會被執(zhí)行一遍。為了避免安裝命令被反復(fù)執(zhí)行县昂。當(dāng)安裝結(jié)束后肮柜,請你刪除或者注釋掉上面幾條語句。
安裝了包倒彰,并不意味著就可以直接用其中的函數(shù)了审洞。使用之前,你需要執(zhí)行l(wèi)ibrary語句調(diào)用這些包待讳。
library(dplyr)
library(tidytext)
library(tidyr)
library(ggplot2)
好了芒澜,萬事俱備仰剿。我們需要把一句句的文本拆成單詞,這樣才能和情緒詞典里的單詞做匹配痴晦,從而分析單詞的情緒屬性南吮。
在R里面,可以采用Tidy Text方式來做阅酪。執(zhí)行的語句是unnest_token
旨袒,我們把原先的句子拆分成為單詞。
tidy_script <- script %>%
unnest_tokens(word, text)
head(tidy_script)
## line word
## 1 1 first
## 1.1 1 scene
## 1.2 1 shows
## 1.3 1 the
## 1.4 1 location
## 1.5 1 of
這里原先的行號依然被保留术辐。我們可以看到每一個詞來自于哪一行砚尽,這有利于下面我們對行甚至段落單位進(jìn)行分析。
我們調(diào)用加拿大國家研究委員會發(fā)布的情緒詞典辉词。這個詞典在tidytext包里面內(nèi)置了必孤,就叫做nrc
。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
arrange(line) %>%
head(10)
我們只顯示前10行的內(nèi)容:
## Joining, by = "word"
## line word sentiment
## 1 1 rock positive
## 2 1 ancestral trust
## 3 1 giant fear
## 4 1 representing anticipation
## 5 1 stark negative
## 6 1 stark trust
## 7 1 stark negative
## 8 1 stark trust
## 9 4 dangerous fear
## 10 4 dangerous negative
可以看到瑞躺,有的詞對應(yīng)某一種情緒屬性敷搪,有的詞同時(shí)對應(yīng)多種情緒屬性。注意nrc包里面不僅有情緒幢哨,而且還有情感(正向和負(fù)向)赡勘。
我們對單詞的情緒已經(jīng)清楚了。下面我們來綜合判斷每一行的不同情感分別含有幾個詞捞镰。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
count(line, sentiment) %>%
arrange(line) %>%
head(10)
還是只顯示結(jié)果的前10行闸与。
## Joining, by = "word"
## # A tibble: 10 x 3
## line sentiment n
## <int> <chr> <int>
## 1 1 anticipation 1
## 2 1 fear 1
## 3 1 negative 2
## 4 1 positive 1
## 5 1 trust 3
## 6 4 fear 1
## 7 4 negative 1
## 8 5 positive 1
## 9 5 trust 1
## 10 6 positive 1
以第1行為例,包含“期待”的詞有1個岸售,包含“恐懼”的有1個践樱,包含“信任”的有3個。
如果我們以1行為單位分析情感變化凸丸,粒度過細(xì)拷邢。鑒于整個劇本包含了幾百行文字,我們以5行作為一個基礎(chǔ)單位屎慢,來進(jìn)行分析瞭稼。
這里我們使用index
來把原先的行號處理一下,分成段落腻惠。%/%
代表整除符號弛姜,這樣0-4行就成為了第一段落,5-9行成為第二段落妖枚,以此類推廷臼。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
count(line, sentiment) %>%
mutate(index = line %/% 5) %>%
arrange(index) %>%
head(10)
## Joining, by = "word"
## # A tibble: 10 x 4
## line sentiment n index
## <int> <chr> <int> <dbl>
## 1 1 anticipation 1 0
## 2 1 fear 1 0
## 3 1 negative 2 0
## 4 1 positive 1 0
## 5 1 trust 3 0
## 6 4 fear 1 0
## 7 4 negative 1 0
## 8 5 positive 1 1
## 9 5 trust 1 1
## 10 6 positive 1 1
可以看出,第一段包含的情感還真是很豐富。
只是如果讓我們把結(jié)果表格從頭讀到尾荠商,那也真夠難受的寂恬。我們還是用可視化的方法,把圖繪制出來吧莱没。
繪圖我們采用ggplot包初肉。這個包我們在《 如何用Python做輿情時(shí)間序列可視化?
》一文中介紹過饰躲,歡迎查閱復(fù)習(xí)牙咏。
我們使用geom_col
指令,讓R幫我們繪制柱狀圖嘹裂。對不同的情緒妄壶,我們用不同顏色表示出來。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
count(line, sentiment) %>%
mutate(index = line %/% 5) %>%
ggplot(aes(x=index, y=n, color=sentiment)) %>%
+ geom_col()
## Joining, by = "word"
結(jié)果是豐富多彩的寄狼,可惜看不大清楚丁寄。為了區(qū)別不同情緒,我們調(diào)用facet_wrap
函數(shù)泊愧,把不同情緒拆開伊磺,分別繪制。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
count(line, sentiment) %>%
mutate(index = line %/% 5) %>%
ggplot(aes(x=index, y=n, color=sentiment)) %>%
+ geom_col() %>%
+ facet_wrap(~sentiment, ncol=3)
## Joining, by = "word"
嗯删咱,這張圖看著就舒服多了屑埋。
不過這張圖也會給我們造成一些疑惑。按照道理來說痰滋,每一段落的內(nèi)容里摘能,包含單詞數(shù)量大致相當(dāng)。結(jié)尾部分情感分析結(jié)果里面即寡,正向和負(fù)向幾乎同時(shí)上升徊哑,這就讓人很不解袜刷。是這里的幾行太長了聪富,還是出了什么其他的問題呢?
數(shù)據(jù)分析的關(guān)鍵著蟹,就是在這種令人疑惑的地方深挖進(jìn)去墩蔓。
我們不妨來看看,出現(xiàn)最多的正向和負(fù)向情感詞都有哪些萧豆。
先來看看正向的奸披。我們這次不是按照行號,而是按照詞頻來排序涮雷。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
filter(sentiment == "positive") %>%
count(word) %>%
arrange(desc(n)) %>%
head(10)
## Joining, by = "word"
## # A tibble: 10 x 2
## word n
## <chr> <int>
## 1 lord 13
## 2 good 9
## 3 guard 9
## 4 daughter 8
## 5 shoulder 7
## 6 love 6
## 7 main 6
## 8 quiet 6
## 9 bride 5
## 10 king 5
看到這個詞頻阵面,我們不禁有些失落——看來分析結(jié)果是有問題的。許多詞匯都是名詞,而且在《權(quán)力的游戲》故事中样刷,這些詞根本就沒有明確的情感指向仑扑。例如lord這個詞,劇中的lord有的正直善良置鼻,但也有很多不是什么好人镇饮;king也一樣,雖然Robb和Jon是國王箕母,但別忘了Joffrey也是國王啊储藐。
我們再來看看負(fù)向情感詞匯吧。
tidy_script %>%
inner_join(get_sentiments("nrc")) %>%
filter(sentiment == "negative") %>%
count(word) %>%
arrange(desc(n)) %>%
head(10)
## Joining, by = "word"
## # A tibble: 10 x 2
## word n
## <chr> <int>
## 1 stark 16
## 2 pig 14
## 3 lord 13
## 4 worm 12
## 5 kill 11
## 6 black 9
## 7 dagger 8
## 8 shot 8
## 9 killing 7
## 10 afraid 4
看了這個結(jié)果嘶是,就更令人沮喪不已了——同樣的一個lord钙勃,竟然既被當(dāng)成了正向,又被當(dāng)成了負(fù)向詞匯俊啼。詞典標(biāo)注者太不負(fù)責(zé)任了吧肺缕!
別著急。出現(xiàn)這樣的情況授帕,是因?yàn)槲覀冏龇治鰰r(shí)少了一個重要步驟——處理停用詞同木。對于每一個具體場景,我們都需要使用停用詞表跛十,把那些可能干擾分析結(jié)果的詞扔出去彤路。
tidytext提供了默認(rèn)的停用詞表。我們先拿來試試看芥映。這里使用的語句是anti_join
洲尊,就可以把停用詞先去除,再進(jìn)行情緒詞表連接奈偏。
我們看看停用詞去除后坞嘀,正向情感詞匯的高頻詞有沒有變化。
tidy_script %>%
anti_join(stop_words) %>%
inner_join(get_sentiments("nrc")) %>%
filter(sentiment == "positive") %>%
count(word) %>%
arrange(desc(n)) %>%
head(10)
## Joining, by = "word"
## Joining, by = "word"
## # A tibble: 10 x 2
## word n
## <chr> <int>
## 1 lord 13
## 2 guard 9
## 3 daughter 8
## 4 shoulder 7
## 5 love 6
## 6 main 6
## 7 quiet 6
## 8 bride 5
## 9 king 5
## 10 music 5
結(jié)果令人失望惊来±錾看來停用詞表里沒有包含我們需要去除的那一堆名詞。
沒關(guān)系裁蚁,我們自己來修訂停用詞表矢渊。使用R中的bind_rows
語句,我們就能在基礎(chǔ)的預(yù)置停用詞表基礎(chǔ)上枉证,附加上我們自己的停用詞矮男。
custom_stop_words <- bind_rows(stop_words,
data_frame(word = c("stark", "mother", "father", "daughter", "brother", "rock", "ground", "lord", "guard", "shoulder", "king", "main", "grace", "gate", "horse", "eagle", "servent"),
lexicon = c("custom")))
我們加入了一堆名詞和關(guān)系代詞。因?yàn)樗鼈兒颓榫w之間沒有必然的關(guān)聯(lián)室谚。但是名詞還是保留了一些毡鉴。例如“新娘”總該是和好的情感和情緒相連吧崔泵。
用了定制的停用詞表后,我們來看看詞頻的變化猪瞬。
tidy_script %>%
anti_join(custom_stop_words) %>%
inner_join(get_sentiments("nrc")) %>%
filter(sentiment == "positive") %>%
count(word) %>%
arrange(desc(n)) %>%
head(10)
## Joining, by = "word"
## Joining, by = "word"
## # A tibble: 10 x 2
## word n
## <chr> <int>
## 1 love 6
## 2 quiet 6
## 3 bride 5
## 4 music 5
## 5 rest 5
## 6 finally 4
## 7 food 3
## 8 forward 3
## 9 hope 3
## 10 hospitality 3
這次好多了管削,起碼解釋情緒可以自圓其說了。我們再看看那些負(fù)向情感詞匯撑螺。
tidy_script %>%
anti_join(custom_stop_words) %>%
inner_join(get_sentiments("nrc")) %>%
filter(sentiment == "negative") %>%
count(word) %>%
arrange(desc(n)) %>%
head(10)
## Joining, by = "word"
## Joining, by = "word"
## # A tibble: 10 x 2
## word n
## <chr> <int>
## 1 pig 14
## 2 worm 12
## 3 kill 11
## 4 black 9
## 5 dagger 8
## 6 shot 8
## 7 killing 7
## 8 afraid 4
## 9 fear 4
## 10 leave 4
比起之前含思,也有很大進(jìn)步。
做好了基礎(chǔ)的修訂工作甘晤,下面我們來重新作圖吧含潘。我們把停用詞表加進(jìn)去,并且還用filter
語句把情感屬性刪除掉了线婚。因?yàn)槲覀兎治龅膶ο笫乔榫w(emotion)遏弱,而不是情感(sentiment)。
tidy_script %>%
anti_join(custom_stop_words) %>%
inner_join(get_sentiments("nrc")) %>%
filter(sentiment != "negative" & sentiment != "positive") %>%
count(line, sentiment) %>%
mutate(index = line %/% 5) %>%
ggplot(aes(x=index, y=n, color=sentiment)) %>%
+ geom_col() %>%
+ facet_wrap(~sentiment, ncol=3)
## Joining, by = "word"
## Joining, by = "word"
這幅圖一下子變得清晰塞弊,也值得琢磨漱逸。
在這一集的結(jié)尾,多種情緒混雜交織——?dú)g快的氣氛陡然下降游沿,期待與信任在波動饰抒,厭惡在不斷上漲,恐懼與悲傷陡然上升诀黍,憤怒突破天際袋坑,交雜著數(shù)次的驚訝……
你可能會納悶兒,情緒怎么可能這么復(fù)雜眯勾?是不是分析又出問題了枣宫?
還真不是,這一集的故事吃环,有個另外的名字也颤,叫做《紅色婚禮》。
收獲
通過本文的學(xué)習(xí)郁轻,希望你已初步掌握了如下技能:
- 如何用Python對網(wǎng)絡(luò)摘取的文本做處理翅娶,從中找出正文,并且去掉空行等內(nèi)容范咨;
- 如何用數(shù)據(jù)框?qū)?shù)據(jù)進(jìn)行存儲故觅、表示與格式轉(zhuǎn)換厂庇,在Python和R中交換數(shù)據(jù)渠啊;
- 如何安裝和使用RStudio環(huán)境,用R Notebook做交互式編程权旷;
- 如何利用tidytext方式來處理情感分析與情緒分析替蛉;
- 如何設(shè)置自己的停用詞表贯溅;
- 如何用ggplot繪制多維度切面圖形。
掌握了這些內(nèi)容后躲查,你是否覺得用這么強(qiáng)大的工具分析個劇本找影視作品它浅,有些大炮轟蚊子的感覺?
討論
除了本文介紹的方法之外镣煮,你還知道哪些方便的情緒分析工具與方法姐霍?在尋找新劇方面,你有什么獨(dú)家心得體悟典唇?有了情緒分析這個利器镊折,你還可以處理哪些有趣的問題?歡迎留言介衔,記錄下你的思考恨胚,分享給大家。我們一起交流討論炎咖。
喜歡請點(diǎn)贊赃泡。還可以微信關(guān)注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)。
如果你對數(shù)據(jù)科學(xué)感興趣乘盼,不妨閱讀我的系列教程索引貼《如何高效入門數(shù)據(jù)科學(xué)升熊?》,里面還有更多的有趣問題及解法绸栅。