修改助教檔案
情緒字典:
安裝需要的packages
packages = c("dplyr", "tidytext", "stringr", "wordcloud2", "ggplot2",'readr','data.table','reshape2','wordcloud','tidyr','scales',"data.table")
existing = as.character(installed.packages()[,1])
for(pkg in packages[!(packages %in% existing)]) install.packages(pkg)
library(dplyr)
library(stringr)
require(tidytext)
library(wordcloud2)
require(data.table)
require(ggplot2)
require(reshape2)
require(wordcloud)
require(tidyr)
require(readr)
require(scales)
require(data.table)
資料來源:文字平台收集ptt八卦版,關鍵字搜尋:美心、還願
準備LIWC字典
#將匯入的字整理成辭典
p <- read_file("../dict/liwc/positive.txt")
n <- read_file("../dict/liwc/negative.txt")
positive <- strsplit(p, "[,]")[[1]]
negative <- strsplit(n, "[,]")[[1]]
#以逗號做分割
positive <- data.frame(word = positive, sentiments = "positive")
negative <- data.frame(word = negative, sentiemtns = "negative")
colnames(negative) = c("word","sentiment")
colnames(positive) = c("word","sentiment")
LIWC_ch <- rbind(positive, negative)
LIWC_ch
字典1:LIWC_ch
以LIWC字典判斷文集中的word屬於正面字還是負面字
首先計算所有字在文集中出現的總數
word_count <- data %>%
select(word,count) %>%
group_by(word) %>%
summarise(count = sum(count)) %>%
filter(count>3)
word_count
與LIWC情緒字典join
文集中的字出現在LIWC字典中是屬於positive還是negative
word_count %>% inner_join(LIWC_ch)
# word_count屬於LIWC_ch辭典的字留下
data %>%
select(word) %>%
inner_join(LIWC_ch)
以LIWC情緒字典分析
統計每天的文章正面字的次數與負面字的次數
# 找出所有在時間區段中的日期
all_dates <-expand.grid(seq(as.Date(min(data$artDate)), as.Date(max(data$artDate)), by="day"), c("positive", "negative"))
str(all_dates)
names(all_dates) <- c("artDate", "sentiment")
#expand.grid用法
try <- expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female"))
names(try) <- c("heigh","wide","sex")
try
#filter(word!="遊戲")刪除遊戲
plot_table<-data %>%
select(artDate,word,count) %>%
inner_join(LIWC_ch) %>%
group_by(artDate,sentiment) %>%
summarise(count=sum(count))
head(plot_table)
#沒有資料的日期將count設為0
plot_table <- all_dates %>%
merge(plot_table,by.x=c('artDate', "sentiment"),by.y=c('artDate', "sentiment"),
all.x=T,all.y=T) %>%
mutate(count = replace_na(count, 0))
head(plot_table)
plot_table %>%
ggplot()+
geom_line(aes(x=artDate,y=count,colour=sentiment))+
scale_x_date(labels = date_format("%m/%d"))
#replace_na用法
x <- c(1,2,7,8,NA,10,22,NA,15)
replace_na(x,0)
以LIWC字典統計的情緒字數關察兩條線的差異,結果不明顯
同樣的方法以自訂情緒字典來分析並觀察有無差異
準備字典:遊戲商字典
以遊戲商的角度判斷情緒字屬於positive還是negative
將LIWC的情緒字以遊戲商角度重新label
Ex:
驚悚:positive 不恐怖:negative
#寫出csv並觀察
#word_count %>% inner_join(LIWC_ch) %>% write_csv("tokens_sentiment.csv" )
p <- read_file("../dict/game_company/positive.txt")
n <- read_file("../dict/game_company/negative.txt")
positive <- strsplit(p, "[,]")[[1]]
negative <- strsplit(n, "[,]")[[1]]
positive <- data.frame(word = positive, sentiments = "positive")
negative <- data.frame(word = negative, sentiemtns = "negative")
colnames(negative) = c("word","sentiment")
colnames(positive) = c("word","sentiment")
game_company_ch <- rbind(positive, negative)
game_company_ch %>% head()
plot_table<-data %>%
select(artDate,word,count) %>%
inner_join(game_company_ch) %>%
group_by(artDate,sentiment) %>%
summarise(count=sum(count))
#沒有資料的日期將count設為0
plot_table <- all_dates %>%
merge(plot_table,by.x=c('artDate', "sentiment"),by.y=c('artDate', "sentiment"),
all.x=T,all.y=T) %>%
mutate(count = replace_na(count, 0))
plot_table %>%
ggplot()+
geom_line(aes(x=artDate,y=count,colour=sentiment))+
scale_x_date(labels = date_format("%m/%d"))
接下來準備自訂字典xi_ch
以習近平的觀點來分析情緒字
準備字典:xi_ch
p <- read_file("../dict/xi/positive.txt")
n <- read_file("../dict/xi/negative.txt")
positive <- strsplit(p, "[,]")[[1]]
negative <- strsplit(n, "[,]")[[1]]
positive <- data.frame(word = positive, sentiments = "positive")
negative <- data.frame(word = negative, sentiemtns = "negative")
colnames(negative) = c("word","sentiment")
colnames(positive) = c("word","sentiment")
xi_ch <- rbind(positive, negative)
xi_ch %>% head()
plot_table<-data %>%
select(artDate,word,count) %>%
inner_join(xi_ch) %>%
group_by(artDate,sentiment) %>%
summarise(count=sum(count))
#沒有資料的日期將count設為0
plot_table <- all_dates %>%
merge(plot_table,by.x=c('artDate', "sentiment"),by.y=c('artDate', "sentiment"),
all.x=T,all.y=T) %>%
mutate(count = replace_na(count, 0))
plot_table %>%
ggplot()+
geom_line(aes(x=artDate,y=count,colour=sentiment))+
scale_x_date(labels = date_format("%m/%d"))
在02/15後負面情緒非常高
由於符咒風波引發中國玩家強烈的抵制
上面幾張圖發現02/15後有一段高峰
接下來都以02/15後的資料進行分析
比較兩個字典分析差異
senti_by_date_game_company<-data %>%
inner_join(game_company_ch) %>%
group_by(artDate, sentiment) %>%
summarise(n=sum(count)) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative) %>%
mutate(method='game_company')
senti_by_date_game_company %>% head()
LIWC字典
計算每天的文章正面及負面字數
sentiment為正面字數減去負面字數
senti_by_date_LIWC<-data %>%
inner_join(LIWC_ch) %>%
group_by(artDate, sentiment) %>%
summarise(n=sum(count)) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative) %>%
mutate(method='LIWC')
senti_by_date_LIWC %>% head()
比較兩個字典分析差異
bind_rows(senti_by_date_game_company,
senti_by_date_LIWC) %>%
filter(artDate>='2019-02-15') %>%
ggplot(aes(x= artDate,y=sentiment,fill=method)) +
geom_col(show.legend = FALSE) +
scale_x_date(labels = date_format("%m/%d")) +
facet_wrap(~method, ncol = 1, scales = "fixed")+
geom_text(aes(label=sentiment))
XI字典
計算每天的文章正面及負面字數
sentiment為正面字數減去負面字數
senti_by_date_XI<-data %>%
inner_join(xi_ch) %>%
group_by(artDate, sentiment) %>%
summarise(n=sum(count)) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative) %>%
mutate(method='XI')
比較遊戲廠商與習近平的分析角度差異
bind_rows(senti_by_date_game_company,
senti_by_date_XI) %>%
filter(artDate>='2019-02-15') %>%
ggplot(aes(x= artDate,y=sentiment,fill=method)) +
geom_col(show.legend = FALSE) +
scale_x_date(labels = date_format("%m/%d")) +
facet_wrap(~method, ncol = 1, scales = "fixed")+
geom_text(aes(label=sentiment))
從上面幾張圖看出在02/15後情緒起伏較明顯
以不同字典分析最常見的情緒字
LIWC 字典分析最常見正面及負面情緒字
word_count %>%
inner_join(LIWC_ch) %>%
group_by(sentiment) %>%
top_n(10,wt = count) %>%
ungroup() %>%
mutate(word = reorder(word, count)) %>%
ggplot(aes(word, count, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
theme(text=element_text(size=14))+
coord_flip()
清除’遊戲’辭彙
word_count<-word_count %>% filter(word!='遊戲')
word_count %>%
inner_join(LIWC_ch) %>%
group_by(sentiment) %>%
top_n(10,wt = count) %>%
ungroup() %>%
mutate(word = reorder(word, count)) %>%
ggplot(aes(word, count, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
theme(text=element_text(size=14))+
coord_flip()
接下來以遊戲商及習近平的角度分析情緒
以自訂字典:遊戲廠商 分析最常見正面及負面情緒字
word_count %>%
inner_join(game_company_ch) %>%
group_by(sentiment) %>%
top_n(10,wt = count) %>%
ungroup() %>%
mutate(word = reorder(word, count)) %>%
ggplot(aes(word, count, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
theme(text=element_text(size=14))+
coord_flip()
以自訂字典:習近平 分析最常見正面及負面情緒字
word_count %>%
inner_join(xi_ch) %>%
group_by(sentiment) %>%
top_n(10,wt = count) %>%
ungroup() %>%
mutate(word = reorder(word, count)) %>%
ggplot(aes(word, count, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
theme(text=element_text(size=14))+
coord_flip()
02/15後情緒數量大增
用文字雲分析02/15後討論的情緒字
LIWC字典
data %>%
filter(artDate>='2019-02-15') %>%
inner_join(LIWC_ch) %>%
group_by(word,sentiment) %>%
summarise(count=sum(count)) %>%
acast(word ~ sentiment, value.var = "count", fill = 0) %>%
comparison.cloud(colors = c("gray80", "gray20"),
max.words = 100)
自訂字典:遊戲廠商
data %>%
filter(artDate>='2019-02-15') %>%
inner_join(game_company_ch) %>%
group_by(word,sentiment) %>%
summarise(count=sum(count)) %>%
acast(word ~ sentiment, value.var = "count", fill = 0) %>%
comparison.cloud(colors = c("gray80", "gray20"),
max.words = 100)
自訂字典:習近平
data %>%
filter(artDate>='2019-02-15') %>%
inner_join(xi_ch) %>%
group_by(word,sentiment) %>%
summarise(count=sum(count)) %>%
acast(word ~ sentiment, value.var = "count", fill = 0) %>%
comparison.cloud(colors = c("gray80", "gray20"),
max.words = 100)
課堂練習
文字雲分析杜豐于及慈姑觀音兩腳色的評價
搜尋word中有杜豐于或慈姑觀音的文章
LS0tDQp0aXRsZTogIuS4reaWh+izh+aWmeS9v+eUqOS4jeWQjOaDhee3kuWtl+WFuOeahOaDhee3kuWIhuaekCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIyPkv67mlLnliqnmlZnmqpTmoYgNCg0KI+aDhee3kuWtl+WFuDoNCg0KKyBMSVdDDQorIOS9v+eUqOiAheiHquioguWtl+WFuA0KICArIOmBiuaIsuWVhg0KICArIOe/kui/keW5sw0KDQojIyDlronoo53pnIDopoHnmoRwYWNrYWdlcw0KYGBge3J9DQpwYWNrYWdlcyA9IGMoImRwbHlyIiwgInRpZHl0ZXh0IiwgInN0cmluZ3IiLCAid29yZGNsb3VkMiIsICJnZ3Bsb3QyIiwncmVhZHInLCdkYXRhLnRhYmxlJywncmVzaGFwZTInLCd3b3JkY2xvdWQnLCd0aWR5cicsJ3NjYWxlcycsImRhdGEudGFibGUiKQ0KZXhpc3RpbmcgPSBhcy5jaGFyYWN0ZXIoaW5zdGFsbGVkLnBhY2thZ2VzKClbLDFdKQ0KZm9yKHBrZyBpbiBwYWNrYWdlc1shKHBhY2thZ2VzICVpbiUgZXhpc3RpbmcpXSkgaW5zdGFsbC5wYWNrYWdlcyhwa2cpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzdHJpbmdyKQ0KcmVxdWlyZSh0aWR5dGV4dCkNCmxpYnJhcnkod29yZGNsb3VkMikNCnJlcXVpcmUoZGF0YS50YWJsZSkNCnJlcXVpcmUoZ2dwbG90MikNCnJlcXVpcmUocmVzaGFwZTIpDQpyZXF1aXJlKHdvcmRjbG91ZCkNCnJlcXVpcmUodGlkeXIpDQpyZXF1aXJlKHJlYWRyKQ0KcmVxdWlyZShzY2FsZXMpDQpyZXF1aXJlKGRhdGEudGFibGUpDQpgYGANCg0KDQoNCg0KI+izh+aWmeS+hua6kDrmloflrZflubPlj7DmlLbpm4ZwdHTlhavljabniYgs6Zec6Y215a2X5pCc5bCLOue+juW/g+OAgemChOmhmA0KI+izh+aWmembhjpzb2NpYWxfbWVkaWFfMDMwNV9hcnRXb3JkRnJlcS5jc3YNCg0KYGBge3J9DQpkYXRhPWZyZWFkKCcuLi9kYXRhL3NvY2lhbF9tZWRpYV8wMzA1X2FydFdvcmRGcmVxLmNzdicsZW5jb2RpbmcgPSAnVVRGLTgnKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YSAlPiUgDQogIGZpbHRlcihncmVwbCgnXycsd29yZCkpIA0KYGBgDQoNCmBgYHtyfQ0KZGF0YSRhcnREYXRlPSBkYXRhJGFydERhdGUgJT4lIGFzLkRhdGUoIiVZLyVtLyVkIikNCiPovYnmj5vml6XmnJ/moLzlvI8NCg0KaGVhZChkYXRhKQ0KDQpkYXRhPC1kYXRhICU+JSANCiAgZmlsdGVyKCFncmVwbCgnXycsd29yZCkpIA0KI2dyZXBsOndvcmTlh7rnj77mraPopo/ooajnpLrlvI8nXycNCiAgDQpkYXRhDQpgYGANCg0KDQoNCg0KDQoNCg0KI+a6luWCmUxJV0PlrZflhbgNCg0KDQoNCmBgYHtyfQ0KI+Wwh+WMr+WFpeeahOWtl+aVtOeQhuaIkOi+reWFuA0KcCA8LSByZWFkX2ZpbGUoIi4uL2RpY3QvbGl3Yy9wb3NpdGl2ZS50eHQiKQ0KbiA8LSByZWFkX2ZpbGUoIi4uL2RpY3QvbGl3Yy9uZWdhdGl2ZS50eHQiKQ0KDQpwb3NpdGl2ZSA8LSBzdHJzcGxpdChwLCAiWyxdIilbWzFdXQ0KbmVnYXRpdmUgPC0gc3Ryc3BsaXQobiwgIlssXSIpW1sxXV0NCiPku6XpgJfomZ/lgZrliIblibINCg0KcG9zaXRpdmUgPC0gZGF0YS5mcmFtZSh3b3JkID0gcG9zaXRpdmUsIHNlbnRpbWVudHMgPSAicG9zaXRpdmUiKQ0KbmVnYXRpdmUgPC0gZGF0YS5mcmFtZSh3b3JkID0gbmVnYXRpdmUsIHNlbnRpZW10bnMgPSAibmVnYXRpdmUiKQ0KY29sbmFtZXMobmVnYXRpdmUpID0gYygid29yZCIsInNlbnRpbWVudCIpDQpjb2xuYW1lcyhwb3NpdGl2ZSkgPSBjKCJ3b3JkIiwic2VudGltZW50IikNCkxJV0NfY2ggPC0gcmJpbmQocG9zaXRpdmUsIG5lZ2F0aXZlKQ0KTElXQ19jaA0KYGBgDQoNCiMjIyPlrZflhbgxOkxJV0NfY2gNCg0KDQoNCiPku6VMSVdD5a2X5YW45Yik5pa35paH6ZuG5Lit55qEd29yZOWxrOaWvOato+mdouWtl+mChOaYr+iyoOmdouWtlw0KDQojIyMjRVg6DQorIOiumue+jjpwb3NpdGl2ZQ0KKyDljZHliqM6bmVnYXRpdmUNCg0KIyMjI+mmluWFiOioiOeul+aJgOacieWtl+WcqOaWh+mbhuS4reWHuuePvueahOe4veaVuA0KDQoNCmBgYHtyfQ0Kd29yZF9jb3VudCA8LSBkYXRhICU+JQ0KICBzZWxlY3Qod29yZCxjb3VudCkgJT4lIA0KICBncm91cF9ieSh3b3JkKSAlPiUgDQogIHN1bW1hcmlzZShjb3VudCA9IHN1bShjb3VudCkpICAlPiUNCiAgZmlsdGVyKGNvdW50PjMpDQogDQp3b3JkX2NvdW50DQoNCmBgYA0KDQojIyMj6IiHTElXQ+aDhee3kuWtl+WFuGpvaW4NCiMjIyPmlofpm4bkuK3nmoTlrZflh7rnj77lnKhMSVdD5a2X5YW45Lit5piv5bGs5pa8cG9zaXRpdmXpgoTmmK9uZWdhdGl2ZQ0KDQoNCmBgYHtyfQ0Kd29yZF9jb3VudCAlPiUgaW5uZXJfam9pbihMSVdDX2NoKQ0KIyB3b3JkX2NvdW505bGs5pa8TElXQ19jaOi+reWFuOeahOWtl+eVmeS4iw0KDQpkYXRhICU+JSANCiAgc2VsZWN0KHdvcmQpICU+JQ0KICBpbm5lcl9qb2luKExJV0NfY2gpDQoNCmBgYA0KDQoNCg0KDQoNCiPku6VMSVdD5oOF57eS5a2X5YW45YiG5p6QDQojIyMj57Wx6KiI5q+P5aSp55qE5paH56ug5q2j6Z2i5a2X55qE5qyh5pW46IiH6LKg6Z2i5a2X55qE5qyh5pW4DQoNCg0KYGBge3J9DQojIOaJvuWHuuaJgOacieWcqOaZgumWk+WNgOauteS4reeahOaXpeacnw0KYWxsX2RhdGVzIDwtZXhwYW5kLmdyaWQoc2VxKGFzLkRhdGUobWluKGRhdGEkYXJ0RGF0ZSkpLCBhcy5EYXRlKG1heChkYXRhJGFydERhdGUpKSwgYnk9ImRheSIpLCBjKCJwb3NpdGl2ZSIsICJuZWdhdGl2ZSIpKQ0Kc3RyKGFsbF9kYXRlcykNCg0KbmFtZXMoYWxsX2RhdGVzKSA8LSBjKCJhcnREYXRlIiwgInNlbnRpbWVudCIpDQpgYGANCmBgYHtyfQ0KI2V4cGFuZC5ncmlk55So5rOVDQp0cnkgPC0gZXhwYW5kLmdyaWQoaD1jKDYwLDgwKSwgdz1jKDEwMCwgMzAwKSwgc2V4PWMoIk1hbGUiLCAiRmVtYWxlIikpDQpuYW1lcyh0cnkpIDwtIGMoImhlaWdoIiwid2lkZSIsInNleCIpDQp0cnkNCmBgYA0KDQpgYGB7cn0NCiNmaWx0ZXIod29yZCE9IumBiuaIsiIp5Yiq6Zmk6YGK5oiyDQoNCnBsb3RfdGFibGU8LWRhdGEgJT4lDQogIHNlbGVjdChhcnREYXRlLHdvcmQsY291bnQpICU+JQ0KICBpbm5lcl9qb2luKExJV0NfY2gpICU+JSANCiAgZ3JvdXBfYnkoYXJ0RGF0ZSxzZW50aW1lbnQpICU+JQ0KICBzdW1tYXJpc2UoY291bnQ9c3VtKGNvdW50KSkgIA0KaGVhZChwbG90X3RhYmxlKQ0KDQoNCiPmspLmnInos4fmlpnnmoTml6XmnJ/lsIdjb3VudOioreeCujANCnBsb3RfdGFibGUgPC0gYWxsX2RhdGVzICU+JSANCiAgbWVyZ2UocGxvdF90YWJsZSxieS54PWMoJ2FydERhdGUnLCAic2VudGltZW50IiksYnkueT1jKCdhcnREYXRlJywgInNlbnRpbWVudCIpLA0KICAgICAgICBhbGwueD1ULGFsbC55PVQpICU+JSANCiAgbXV0YXRlKGNvdW50ID0gcmVwbGFjZV9uYShjb3VudCwgMCkpDQpoZWFkKHBsb3RfdGFibGUpDQoNCg0KcGxvdF90YWJsZSAlPiUNCiAgZ2dwbG90KCkrDQogIGdlb21fbGluZShhZXMoeD1hcnREYXRlLHk9Y291bnQsY29sb3VyPXNlbnRpbWVudCkpKw0KICBzY2FsZV94X2RhdGUobGFiZWxzID0gZGF0ZV9mb3JtYXQoIiVtLyVkIikpIA0KDQpgYGANCg0KYGBge3J9DQojcmVwbGFjZV9uYeeUqOazlQ0KeCA8LSBjKDEsMiw3LDgsTkEsMTAsMjIsTkEsMTUpDQpyZXBsYWNlX25hKHgsMCkNCmBgYA0KDQojIyMj5LulTElXQ+Wtl+WFuOe1seioiOeahOaDhee3kuWtl+aVuOmXnOWvn+WFqeainee3mueahOW3rueVsO+8jOe1kOaenOS4jeaYjumhrw0KIyMjI+WQjOaoo+eahOaWueazleS7peiHquioguaDhee3kuWtl+WFuOS+huWIhuaekOS4puingOWvn+acieeEoeW3rueVsA0KDQoNCiPmupblgpnlrZflhbg66YGK5oiy5ZWG5a2X5YW4DQojIyMj5Lul6YGK5oiy5ZWG55qE6KeS5bqm5Yik5pa35oOF57eS5a2X5bGs5pa8cG9zaXRpdmXpgoTmmK9uZWdhdGl2ZQ0KIyMjI+Wwh0xJV0PnmoTmg4Xnt5LlrZfku6XpgYrmiLLllYbop5Lluqbph43mlrBsYWJlbA0KRXg6DQoNCumpmuaCmjpwb3NpdGl2ZQ0K5LiN5oGQ5oCWOm5lZ2F0aXZlDQoNCg0KYGBge3J9DQoj5a+r5Ye6Y3N25Lim6KeA5a+fDQojd29yZF9jb3VudCAlPiUgIGlubmVyX2pvaW4oTElXQ19jaCkgJT4lIHdyaXRlX2NzdigidG9rZW5zX3NlbnRpbWVudC5jc3YiICkNCmBgYA0KDQoNCg0KDQoNCmBgYHtyfQ0KcCA8LSByZWFkX2ZpbGUoIi4uL2RpY3QvZ2FtZV9jb21wYW55L3Bvc2l0aXZlLnR4dCIpDQpuIDwtIHJlYWRfZmlsZSgiLi4vZGljdC9nYW1lX2NvbXBhbnkvbmVnYXRpdmUudHh0IikNCg0KcG9zaXRpdmUgPC0gc3Ryc3BsaXQocCwgIlssXSIpW1sxXV0NCm5lZ2F0aXZlIDwtIHN0cnNwbGl0KG4sICJbLF0iKVtbMV1dDQpwb3NpdGl2ZSA8LSBkYXRhLmZyYW1lKHdvcmQgPSBwb3NpdGl2ZSwgc2VudGltZW50cyA9ICJwb3NpdGl2ZSIpDQpuZWdhdGl2ZSA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuZWdhdGl2ZSwgc2VudGllbXRucyA9ICJuZWdhdGl2ZSIpDQpjb2xuYW1lcyhuZWdhdGl2ZSkgPSBjKCJ3b3JkIiwic2VudGltZW50IikNCmNvbG5hbWVzKHBvc2l0aXZlKSA9IGMoIndvcmQiLCJzZW50aW1lbnQiKQ0KZ2FtZV9jb21wYW55X2NoIDwtIHJiaW5kKHBvc2l0aXZlLCBuZWdhdGl2ZSkNCmdhbWVfY29tcGFueV9jaCAlPiUgaGVhZCgpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3RfdGFibGU8LWRhdGEgJT4lDQogIHNlbGVjdChhcnREYXRlLHdvcmQsY291bnQpICU+JQ0KICBpbm5lcl9qb2luKGdhbWVfY29tcGFueV9jaCkgJT4lIA0KICBncm91cF9ieShhcnREYXRlLHNlbnRpbWVudCkgJT4lDQogIHN1bW1hcmlzZShjb3VudD1zdW0oY291bnQpKSAgDQoNCiPmspLmnInos4fmlpnnmoTml6XmnJ/lsIdjb3VudOioreeCujANCnBsb3RfdGFibGUgPC0gYWxsX2RhdGVzICU+JSANCiAgbWVyZ2UocGxvdF90YWJsZSxieS54PWMoJ2FydERhdGUnLCAic2VudGltZW50IiksYnkueT1jKCdhcnREYXRlJywgInNlbnRpbWVudCIpLA0KICAgICAgICBhbGwueD1ULGFsbC55PVQpICU+JSANCiAgbXV0YXRlKGNvdW50ID0gcmVwbGFjZV9uYShjb3VudCwgMCkpDQoNCnBsb3RfdGFibGUgJT4lDQogIGdncGxvdCgpKw0KICBnZW9tX2xpbmUoYWVzKHg9YXJ0RGF0ZSx5PWNvdW50LGNvbG91cj1zZW50aW1lbnQpKSsNCiAgc2NhbGVfeF9kYXRlKGxhYmVscyA9IGRhdGVfZm9ybWF0KCIlbS8lZCIpKSANCmBgYA0KDQoNCg0KDQojIyMj5o6l5LiL5L6G5rqW5YKZ6Ieq6KiC5a2X5YW4eGlfY2gNCiMjIyPku6Xnv5Lov5HlubPnmoTop4Dpu57kvobliIbmnpDmg4Xnt5LlrZcNCg0KIyMjI+a6luWCmeWtl+WFuDp4aV9jaA0KDQpgYGB7cn0NCnAgPC0gcmVhZF9maWxlKCIuLi9kaWN0L3hpL3Bvc2l0aXZlLnR4dCIpDQpuIDwtIHJlYWRfZmlsZSgiLi4vZGljdC94aS9uZWdhdGl2ZS50eHQiKQ0KDQpwb3NpdGl2ZSA8LSBzdHJzcGxpdChwLCAiWyxdIilbWzFdXQ0KbmVnYXRpdmUgPC0gc3Ryc3BsaXQobiwgIlssXSIpW1sxXV0NCnBvc2l0aXZlIDwtIGRhdGEuZnJhbWUod29yZCA9IHBvc2l0aXZlLCBzZW50aW1lbnRzID0gInBvc2l0aXZlIikNCm5lZ2F0aXZlIDwtIGRhdGEuZnJhbWUod29yZCA9IG5lZ2F0aXZlLCBzZW50aWVtdG5zID0gIm5lZ2F0aXZlIikNCmNvbG5hbWVzKG5lZ2F0aXZlKSA9IGMoIndvcmQiLCJzZW50aW1lbnQiKQ0KY29sbmFtZXMocG9zaXRpdmUpID0gYygid29yZCIsInNlbnRpbWVudCIpDQp4aV9jaCA8LSByYmluZChwb3NpdGl2ZSwgbmVnYXRpdmUpDQp4aV9jaCAlPiUgaGVhZCgpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3RfdGFibGU8LWRhdGEgJT4lDQogIHNlbGVjdChhcnREYXRlLHdvcmQsY291bnQpICU+JQ0KICBpbm5lcl9qb2luKHhpX2NoKSAlPiUgDQogIGdyb3VwX2J5KGFydERhdGUsc2VudGltZW50KSAlPiUNCiAgc3VtbWFyaXNlKGNvdW50PXN1bShjb3VudCkpICANCg0KI+aykuacieizh+aWmeeahOaXpeacn+Wwh2NvdW506Kit54K6MA0KcGxvdF90YWJsZSA8LSBhbGxfZGF0ZXMgJT4lIA0KICBtZXJnZShwbG90X3RhYmxlLGJ5Lng9YygnYXJ0RGF0ZScsICJzZW50aW1lbnQiKSxieS55PWMoJ2FydERhdGUnLCAic2VudGltZW50IiksDQogICAgICAgIGFsbC54PVQsYWxsLnk9VCkgJT4lIA0KICBtdXRhdGUoY291bnQgPSByZXBsYWNlX25hKGNvdW50LCAwKSkNCg0KcGxvdF90YWJsZSAlPiUNCiAgZ2dwbG90KCkrDQogIGdlb21fbGluZShhZXMoeD1hcnREYXRlLHk9Y291bnQsY29sb3VyPXNlbnRpbWVudCkpKw0KICBzY2FsZV94X2RhdGUobGFiZWxzID0gZGF0ZV9mb3JtYXQoIiVtLyVkIikpIA0KYGBgDQoNCiMjIyPlnKgwMi8xNeW+jOiyoOmdouaDhee3kumdnuW4uOmrmA0KIyMjI+eUseaWvOespuWSkumiqOazouW8leeZvOS4reWci+eOqeWutuW8t+eDiOeahOaKteWItg0KDQoNCg0KDQojIyMj5LiK6Z2i5bm+5by15ZyW55m854++MDIvMTXlvozmnInkuIDmrrXpq5jls7ANCiMjIyPmjqXkuIvkvobpg73ku6UwMi8xNeW+jOeahOizh+aWmemAsuihjOWIhuaekA0KDQoNCg0KDQoNCiPmr5TovIPlhanlgIvlrZflhbjliIbmnpDlt67nlbANCg0KYGBge3J9DQpzZW50aV9ieV9kYXRlX2dhbWVfY29tcGFueTwtZGF0YSAlPiUgDQogIGlubmVyX2pvaW4oZ2FtZV9jb21wYW55X2NoKSAlPiUNCiAgDQogIGdyb3VwX2J5KGFydERhdGUsIHNlbnRpbWVudCkgJT4lDQogIHN1bW1hcmlzZShuPXN1bShjb3VudCkpICU+JQ0KICBzcHJlYWQoc2VudGltZW50LCBuLCBmaWxsID0gMCkgJT4lDQogIG11dGF0ZShzZW50aW1lbnQgPSBwb3NpdGl2ZSAtIG5lZ2F0aXZlKSAlPiUNCiAgbXV0YXRlKG1ldGhvZD0nZ2FtZV9jb21wYW55JykgDQoNCg0Kc2VudGlfYnlfZGF0ZV9nYW1lX2NvbXBhbnkgJT4lIGhlYWQoKQ0KYGBgDQoNCg0KDQojIyMjTElXQ+Wtl+WFuA0KIyMjI+ioiOeul+avj+WkqeeahOaWh+eroOato+mdouWPiuiyoOmdouWtl+aVuA0KIyMjI3NlbnRpbWVudOeCuuato+mdouWtl+aVuOa4m+WOu+iyoOmdouWtl+aVuA0KDQpgYGB7cn0NCnNlbnRpX2J5X2RhdGVfTElXQzwtZGF0YSAlPiUgDQogIGlubmVyX2pvaW4oTElXQ19jaCkgJT4lDQogIGdyb3VwX2J5KGFydERhdGUsIHNlbnRpbWVudCkgJT4lDQogIHN1bW1hcmlzZShuPXN1bShjb3VudCkpICU+JQ0KICBzcHJlYWQoc2VudGltZW50LCBuLCBmaWxsID0gMCkgJT4lDQogIG11dGF0ZShzZW50aW1lbnQgPSBwb3NpdGl2ZSAtIG5lZ2F0aXZlKSAlPiUNCiAgbXV0YXRlKG1ldGhvZD0nTElXQycpIA0KDQpzZW50aV9ieV9kYXRlX0xJV0MgJT4lIGhlYWQoKQ0KDQpgYGANCg0KDQoNCiPmr5TovIPlhanlgIvlrZflhbjliIbmnpDlt67nlbANCmBgYHtyfQ0KYmluZF9yb3dzKHNlbnRpX2J5X2RhdGVfZ2FtZV9jb21wYW55LA0KICAgICAgICAgIHNlbnRpX2J5X2RhdGVfTElXQykgJT4lDQogIA0KICBmaWx0ZXIoYXJ0RGF0ZT49JzIwMTktMDItMTUnKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBhcnREYXRlLHk9c2VudGltZW50LGZpbGw9bWV0aG9kKSkgKw0KICANCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBzY2FsZV94X2RhdGUobGFiZWxzID0gZGF0ZV9mb3JtYXQoIiVtLyVkIikpICsNCiAgZmFjZXRfd3JhcCh+bWV0aG9kLCBuY29sID0gMSwgc2NhbGVzID0gImZpeGVkIikrDQogIGdlb21fdGV4dChhZXMobGFiZWw9c2VudGltZW50KSkNCiAgDQpgYGANCg0KDQojIyMjWEnlrZflhbgNCiMjIyPoqIjnrpfmr4/lpKnnmoTmlofnq6DmraPpnaLlj4rosqDpnaLlrZfmlbgNCiMjIyNzZW50aW1lbnTngrrmraPpnaLlrZfmlbjmuJvljrvosqDpnaLlrZfmlbgNCg0KDQpgYGB7cn0NCnNlbnRpX2J5X2RhdGVfWEk8LWRhdGEgJT4lIA0KICBpbm5lcl9qb2luKHhpX2NoKSAlPiUNCiAgZ3JvdXBfYnkoYXJ0RGF0ZSwgc2VudGltZW50KSAlPiUNCiAgc3VtbWFyaXNlKG49c3VtKGNvdW50KSkgICU+JQ0KICBzcHJlYWQoc2VudGltZW50LCBuLCBmaWxsID0gMCkgJT4lDQogIG11dGF0ZShzZW50aW1lbnQgPSBwb3NpdGl2ZSAtIG5lZ2F0aXZlKSAlPiUNCiAgbXV0YXRlKG1ldGhvZD0nWEknKSANCg0KYGBgDQoNCg0KDQoj5q+U6LyD6YGK5oiy5bug5ZWG6IiH57+S6L+R5bmz55qE5YiG5p6Q6KeS5bqm5beu55WwDQoNCmBgYHtyfQ0KYmluZF9yb3dzKHNlbnRpX2J5X2RhdGVfZ2FtZV9jb21wYW55LA0KICAgICAgICAgIHNlbnRpX2J5X2RhdGVfWEkpICU+JQ0KICBmaWx0ZXIoYXJ0RGF0ZT49JzIwMTktMDItMTUnKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBhcnREYXRlLHk9c2VudGltZW50LGZpbGw9bWV0aG9kKSkgKw0KICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIHNjYWxlX3hfZGF0ZShsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJW0vJWQiKSkgKw0KICBmYWNldF93cmFwKH5tZXRob2QsIG5jb2wgPSAxLCBzY2FsZXMgPSAiZml4ZWQiKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbD1zZW50aW1lbnQpKQ0KYGBgDQoNCg0K5b6e5LiK6Z2i5bm+5by15ZyW55yL5Ye65ZyoMDIvMTXlvozmg4Xnt5LotbfkvI/ovIPmmI7poa8NCg0KDQoNCiPku6XkuI3lkIzlrZflhbjliIbmnpDmnIDluLjopovnmoTmg4Xnt5LlrZcNCg0KDQojIExJV0Mg5a2X5YW45YiG5p6Q5pyA5bi46KaL5q2j6Z2i5Y+K6LKg6Z2i5oOF57eS5a2XDQoNCmBgYHtyfQ0Kd29yZF9jb3VudCAlPiUgDQogIGlubmVyX2pvaW4oTElXQ19jaCkgJT4lDQogIGdyb3VwX2J5KHNlbnRpbWVudCkgJT4lDQogIHRvcF9uKDEwLHd0ID0gY291bnQpICU+JQ0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUod29yZCA9IHJlb3JkZXIod29yZCwgY291bnQpKSAlPiUNCiAgZ2dwbG90KGFlcyh3b3JkLCBjb3VudCwgZmlsbCA9IHNlbnRpbWVudCkpICsNCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBmYWNldF93cmFwKH5zZW50aW1lbnQsIHNjYWxlcyA9ICJmcmVlX3kiKSArDQogIGxhYnMoeSA9ICJDb250cmlidXRpb24gdG8gc2VudGltZW50IiwNCiAgICAgICB4ID0gTlVMTCkgKw0KICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0KSkrDQogIGNvb3JkX2ZsaXAoKQ0KYGBgDQoNCiMjIyPmuIXpmaQn6YGK5oiyJ+i+reW9mQ0KDQpgYGB7cn0NCndvcmRfY291bnQ8LXdvcmRfY291bnQgJT4lIGZpbHRlcih3b3JkIT0n6YGK5oiyJykNCmBgYA0KDQoNCg0KYGBge3J9DQp3b3JkX2NvdW50ICU+JSANCiAgaW5uZXJfam9pbihMSVdDX2NoKSAlPiUNCiAgZ3JvdXBfYnkoc2VudGltZW50KSAlPiUNCiAgdG9wX24oMTAsd3QgPSBjb3VudCkgJT4lDQogIHVuZ3JvdXAoKSAlPiUgDQogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBjb3VudCkpICU+JQ0KICBnZ3Bsb3QoYWVzKHdvcmQsIGNvdW50LCBmaWxsID0gc2VudGltZW50KSkgKw0KICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIGZhY2V0X3dyYXAofnNlbnRpbWVudCwgc2NhbGVzID0gImZyZWVfeSIpICsNCiAgbGFicyh5ID0gIkNvbnRyaWJ1dGlvbiB0byBzZW50aW1lbnQiLA0KICAgICAgIHggPSBOVUxMKSArDQogIHRoZW1lKHRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTQpKSsNCiAgY29vcmRfZmxpcCgpDQpgYGANCg0KDQoNCg0K5o6l5LiL5L6G5Lul6YGK5oiy5ZWG5Y+K57+S6L+R5bmz55qE6KeS5bqm5YiG5p6Q5oOF57eSDQoNCg0KIyMjIyDku6Xoh6roqILlrZflhbg66YGK5oiy5bug5ZWGIOWIhuaekOacgOW4uOimi+ato+mdouWPiuiyoOmdouaDhee3kuWtlyANCg0KYGBge3J9DQp3b3JkX2NvdW50ICU+JQ0KICBpbm5lcl9qb2luKGdhbWVfY29tcGFueV9jaCkgJT4lDQogIGdyb3VwX2J5KHNlbnRpbWVudCkgJT4lDQogIHRvcF9uKDEwLHd0ID0gY291bnQpICU+JSANCiAgdW5ncm91cCgpICU+JQ0KICBtdXRhdGUod29yZCA9IHJlb3JkZXIod29yZCwgY291bnQpKSAlPiUNCiAgZ2dwbG90KGFlcyh3b3JkLCBjb3VudCwgZmlsbCA9IHNlbnRpbWVudCkpICsNCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBmYWNldF93cmFwKH5zZW50aW1lbnQsIHNjYWxlcyA9ICJmcmVlX3kiKSArDQogIGxhYnMoeSA9ICJDb250cmlidXRpb24gdG8gc2VudGltZW50IiwNCiAgICAgICB4ID0gTlVMTCkgKw0KICB0aGVtZSh0ZXh0PWVsZW1lbnRfdGV4dChzaXplPTE0KSkrDQogIGNvb3JkX2ZsaXAoKQ0KYGBgDQoNCiMjIyMg5Lul6Ieq6KiC5a2X5YW4Oue/kui/keW5syDliIbmnpDmnIDluLjopovmraPpnaLlj4rosqDpnaLmg4Xnt5LlrZcNCg0KYGBge3J9DQp3b3JkX2NvdW50ICU+JQ0KICBpbm5lcl9qb2luKHhpX2NoKSAlPiUNCiAgZ3JvdXBfYnkoc2VudGltZW50KSAlPiUNCiAgdG9wX24oMTAsd3QgPSBjb3VudCkgJT4lIA0KICB1bmdyb3VwKCkgJT4lDQogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBjb3VudCkpICU+JQ0KICBnZ3Bsb3QoYWVzKHdvcmQsIGNvdW50LCBmaWxsID0gc2VudGltZW50KSkgKw0KICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIGZhY2V0X3dyYXAofnNlbnRpbWVudCwgc2NhbGVzID0gImZyZWVfeSIpICsNCiAgbGFicyh5ID0gIkNvbnRyaWJ1dGlvbiB0byBzZW50aW1lbnQiLA0KICAgICAgIHggPSBOVUxMKSArDQogIHRoZW1lKHRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTQpKSsNCiAgY29vcmRfZmxpcCgpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQojMDIvMTXlvozmg4Xnt5Lmlbjph4/lpKflop4NCg0KI+eUqOaWh+Wtl+mbsuWIhuaekDAyLzE15b6M6KiO6KuW55qE5oOF57eS5a2XDQoNCg0KDQojIyMjTElXQ+Wtl+WFuA0KDQpgYGB7cn0NCmRhdGEgJT4lIA0KICBmaWx0ZXIoYXJ0RGF0ZT49JzIwMTktMDItMTUnKSAlPiUNCiAgaW5uZXJfam9pbihMSVdDX2NoKSAlPiUNCiAgZ3JvdXBfYnkod29yZCxzZW50aW1lbnQpICU+JQ0KICBzdW1tYXJpc2UoY291bnQ9c3VtKGNvdW50KSkgJT4lDQoNCiAgYWNhc3Qod29yZCB+IHNlbnRpbWVudCwgdmFsdWUudmFyID0gImNvdW50IiwgZmlsbCA9IDApICU+JQ0KICBjb21wYXJpc29uLmNsb3VkKGNvbG9ycyA9IGMoImdyYXk4MCIsICJncmF5MjAiKSwNCiAgICAgICAgICAgICAgICAgICBtYXgud29yZHMgPSAxMDApDQogIA0KYGBgDQoNCg0KIyMjI+iHquioguWtl+WFuDrpgYrmiLLlu6DllYYNCg0KYGBge3J9DQpkYXRhICU+JSANCiAgZmlsdGVyKGFydERhdGU+PScyMDE5LTAyLTE1JykgJT4lDQogIGlubmVyX2pvaW4oZ2FtZV9jb21wYW55X2NoKSAlPiUNCiAgZ3JvdXBfYnkod29yZCxzZW50aW1lbnQpICU+JQ0KICBzdW1tYXJpc2UoY291bnQ9c3VtKGNvdW50KSkgJT4lDQoNCiAgYWNhc3Qod29yZCB+IHNlbnRpbWVudCwgdmFsdWUudmFyID0gImNvdW50IiwgZmlsbCA9IDApICU+JQ0KICBjb21wYXJpc29uLmNsb3VkKGNvbG9ycyA9IGMoImdyYXk4MCIsICJncmF5MjAiKSwNCiAgICAgICAgICAgICAgICAgICBtYXgud29yZHMgPSAxMDApDQogIA0KYGBgDQoNCg0KIyMjI+iHquioguWtl+WFuDrnv5Lov5HlubMNCg0KYGBge3J9DQpkYXRhICU+JSANCiAgZmlsdGVyKGFydERhdGU+PScyMDE5LTAyLTE1JykgJT4lDQogIGlubmVyX2pvaW4oeGlfY2gpICU+JQ0KICBncm91cF9ieSh3b3JkLHNlbnRpbWVudCkgJT4lDQogIHN1bW1hcmlzZShjb3VudD1zdW0oY291bnQpKSAlPiUNCiAgYWNhc3Qod29yZCB+IHNlbnRpbWVudCwgdmFsdWUudmFyID0gImNvdW50IiwgZmlsbCA9IDApICU+JQ0KICBjb21wYXJpc29uLmNsb3VkKGNvbG9ycyA9IGMoImdyYXk4MCIsICJncmF5MjAiKSwNCiAgICAgICAgICAgICAgICAgICBtYXgud29yZHMgPSAxMDApDQpgYGANCg0KDQoNCg0KDQojIyMj6Kqy5aCC57e057+SDQoNCg0KIyMjI+aWh+Wtl+mbsuWIhuaekOadnOixkOS6juWPiuaFiOWnkeingOmfs+WFqeiFs+iJsueahOipleWDuQ0KDQoNCiMjIyPmkJzlsIt3b3Jk5Lit5pyJ5p2c6LGQ5LqO5oiW5oWI5aeR6KeA6Z+z55qE5paH56ugDQoNCg0KDQo=
資料集:social_media_0305_artWordFreq.csv