資料筆數:
# 載入資料集
DS_metasData <- read.csv("metasData.csv",stringsAsFactors = FALSE)
DS_metasData2 <- read.csv("metasData2.csv",stringsAsFactors = FALSE)
DS_commentsData <- read.csv("commentsData.csv",stringsAsFactors = FALSE)
head(DS_commentsData)
## CmtTime
## 1 2021-06-11T07:14:06.698Z
## 2 2021-06-11T07:51:05.041Z
## 3 2021-06-11T07:04:13.912Z
## 4 2021-06-11T07:11:11.910Z
## 5 2021-06-11T03:35:54.038Z
## 6 2021-06-11T03:54:16.343Z
## Content
## 1 第2.是你自己的問題吧?訂外送本來就有一定機率跟其他單合在一起變疊單,也不是外送員能控制的,要先取哪個餐先送哪位客人也是系統決定的,你要訂外送就要有心理準備,不然就自己出去買不要叫外送,然後跟你說一個好消息,最近看社團說用UE訂麥當勞好像都不會是疊單,而且我自己跑的時候也一樣,麥當勞都單張單張給的,所以你訂到好吃薯條的機會應該比較高,可多買麥當勞喔
## 2 Ue 麥當勞無法疊單喔 建議用Ue叫\n\n然後禮拜四比較好 因為當天倍率高 \n\n我不會疊單 最愛送麥當勞
## 3 如果是連續2次,我覺得可能是妳的問題,啊如果是久久一次,累積到現在2次,那就可能是外送員的問題了,我猜可能是下面其中一種情況啦\n1.妳地址打錯或忘記改\n2.定位飄掉那裡剛好跟妳家地址像到靠北\n3.妳家有正門、側門、後門之類的外送員不知道就放在其中一個門口\n4.外送員沒有跟客人確認單號、姓名或餐點,妳的餐點被其他客人拿走了\n5.外送員幹走妳的餐\n1、3我都遇過,2機率不高,4、5就看就看外送員的專業程度和道德了\n\n啊客服爛不是一天兩天的事了,我去年預約客服處理帳號問題,當時他們打來跟我說好像3天會處理完,但是過了好幾天都沒消息,之後我再預約一次客服,結果他們說沒有打給我的紀錄,我整個傻眼
## 4 我覺得妳的問題比較大吧 住公寓還社區?\n還有什麼叫領多少錢做多少事\n說真的領那十幾塊錢我們要做什麼事\n十幾塊拿餐丟妳才是應該的吧
## 5 我的也是!!! 到底是怎樣..\n現在這種時間真的不敢用現金欸\U0001f630
## 6 而且現金付款就不能用safe10了......
## Doorplate Gender Host LikeCount PostId School
## 1 1 M 0 0 236227075 實踐大學
## 2 2 M 0 0 236227075 大同大學
## 3 1 M 0 0 236226557 實踐大學
## 4 2 M 0 0 236226557 中國科技大學
## 5 1 M 0 1 236225696 國立臺北科技大學
## 6 2 F 0 0 236225696 文藻外語大學
## artTitle
## 1 #閒聊 外送碰到的問題.0.
## 2 #閒聊 外送碰到的問題.0.
## 3 #閒聊 ubereat真的夠扯
## 4 #閒聊 ubereat真的夠扯
## 5 #問 熊貓線上扣款功能當機
## 6 #問 熊貓線上扣款功能當機
head(DS_metasData)
## Content
## 1 1.最近都會點外送 很頻繁那種\n我有個習慣就是會在外送員拿到餐時\n直接傳訊息告訴他 待會我會用多少錢結帳\n(想說這樣可以節省待會找錢時間 \n的確有些外送員會準備好錢 \n但部分看了訊息還是沒有準備的(好這小事\n—————————————————————\n2.還有一種是 拿了餐點會越騎越遠的\n這遇過大概四次餐點準備15分鐘\n接著外送員拿到餐點 買方因為也有定位\n就看到外送員開始在(可能跑其他單 \n然後最後送到我這 一定東西都變溫了\n最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B\n———————————————————————\n3.這是我最頭痛的 ??我已經抵達了??\n我幾乎每天都在講電話 手機基本都掛著語音\n在可以使用訊息的情況下 我都會告知外送員\n麻煩到了傳訊息給我就好 我會看 \n講真的10個有6個都無視掉訊息\n直接打過來跟我說 快到了= =\n然後我又不能不接起來 可接起來 我的語音就斷了.\n(這真的讓我很不悅\n更頭痛的來了 那6個裡面可能會有2個\n人都還沒到 用訊息告訴我 \n我已經抵達了 我已經抵達了 我已經抵達了\n然後打電話給我 (我想說靠北 是不是我沒聽到車聲\n是不是我讓他在樓下等很久了 \n馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘\n然後人才緩緩騎過來 跟我說 路不熟不知道 \n………..嗯嗯 你成功搞到我了 \n所以之後只要點外送我絕對都只會等人到了\n我才走下去 除非碰到那種會迷路的 \n當然正常的外送員也非常多 態度好速度又快的都有\n只不過老鼠屎比較容易印象深刻 以上
## 2 請問uber eat 餐點有問題反應客服後退款,餐點是誰吸收呢?\n小女點了餐點發現裡面有毛髮,想說還是通知一下請店家注意,想說沒什麼大礙,就在反映問題中留言,不需免單,僅提醒店家。\n結果馬上就收到客服來信退款通知,因此想問這筆餐費會是由誰來吸收呢,是uber eat 還是店家?
## 3 Ubereat真的扯到一個爆炸!已經兩次都是外送員按完成訂單,結果我從頭到尾都在門口等卻一個人影都沒看到\n\n回傳的圖片也只是一片白,這樣回傳圖片到底有什麼意義啊???\n\n打外送人員電話一直通話中通話中通話中\n\n而且反映客服過了超久都還沒回,點其他幫助也只會退款退款退款!甚至還要我付那30元的運費到底憑什麼啊???\n\n我等那麼久,要你們處理結果一直發生同樣的事情\n感覺一直被耍,只會退款到底是要客服幹什麼用?\n\n拜託領多少錢做多少事好嗎\U0001f643
## 4 如題 今天中午要訂外送\n結果發現線上扣款功能不能選\n有人也有這樣的狀況嗎?
## 5 剛剛查好像也有些人有這樣的情況\n你們後來是怎麼處理的呢\n有先嘗試回報客服了 但感覺會很慢收到回覆\U0001f605\n\n-\n第一次用卡片付款\n\n按下單之後顯示「錯誤」\n後來又再按一次說「支付失敗」\n但我又收到支付的簡訊\n\nhttps://i.imgur.com/W4O81il.jpg\n\n\n\n\n歷史訂單那裡也有\nhttps://i.imgur.com/dzikaW1.jpg\n\n\n但點進去沒看到訂單狀況\n於是我點了客服那裡選「進行中的訂單」\n那裡沒有顯示任何東西,所以才知道訂單根本沒成立還扣我的錢!\n\n第一次遇到這種事覺得好擔心\n還是我要先打打看我卡片的客服電話?\n之前用uber都沒這樣過,覺得好扯\U0001f605
## 6 有人有用過這個禮物卡嗎\n是會傳訊息給收件人還是會寫在袋子上或什麼意思啊\n剛剛用這個寄給男友可是他說什麼也沒有\n只有外送紙袋有我的名字(但不確定是因為這個還是店家標記的)\n不知道是怎麼運作的\U0001f914\nhttps://i.imgur.com/Rrzt9cm.jpg
## PostId Time Title
## 1 236227075 2021-06-11T06:35:48.373Z #閒聊 外送碰到的問題.0.
## 2 236226806 2021-06-11T06:01:23.346Z #閒聊 #問題 uber eat 退單誰吸收
## 3 236226557 2021-06-11T05:32:14.207Z #閒聊 ubereat真的夠扯
## 4 236225696 2021-06-11T03:29:03.427Z #問 熊貓線上扣款功能當機
## 5 236225546 2021-06-11T03:01:58.469Z #其他 #問題 foodpanda扣款訂單卻沒成立
## 6 236224989 2021-06-11T01:05:39.411Z #其他 Ubereats 禮物卡
# 每日發文的數量
DS_metasData %>%
mutate(artDate = as.Date(Time)) %>%
group_by(artDate) %>%
summarise(count = n())%>%
ggplot(aes(artDate,count))+
geom_line(color="red")+
geom_point()
# 每日發文的數量
DS_metasData2 %>%
mutate(artDate = as.Date(Time)) %>%
group_by(artDate) %>%
summarise(count = n())%>%
ggplot(aes(artDate,count))+
geom_line(color="red")+
geom_point()
# merge data
DS_alldata <- DS_commentsData %>%
left_join(DS_metasData, by="PostId")
DS_alldata %>%
mutate(artDate = as.Date(Time)) %>%
group_by(artDate) %>%
summarise(count = n())%>%
ggplot(aes(artDate,count))+
geom_line(color="red")+
geom_point()
# 查看資料
head(DS_alldata)
## CmtTime
## 1 2021-06-11T07:14:06.698Z
## 2 2021-06-11T07:51:05.041Z
## 3 2021-06-11T07:04:13.912Z
## 4 2021-06-11T07:11:11.910Z
## 5 2021-06-11T03:35:54.038Z
## 6 2021-06-11T03:54:16.343Z
## Content.x
## 1 第2.是你自己的問題吧?訂外送本來就有一定機率跟其他單合在一起變疊單,也不是外送員能控制的,要先取哪個餐先送哪位客人也是系統決定的,你要訂外送就要有心理準備,不然就自己出去買不要叫外送,然後跟你說一個好消息,最近看社團說用UE訂麥當勞好像都不會是疊單,而且我自己跑的時候也一樣,麥當勞都單張單張給的,所以你訂到好吃薯條的機會應該比較高,可多買麥當勞喔
## 2 Ue 麥當勞無法疊單喔 建議用Ue叫\n\n然後禮拜四比較好 因為當天倍率高 \n\n我不會疊單 最愛送麥當勞
## 3 如果是連續2次,我覺得可能是妳的問題,啊如果是久久一次,累積到現在2次,那就可能是外送員的問題了,我猜可能是下面其中一種情況啦\n1.妳地址打錯或忘記改\n2.定位飄掉那裡剛好跟妳家地址像到靠北\n3.妳家有正門、側門、後門之類的外送員不知道就放在其中一個門口\n4.外送員沒有跟客人確認單號、姓名或餐點,妳的餐點被其他客人拿走了\n5.外送員幹走妳的餐\n1、3我都遇過,2機率不高,4、5就看就看外送員的專業程度和道德了\n\n啊客服爛不是一天兩天的事了,我去年預約客服處理帳號問題,當時他們打來跟我說好像3天會處理完,但是過了好幾天都沒消息,之後我再預約一次客服,結果他們說沒有打給我的紀錄,我整個傻眼
## 4 我覺得妳的問題比較大吧 住公寓還社區?\n還有什麼叫領多少錢做多少事\n說真的領那十幾塊錢我們要做什麼事\n十幾塊拿餐丟妳才是應該的吧
## 5 我的也是!!! 到底是怎樣..\n現在這種時間真的不敢用現金欸\U0001f630
## 6 而且現金付款就不能用safe10了......
## Doorplate Gender Host LikeCount PostId School
## 1 1 M 0 0 236227075 實踐大學
## 2 2 M 0 0 236227075 大同大學
## 3 1 M 0 0 236226557 實踐大學
## 4 2 M 0 0 236226557 中國科技大學
## 5 1 M 0 1 236225696 國立臺北科技大學
## 6 2 F 0 0 236225696 文藻外語大學
## artTitle
## 1 #閒聊 外送碰到的問題.0.
## 2 #閒聊 外送碰到的問題.0.
## 3 #閒聊 ubereat真的夠扯
## 4 #閒聊 ubereat真的夠扯
## 5 #問 熊貓線上扣款功能當機
## 6 #問 熊貓線上扣款功能當機
## Content.y
## 1 1.最近都會點外送 很頻繁那種\n我有個習慣就是會在外送員拿到餐時\n直接傳訊息告訴他 待會我會用多少錢結帳\n(想說這樣可以節省待會找錢時間 \n的確有些外送員會準備好錢 \n但部分看了訊息還是沒有準備的(好這小事\n—————————————————————\n2.還有一種是 拿了餐點會越騎越遠的\n這遇過大概四次餐點準備15分鐘\n接著外送員拿到餐點 買方因為也有定位\n就看到外送員開始在(可能跑其他單 \n然後最後送到我這 一定東西都變溫了\n最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B\n———————————————————————\n3.這是我最頭痛的 ??我已經抵達了??\n我幾乎每天都在講電話 手機基本都掛著語音\n在可以使用訊息的情況下 我都會告知外送員\n麻煩到了傳訊息給我就好 我會看 \n講真的10個有6個都無視掉訊息\n直接打過來跟我說 快到了= =\n然後我又不能不接起來 可接起來 我的語音就斷了.\n(這真的讓我很不悅\n更頭痛的來了 那6個裡面可能會有2個\n人都還沒到 用訊息告訴我 \n我已經抵達了 我已經抵達了 我已經抵達了\n然後打電話給我 (我想說靠北 是不是我沒聽到車聲\n是不是我讓他在樓下等很久了 \n馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘\n然後人才緩緩騎過來 跟我說 路不熟不知道 \n………..嗯嗯 你成功搞到我了 \n所以之後只要點外送我絕對都只會等人到了\n我才走下去 除非碰到那種會迷路的 \n當然正常的外送員也非常多 態度好速度又快的都有\n只不過老鼠屎比較容易印象深刻 以上
## 2 1.最近都會點外送 很頻繁那種\n我有個習慣就是會在外送員拿到餐時\n直接傳訊息告訴他 待會我會用多少錢結帳\n(想說這樣可以節省待會找錢時間 \n的確有些外送員會準備好錢 \n但部分看了訊息還是沒有準備的(好這小事\n—————————————————————\n2.還有一種是 拿了餐點會越騎越遠的\n這遇過大概四次餐點準備15分鐘\n接著外送員拿到餐點 買方因為也有定位\n就看到外送員開始在(可能跑其他單 \n然後最後送到我這 一定東西都變溫了\n最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B\n———————————————————————\n3.這是我最頭痛的 ??我已經抵達了??\n我幾乎每天都在講電話 手機基本都掛著語音\n在可以使用訊息的情況下 我都會告知外送員\n麻煩到了傳訊息給我就好 我會看 \n講真的10個有6個都無視掉訊息\n直接打過來跟我說 快到了= =\n然後我又不能不接起來 可接起來 我的語音就斷了.\n(這真的讓我很不悅\n更頭痛的來了 那6個裡面可能會有2個\n人都還沒到 用訊息告訴我 \n我已經抵達了 我已經抵達了 我已經抵達了\n然後打電話給我 (我想說靠北 是不是我沒聽到車聲\n是不是我讓他在樓下等很久了 \n馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘\n然後人才緩緩騎過來 跟我說 路不熟不知道 \n………..嗯嗯 你成功搞到我了 \n所以之後只要點外送我絕對都只會等人到了\n我才走下去 除非碰到那種會迷路的 \n當然正常的外送員也非常多 態度好速度又快的都有\n只不過老鼠屎比較容易印象深刻 以上
## 3 Ubereat真的扯到一個爆炸!已經兩次都是外送員按完成訂單,結果我從頭到尾都在門口等卻一個人影都沒看到\n\n回傳的圖片也只是一片白,這樣回傳圖片到底有什麼意義啊???\n\n打外送人員電話一直通話中通話中通話中\n\n而且反映客服過了超久都還沒回,點其他幫助也只會退款退款退款!甚至還要我付那30元的運費到底憑什麼啊???\n\n我等那麼久,要你們處理結果一直發生同樣的事情\n感覺一直被耍,只會退款到底是要客服幹什麼用?\n\n拜託領多少錢做多少事好嗎\U0001f643
## 4 Ubereat真的扯到一個爆炸!已經兩次都是外送員按完成訂單,結果我從頭到尾都在門口等卻一個人影都沒看到\n\n回傳的圖片也只是一片白,這樣回傳圖片到底有什麼意義啊???\n\n打外送人員電話一直通話中通話中通話中\n\n而且反映客服過了超久都還沒回,點其他幫助也只會退款退款退款!甚至還要我付那30元的運費到底憑什麼啊???\n\n我等那麼久,要你們處理結果一直發生同樣的事情\n感覺一直被耍,只會退款到底是要客服幹什麼用?\n\n拜託領多少錢做多少事好嗎\U0001f643
## 5 如題 今天中午要訂外送\n結果發現線上扣款功能不能選\n有人也有這樣的狀況嗎?
## 6 如題 今天中午要訂外送\n結果發現線上扣款功能不能選\n有人也有這樣的狀況嗎?
## Time Title
## 1 2021-06-11T06:35:48.373Z #閒聊 外送碰到的問題.0.
## 2 2021-06-11T06:35:48.373Z #閒聊 外送碰到的問題.0.
## 3 2021-06-11T05:32:14.207Z #閒聊 ubereat真的夠扯
## 4 2021-06-11T05:32:14.207Z #閒聊 ubereat真的夠扯
## 5 2021-06-11T03:29:03.427Z #問 熊貓線上扣款功能當機
## 6 2021-06-11T03:29:03.427Z #問 熊貓線上扣款功能當機
資料的清理
DS_metasData_sample <- DS_metasData %>%
mutate(Content=gsub("[\n]{2,}", "。", Content)) %>%
mutate(Content=gsub("\n", "", Content)) %>%
mutate(Content=gsub("http(s)?[-:\\/A-Za-z0-9\\.]+", " ", Content))
head(DS_metasData_sample$Content)
## [1] "1.最近都會點外送 很頻繁那種我有個習慣就是會在外送員拿到餐時直接傳訊息告訴他 待會我會用多少錢結帳(想說這樣可以節省待會找錢時間 的確有些外送員會準備好錢 但部分看了訊息還是沒有準備的(好這小事—————————————————————2.還有一種是 拿了餐點會越騎越遠的這遇過大概四次餐點準備15分鐘接著外送員拿到餐點 買方因為也有定位就看到外送員開始在(可能跑其他單 然後最後送到我這 一定東西都變溫了最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B———————————————————————3.這是我最頭痛的 ??我已經抵達了??我幾乎每天都在講電話 手機基本都掛著語音在可以使用訊息的情況下 我都會告知外送員麻煩到了傳訊息給我就好 我會看 講真的10個有6個都無視掉訊息直接打過來跟我說 快到了= =然後我又不能不接起來 可接起來 我的語音就斷了.(這真的讓我很不悅更頭痛的來了 那6個裡面可能會有2個人都還沒到 用訊息告訴我 我已經抵達了 我已經抵達了 我已經抵達了然後打電話給我 (我想說靠北 是不是我沒聽到車聲是不是我讓他在樓下等很久了 馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘然後人才緩緩騎過來 跟我說 路不熟不知道 ………..嗯嗯 你成功搞到我了 所以之後只要點外送我絕對都只會等人到了我才走下去 除非碰到那種會迷路的 當然正常的外送員也非常多 態度好速度又快的都有只不過老鼠屎比較容易印象深刻 以上"
## [2] "請問uber eat 餐點有問題反應客服後退款,餐點是誰吸收呢?小女點了餐點發現裡面有毛髮,想說還是通知一下請店家注意,想說沒什麼大礙,就在反映問題中留言,不需免單,僅提醒店家。結果馬上就收到客服來信退款通知,因此想問這筆餐費會是由誰來吸收呢,是uber eat 還是店家?"
## [3] "Ubereat真的扯到一個爆炸!已經兩次都是外送員按完成訂單,結果我從頭到尾都在門口等卻一個人影都沒看到。回傳的圖片也只是一片白,這樣回傳圖片到底有什麼意義啊???。打外送人員電話一直通話中通話中通話中。而且反映客服過了超久都還沒回,點其他幫助也只會退款退款退款!甚至還要我付那30元的運費到底憑什麼啊???。我等那麼久,要你們處理結果一直發生同樣的事情感覺一直被耍,只會退款到底是要客服幹什麼用?。拜託領多少錢做多少事好嗎\U0001f643"
## [4] "如題 今天中午要訂外送結果發現線上扣款功能不能選有人也有這樣的狀況嗎?"
## [5] "剛剛查好像也有些人有這樣的情況你們後來是怎麼處理的呢有先嘗試回報客服了 但感覺會很慢收到回覆\U0001f605。-第一次用卡片付款。按下單之後顯示「錯誤」後來又再按一次說「支付失敗」但我又收到支付的簡訊。 。歷史訂單那裡也有 。但點進去沒看到訂單狀況於是我點了客服那裡選「進行中的訂單」那裡沒有顯示任何東西,所以才知道訂單根本沒成立還扣我的錢!。第一次遇到這種事覺得好擔心還是我要先打打看我卡片的客服電話?之前用uber都沒這樣過,覺得好扯\U0001f605"
## [6] "有人有用過這個禮物卡嗎是會傳訊息給收件人還是會寫在袋子上或什麼意思啊剛剛用這個寄給男友可是他說什麼也沒有只有外送紙袋有我的名字(但不確定是因為這個還是店家標記的)不知道是怎麼運作的\U0001f914 "
斷詞
# 以標點符號進行斷句
# 以全形或半形 驚歎號、問號、分號 以及 全形句號 爲依據進行斷句
sample_sentences <- strsplit(DS_metasData_sample$Content,"[。!;?!?;]{1,}")
# 回傳結果為list of vectors,每個vector的內容為每篇文章的斷句結果
sample_sentences[1:3]
## [[1]]
## [1] "1.最近都會點外送 很頻繁那種我有個習慣就是會在外送員拿到餐時直接傳訊息告訴他 待會我會用多少錢結帳(想說這樣可以節省待會找錢時間 的確有些外送員會準備好錢 但部分看了訊息還是沒有準備的(好這小事—————————————————————2.還有一種是 拿了餐點會越騎越遠的這遇過大概四次餐點準備15分鐘接著外送員拿到餐點 買方因為也有定位就看到外送員開始在(可能跑其他單 然後最後送到我這 一定東西都變溫了最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B———————————————————————3.這是我最頭痛的 "
## [2] "我已經抵達了"
## [3] "我幾乎每天都在講電話 手機基本都掛著語音在可以使用訊息的情況下 我都會告知外送員麻煩到了傳訊息給我就好 我會看 講真的10個有6個都無視掉訊息直接打過來跟我說 快到了= =然後我又不能不接起來 可接起來 我的語音就斷了.(這真的讓我很不悅更頭痛的來了 那6個裡面可能會有2個人都還沒到 用訊息告訴我 我已經抵達了 我已經抵達了 我已經抵達了然後打電話給我 (我想說靠北 是不是我沒聽到車聲是不是我讓他在樓下等很久了 馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘然後人才緩緩騎過來 跟我說 路不熟不知道 ………..嗯嗯 你成功搞到我了 所以之後只要點外送我絕對都只會等人到了我才走下去 除非碰到那種會迷路的 當然正常的外送員也非常多 態度好速度又快的都有只不過老鼠屎比較容易印象深刻 以上"
##
## [[2]]
## [1] "請問uber eat 餐點有問題反應客服後退款,餐點是誰吸收呢"
## [2] "小女點了餐點發現裡面有毛髮,想說還是通知一下請店家注意,想說沒什麼大礙,就在反映問題中留言,不需免單,僅提醒店家"
## [3] "結果馬上就收到客服來信退款通知,因此想問這筆餐費會是由誰來吸收呢,是uber eat 還是店家"
##
## [[3]]
## [1] "Ubereat真的扯到一個爆炸"
## [2] "已經兩次都是外送員按完成訂單,結果我從頭到尾都在門口等卻一個人影都沒看到"
## [3] "回傳的圖片也只是一片白,這樣回傳圖片到底有什麼意義啊"
## [4] "打外送人員電話一直通話中通話中通話中"
## [5] "而且反映客服過了超久都還沒回,點其他幫助也只會退款退款退款"
## [6] "甚至還要我付那30元的運費到底憑什麼啊"
## [7] "我等那麼久,要你們處理結果一直發生同樣的事情感覺一直被耍,只會退款到底是要客服幹什麼用"
## [8] "拜託領多少錢做多少事好嗎\U0001f643"
但在unlist後我們就沒辦法判別每個句子是出自於哪篇文章了, 因此需要一個方法在unlist的同時仍能夠保留句子是屬於哪篇文章
# unlist會將list中所有的vector展開成一個一維的vector
sentences <- unlist(sample_sentences)
sentences[1:5]
## [1] "1.最近都會點外送 很頻繁那種我有個習慣就是會在外送員拿到餐時直接傳訊息告訴他 待會我會用多少錢結帳(想說這樣可以節省待會找錢時間 的確有些外送員會準備好錢 但部分看了訊息還是沒有準備的(好這小事—————————————————————2.還有一種是 拿了餐點會越騎越遠的這遇過大概四次餐點準備15分鐘接著外送員拿到餐點 買方因為也有定位就看到外送員開始在(可能跑其他單 然後最後送到我這 一定東西都變溫了最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B———————————————————————3.這是我最頭痛的 "
## [2] "我已經抵達了"
## [3] "我幾乎每天都在講電話 手機基本都掛著語音在可以使用訊息的情況下 我都會告知外送員麻煩到了傳訊息給我就好 我會看 講真的10個有6個都無視掉訊息直接打過來跟我說 快到了= =然後我又不能不接起來 可接起來 我的語音就斷了.(這真的讓我很不悅更頭痛的來了 那6個裡面可能會有2個人都還沒到 用訊息告訴我 我已經抵達了 我已經抵達了 我已經抵達了然後打電話給我 (我想說靠北 是不是我沒聽到車聲是不是我讓他在樓下等很久了 馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘然後人才緩緩騎過來 跟我說 路不熟不知道 ………..嗯嗯 你成功搞到我了 所以之後只要點外送我絕對都只會等人到了我才走下去 除非碰到那種會迷路的 當然正常的外送員也非常多 態度好速度又快的都有只不過老鼠屎比較容易印象深刻 以上"
## [4] "請問uber eat 餐點有問題反應客服後退款,餐點是誰吸收呢"
## [5] "小女點了餐點發現裡面有毛髮,想說還是通知一下請店家注意,想說沒什麼大礙,就在反映問題中留言,不需免單,僅提醒店家"
# 合併postID和斷句後對應的句子
# 原本資料的PostId
head(DS_metasData_sample$PostId)
## [1] 236227075 236226806 236226557 236225696 236225546 236224989
sapply(sample_sentences, length)
## [1] 3 3 8 1 8 1 1 2 7 2 1 1 5 1 4 2 2 1 3 5 2 1 2 1 1
## [26] 2 1 2 1 1 1 18 3 2 3 3 1 2 1 3 27 1 1 3 1 1 1 3 1 5
## [51] 6 3 1 1 1 1 3 4 1 2 1 4 2 7 1 3 4 2 2 4 11 3 1 6 3
## [76] 1 1 5 19 2 2 5 1 2 3 2 5 6 3 2 2 1 1 1 5 2 2 4 4 3
## [101] 7 3 3 2 1 1 1 4 3 5 1 1 2 1 4 2 5 6 7 4 11 5 9 1 1
## [126] 4 1 6 11 3 1 1 1 1 1 1 3 5 4 11 46 2 1 3 10 2 3 1 4 2
## [151] 1 9 1 4 4 2 1 1 6 1 7 21 1 6 1 5 4 7 5 6 2 7 1 1 7
## [176] 1 19 1 1 4 7 4 3 3 2 1 1 1 1 1 5 1 1 2 26
# ex.
# rep(c("Social", "Media"), c(2,5))
# "Social" "Social" "Media" "Media" "Media" "Media" "Media"
# 使用rep去配對原本資料的PostId以及sapply的回傳(每篇文章包含了幾個句)
# 產生的長度會與 unlist(sample_sentences) 的長度一樣,
# 兩邊join起來就可以新增一個欄位代表每個句子來自哪篇文章
# rep(sample_data$PostId, sapply(sample_sentences, length))
對全部的文章進行斷句,並儲存結果
# 將每句句子,與他所屬的文章連結配對起來,整理成一個dataframe
delivery_sentences <- data.frame(PostId=rep(DS_metasData_sample$PostId, sapply(sample_sentences, length)),
sentence = unlist(sample_sentences))
delivery_sentences$sentence <- as.character(delivery_sentences$sentence)
head(delivery_sentences)
## PostId
## 1 236227075
## 2 236227075
## 3 236227075
## 4 236226806
## 5 236226806
## 6 236226806
## sentence
## 1 1.最近都會點外送 很頻繁那種我有個習慣就是會在外送員拿到餐時直接傳訊息告訴他 待會我會用多少錢結帳(想說這樣可以節省待會找錢時間 的確有些外送員會準備好錢 但部分看了訊息還是沒有準備的(好這小事—————————————————————2.還有一種是 拿了餐點會越騎越遠的這遇過大概四次餐點準備15分鐘接著外送員拿到餐點 買方因為也有定位就看到外送員開始在(可能跑其他單 然後最後送到我這 一定東西都變溫了最明顯的是麥當勞薯條\U0001f35f每次都不會是熱的(\U0001f402B———————————————————————3.這是我最頭痛的
## 2 我已經抵達了
## 3 我幾乎每天都在講電話 手機基本都掛著語音在可以使用訊息的情況下 我都會告知外送員麻煩到了傳訊息給我就好 我會看 講真的10個有6個都無視掉訊息直接打過來跟我說 快到了= =然後我又不能不接起來 可接起來 我的語音就斷了.(這真的讓我很不悅更頭痛的來了 那6個裡面可能會有2個人都還沒到 用訊息告訴我 我已經抵達了 我已經抵達了 我已經抵達了然後打電話給我 (我想說靠北 是不是我沒聽到車聲是不是我讓他在樓下等很久了 馬上跑去樓下然後等了大概五分鐘 甚至還有十五分鐘然後人才緩緩騎過來 跟我說 路不熟不知道 ………..嗯嗯 你成功搞到我了 所以之後只要點外送我絕對都只會等人到了我才走下去 除非碰到那種會迷路的 當然正常的外送員也非常多 態度好速度又快的都有只不過老鼠屎比較容易印象深刻 以上
## 4 請問uber eat 餐點有問題反應客服後退款,餐點是誰吸收呢
## 5 小女點了餐點發現裡面有毛髮,想說還是通知一下請店家注意,想說沒什麼大礙,就在反映問題中留言,不需免單,僅提醒店家
## 6 結果馬上就收到客服來信退款通知,因此想問這筆餐費會是由誰來吸收呢,是uber eat 還是店家
使用默認參數初始化一個斷詞引擎
jieba_tokenizer = worker()
news_tokenizer <- function(t) {
lapply(t, function(x) {
if(nchar(x)>1){
tokens <- segment(x, jieba_tokenizer)
# 去掉字串長度爲1的詞彙
tokens <- tokens[nchar(tokens)>1]
return(tokens)
}
})
}
計算每篇文章各token出現次數
tokens <- delivery_sentences %>%
unnest_tokens(word, sentence, token=news_tokenizer) %>%
filter((!str_detect(word, regex("[0-9a-zA-Z]"))) | str_detect(word, regex("[Aa][Zz]"))) %>%
count(PostId, word) %>%
rename(count=n)
tokens %>% head(20)
## PostId word count
## 1 235886814 一份 2
## 2 235886814 一次 1
## 3 235886814 七折 1
## 4 235886814 上線 1
## 5 235886814 上限 1
## 6 235886814 不可 1
## 7 235886814 不限 1
## 8 235886814 並非 1
## 9 235886814 五夠 2
## 10 235886814 享受 1
## 11 235886814 人氣 1
## 12 235886814 付款 1
## 13 235886814 以上 1
## 14 235886814 佳里 1
## 15 235886814 使用 4
## 16 235886814 來看 1
## 17 235886814 優惠 18
## 18 235886814 元免 1
## 19 235886814 元外 1
## 20 235886814 免費 1
將資料轉換為Document Term Matrix (DTM)
dtm <-tokens %>%
cast_dtm(PostId, word, count)
inspect(dtm[1:10,1:10])
## <<DocumentTermMatrix (documents: 10, terms: 10)>>
## Non-/sparse entries: 12/88
## Sparsity : 88%
## Maximal term length: 2
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs 一份 一次 七折 上線 上限 不可 不限 並非 五夠 享受
## 235886814 2 1 1 1 1 1 1 1 2 1
## 235956573 0 1 0 0 0 0 0 0 0 0
## 235963930 0 0 0 0 0 0 0 0 0 0
## 235964121 0 0 0 0 0 0 0 0 0 0
## 235981472 0 0 0 0 0 0 0 0 0 0
## 235987762 0 0 0 0 0 0 0 0 0 0
## 235997094 0 0 0 0 0 0 0 0 1 0
## 235998258 0 0 0 0 0 0 0 0 0 0
## 235998780 0 0 0 0 0 0 0 0 0 0
## 235998941 0 0 0 0 0 0 0 0 0 0
利用LDA模型建立phi矩陣
使用tidy()將tokens在每個主題出現的頻率提取出來
# 調整alpha即delta
lda <- LDA(dtm, k = 2, control = list(seed = 2021,alpha = 2,delta=0.1),method = "Gibbs")
# 注意,在tidy()裡面要使用"beta"來取出Phi矩陣。
topics_words <- tidy(lda, matrix = "beta")
colnames(topics_words) <- c("topic", "term", "phi")
topics_words
## # A tibble: 5,408 x 3
## topic term phi
## <int> <chr> <dbl>
## 1 1 一份 0.0000173
## 2 2 一份 0.00166
## 3 1 一次 0.00262
## 4 2 一次 0.0000234
## 5 1 七折 0.0000173
## 6 2 七折 0.000257
## 7 1 上線 0.0000173
## 8 2 上線 0.00119
## 9 1 上限 0.0000173
## 10 2 上限 0.000257
## # … with 5,398 more rows
terms依照各主題的phi值由大到小排序,列出前10大
topics_words %>%
group_by(topic) %>%
top_n(10, phi) %>%
ungroup() %>%
mutate(top_words = reorder_within(term,phi,topic)) %>%
ggplot(aes(x = top_words, y = phi, fill = as.factor(topic))) +
geom_col(show.legend = FALSE) +
facet_wrap(~ topic, scales = "free") +
coord_flip() +
scale_x_reordered()+
theme(text = element_text(family = "Heiti TC Light"))
建立更多主題的主題模型 嘗試2、4、6、8個主題數,將結果存起來,再做進一步分析。 此部分需要跑一段時間,已經將跑完的檔案存成ldas_result.rdata,可以直接載入
ldas = c()
topics = c(2,4,6,8)
for(topic in topics){
start_time <- Sys.time()
lda <- LDA(dtm, k = topic, control = list(seed = 2021))
ldas =c(ldas,lda)
print(paste(topic ,paste("topic(s) and use time is ", Sys.time() -start_time)))
save(ldas,file = "ldas_result.rdata") # 將模型輸出成檔案
}
## [1] "2 topic(s) and use time is 0.209158897399902"
## [1] "4 topic(s) and use time is 0.538647890090942"
## [1] "6 topic(s) and use time is 0.802064895629883"
## [1] "8 topic(s) and use time is 1.15943384170532"
ldas
## [[1]]
## A LDA_VEM topic model with 2 topics.
##
## [[2]]
## A LDA_VEM topic model with 4 topics.
##
## [[3]]
## A LDA_VEM topic model with 6 topics.
##
## [[4]]
## A LDA_VEM topic model with 8 topics.
topics = c(2,4,6,8)
data_frame(k = topics, perplex = map_dbl(ldas, topicmodels::perplexity)) %>%
ggplot(aes(k, perplex)) +
geom_point() +
geom_line() +
labs(title = "Evaluating LDA topic models",
subtitle = "Optimal number of topics (smaller is better)",
x = "Number of topics",
y = "Perplexity")
## Warning: `data_frame()` was deprecated in tibble 1.1.0.
## Please use `tibble()` instead.
補充 ldatuning
# 調整alpha即delta
lda <- LDA(dtm, k = 4, control = list(seed = 2021,alpha = 2,delta=0.1),method = "Gibbs")
# 注意,在tidy()裡面要使用"beta"來取出Phi矩陣。
topics_words <- tidy(lda, matrix = "beta")
colnames(topics_words) <- c("topic", "term", "phi")
topics_words
## # A tibble: 10,816 x 3
## topic term phi
## <int> <chr> <dbl>
## 1 1 一份 0.00242
## 2 2 一份 0.0000373
## 3 3 一份 0.000935
## 4 4 一份 0.0000281
## 5 1 一次 0.00384
## 6 2 一次 0.000784
## 7 3 一次 0.00138
## 8 4 一次 0.000591
## 9 1 七折 0.000521
## 10 2 七折 0.0000373
## # … with 10,806 more rows
terms依照各主題的phi值由大到小排序,列出前10大
topics_words %>%
group_by(topic) %>%
top_n(10, phi) %>%
ungroup() %>%
mutate(top_words = reorder_within(term,phi,topic)) %>%
ggplot(aes(x = top_words, y = phi, fill = as.factor(topic))) +
geom_col(show.legend = FALSE) +
facet_wrap(~ topic, scales = "free") +
coord_flip() +
scale_x_reordered()+
theme(text = element_text(family = "Heiti TC Light"))