動機與目的

行動支付是近幾年政府力推、業者力捧的金融消費支付方式,各家金融業者、公司無不卯盡全力發展相關服務,經過近幾年各家的肉搏廝殺,目前媒體報導前幾大的行動支付方式為:街口支付、LINE PAY、台灣支付、Pi拍錢包。我們使用ptt行動支付版資料,來觀察在鄉民的眼中,行動支付版與媒體報導的狀況是否一致?另外,用大數據分析完後,我們發現街口支付的討論度最高,所以,我們再針對街口支付的部分做進一步的分析,看看這個行動支付之王,是如何吸引鄉民討論與關注的。 # 系統設置 ### 安裝需要的packages

Sys.setlocale(category = "LC_ALL", locale = "zh_TW.UTF-8") # 避免中文亂碼
## [1] ""
packages = c("readr", "dplyr", "jiebaR", "tidyr", "tidytext", "igraph", "topicmodels", "ggplot2", "stringr","knitr")
existing = as.character(installed.packages()[,1])
for(pkg in packages[!(packages %in% existing)]) install.packages(pkg)

載入packages

library(readr)
library(dplyr)
library(jiebaR)
library(tidyr)
library(tidytext)
library(igraph)
library(topicmodels)
library(stringr)
library(ggplot2)
library(knitr)

讀取資料

資料描述

  • 透過中山管院文字分析平台
    A caption

    A caption

載入PTT資料

# 文章資料
posts <- read_csv("./Project6_articleMetaData.csv")
posts
## # A tibble: 4,047 x 10
##    artTitle artDate    artTime  artUrl artPoster artCat commentNum  push   boo
##    <chr>    <date>     <time>   <chr>  <chr>     <chr>       <dbl> <dbl> <dbl>
##  1 Fw:[新板成~ 2017-04-29 02:14:13 https~ tmlc      Mobil~          3     2     0
##  2 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~         12    11     0
##  3 [閒聊]主力的~ 2017-04-29 15:00:27 https~ andychen~ Mobil~         50    28     0
##  4 [新聞]三大行~ 2017-04-29 16:03:20 https~ Masini14~ Mobil~          7     1     0
##  5 [討論]建議行~ 2017-04-29 23:03:28 https~ lance7462 Mobil~         11     7     0
##  6 [閒聊]現在最~ 2017-04-29 23:50:43 https~ z5419     Mobil~         30    26     0
##  7 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~          7     3     0
##  8 Re:[街口]~ 2017-04-30 03:41:48 https~ isaacc    Mobil~         19    12     0
##  9 [討論]行動支~ 2017-04-30 06:42:39 https~ iamhemry  Mobil~         12     6     0
## 10 [整理]停車優~ 2017-04-30 07:58:23 https~ Roderick  Mobil~         10     8     0
## # ... with 4,037 more rows, and 1 more variable: sentence <chr>
# 回覆資料
reviews <- read_csv("./Project6_articleReviews.csv")
reviews
## # A tibble: 164,346 x 10
##    artTitle artDate    artTime  artUrl artPoster artCat cmtPoster cmtStatus
##    <chr>    <date>     <time>   <chr>  <chr>     <chr>  <chr>     <chr>    
##  1 Fw:[新板成~ 2017-04-29 02:14:13 https~ tmlc      Mobil~ tafafa    推       
##  2 Fw:[新板成~ 2017-04-29 02:14:13 https~ tmlc      Mobil~ sam31376  推       
##  3 Fw:[新板成~ 2017-04-29 02:14:13 https~ tmlc      Mobil~ sam31376  →        
##  4 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ Go2       推       
##  5 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ jefflin5~ 推       
##  6 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ ThisIsNo~ 推       
##  7 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ csjan     推       
##  8 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ jin062900 推       
##  9 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ now99     推       
## 10 [情報]三大行~ 2017-04-29 06:17:24 https~ snowwolf~ Mobil~ tmlc      推       
## # ... with 164,336 more rows, and 2 more variables: cmtDate <dttm>,
## #   cmtContent <chr>
# 選取需要的欄位
reviews <- reviews %>%
      select(artUrl, cmtPoster, cmtStatus, cmtContent)
reviews
## # A tibble: 164,346 x 4
##    artUrl                       cmtPoster  cmtStatus cmtContent                 
##    <chr>                        <chr>      <chr>     <chr>                      
##  1 https://www.ptt.cc/bbs/Mobi~ tafafa     推        :ZGZa                      
##  2 https://www.ptt.cc/bbs/Mobi~ sam31376   推        :看看有沒有更新到最新版本我昨天也是一直失敗更新後就~
##  3 https://www.ptt.cc/bbs/Mobi~ sam31376   →         :好了                      
##  4 https://www.ptt.cc/bbs/Mobi~ Go2        推        :PUSH                      
##  5 https://www.ptt.cc/bbs/Mobi~ jefflin555 推        :期待MST                   
##  6 https://www.ptt.cc/bbs/Mobi~ ThisIsNot~ 推        :沒有三星,只能期待安卓佩惹
##  7 https://www.ptt.cc/bbs/Mobi~ csjan      推        :三星pay應該不會只限制三星手機吧?~
##  8 https://www.ptt.cc/bbs/Mobi~ jin062900  推        :樓上限定三星手機喔而且不是每一台都可以用~
##  9 https://www.ptt.cc/bbs/Mobi~ now99      推        :SamsungPay關網路因該也可以交易~
## 10 https://www.ptt.cc/bbs/Mobi~ tmlc       推        :新聞可以繼續使用情報分類  
## # ... with 164,336 more rows

資料預覽

posts %>% 
  group_by(artDate) %>%
  summarise(count = n())%>%
  ggplot(aes(artDate,count))+
    geom_line(color="blue", size=1)+
    theme_classic()
## `summarise()` ungrouping output (override with `.groups` argument)

發文者數量

length(unique(posts$artPoster))
## [1] 2001

回覆者數量

length(unique(reviews$cmtPoster))
## [1] 12752

總共有參與的人數

allPoster <- c(posts$artPoster, reviews$cmtPoster)
length(unique(allPoster))
## [1] 13221

整理所有參與人

# 整理所有出現過得使用者
# 如果它曾發過文的話就標註他爲poster
# 如果沒有發過文的話則標註他爲replyer
userList <- data.frame(user=unique(allPoster)) %>%
              mutate(type=ifelse(user%in%posts$artPoster, "poster", "replyer"))
head(userList)
##           user   type
## 1         tmlc poster
## 2  snowwolf725 poster
## 3 andychen0603 poster
## 4   Masini1491 poster
## 5    lance7462 poster
## 6        z5419 poster

建立社群網路圖

將原文與回覆Join起來

# 把原文與回覆依據artUrl innerJoin起來
posts_Reviews <- merge(x = posts, y = reviews, by = "artUrl")
head(posts_Reviews)
##                                                     artUrl
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
##                       artTitle    artDate  artTime   artPoster    artCat
## 1       Fw:[新板成立]MobilePay 2017-04-29 02:14:13        tmlc MobilePay
## 2       Fw:[新板成立]MobilePay 2017-04-29 02:14:13        tmlc MobilePay
## 3       Fw:[新板成立]MobilePay 2017-04-29 02:14:13        tmlc MobilePay
## 4 [情報]三大行動支付本季掀戰火 2017-04-29 06:17:24 snowwolf725 MobilePay
## 5 [情報]三大行動支付本季掀戰火 2017-04-29 06:17:24 snowwolf725 MobilePay
## 6 [情報]三大行動支付本季掀戰火 2017-04-29 06:17:24 snowwolf725 MobilePay
##   commentNum push boo
## 1          3    2   0
## 2          3    2   0
## 3          3    2   0
## 4         12   11   0
## 5         12   11   0
## 6         12   11   0
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           sentence
## 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017\n\nGeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板\n\n新任板主為 tmlc\n\n恭喜*^_^*
## 2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017\n\nGeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板\n\n新任板主為 tmlc\n\n恭喜*^_^*
## 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017\n\nGeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板\n\n新任板主為 tmlc\n\n恭喜*^_^*
## 4 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃。\n\n據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行;\nAndroid Pay合作銀行則多了一銀公股行庫為盟友。\n\n消息來源說,由於Samsung手機屬於Android系統,\n因此Samsung Pay與Android Pay兩大系統的使用客群勢將重疊,\n為搶攻市占,兩大行動支付系統在上線前,分別在技術上與合約條款採取策略,\n想方設法拉攏銀行與消費者。\n\n根據Android Pay出爐的合約條款,規定合作銀行在上線前與上線後的四、五天內,\n不得與其他國際支付合作,該條款被市場視為是衝著Samsung Pay而來。\n舉例來說,如果某銀行選擇在5月先推Samsung Pay,\n可能就無法在Android Pay 6月上線第一時間搶到頭香。\n\n此一條款限制,讓許多銀行陷入到底要選Samsung Pay或Android Pay的兩難抉擇,\n但據了解,目前多數銀行考量Samsung品牌具備軟硬體整合的優勢,\n因此較傾向先上Samsung Pay。\n\n另外,為擴大適用通路,Samsung Pay除了可在感應式刷卡機使用外,\n就連傳統的磁條式刷卡機也能使用,藉由擴大適用範圍與便利性,提高使用率。\n\n消息人士說,有鑑於Apple Pay在台上線首日出現當機或刷卡不順的狀況,\nSamsung Pay為搶得先機,決定在5月初先以公開測試的方式,\n測試當大量用戶湧上線時,可能出現哪些狀況,儘早修正排除各種狀況,\n縮短使用陣痛期。\n\n在行銷費預算部分,比起Apple Pay要求銀行必須編列將近新台幣上億元的行銷預算,\nSamsung Pay與Android Pay要求銀行的行銷預算只要100萬~150萬美元。\n\n銀行主管說,金融界的支付競爭將從實體信用卡走向行動支付,邁入白熱化。\n\n心得:\n恭喜開版, 話說文章分類能否新增個 新聞 選項,\n最近行動支付這麼紅應該會有不少新聞,\nAndroid Pay 看來要等到 6 月了, 不過比之前說的下半年快了不少,\n另外 Android Pay 雖然還沒開放,\n(不過之前有人反映玉山的某些卡片已經可以綁卡了)\n但是已經可以將常用商家會員卡號輸入進去當會員卡使用了\nhttp://i.imgur.com/Zs3QjB4.png\nhttp://i.imgur.com/YBcvf4s.png\nhttp://i.imgur.com/YfK1FRq.png
## 5 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃。\n\n據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行;\nAndroid Pay合作銀行則多了一銀公股行庫為盟友。\n\n消息來源說,由於Samsung手機屬於Android系統,\n因此Samsung Pay與Android Pay兩大系統的使用客群勢將重疊,\n為搶攻市占,兩大行動支付系統在上線前,分別在技術上與合約條款採取策略,\n想方設法拉攏銀行與消費者。\n\n根據Android Pay出爐的合約條款,規定合作銀行在上線前與上線後的四、五天內,\n不得與其他國際支付合作,該條款被市場視為是衝著Samsung Pay而來。\n舉例來說,如果某銀行選擇在5月先推Samsung Pay,\n可能就無法在Android Pay 6月上線第一時間搶到頭香。\n\n此一條款限制,讓許多銀行陷入到底要選Samsung Pay或Android Pay的兩難抉擇,\n但據了解,目前多數銀行考量Samsung品牌具備軟硬體整合的優勢,\n因此較傾向先上Samsung Pay。\n\n另外,為擴大適用通路,Samsung Pay除了可在感應式刷卡機使用外,\n就連傳統的磁條式刷卡機也能使用,藉由擴大適用範圍與便利性,提高使用率。\n\n消息人士說,有鑑於Apple Pay在台上線首日出現當機或刷卡不順的狀況,\nSamsung Pay為搶得先機,決定在5月初先以公開測試的方式,\n測試當大量用戶湧上線時,可能出現哪些狀況,儘早修正排除各種狀況,\n縮短使用陣痛期。\n\n在行銷費預算部分,比起Apple Pay要求銀行必須編列將近新台幣上億元的行銷預算,\nSamsung Pay與Android Pay要求銀行的行銷預算只要100萬~150萬美元。\n\n銀行主管說,金融界的支付競爭將從實體信用卡走向行動支付,邁入白熱化。\n\n心得:\n恭喜開版, 話說文章分類能否新增個 新聞 選項,\n最近行動支付這麼紅應該會有不少新聞,\nAndroid Pay 看來要等到 6 月了, 不過比之前說的下半年快了不少,\n另外 Android Pay 雖然還沒開放,\n(不過之前有人反映玉山的某些卡片已經可以綁卡了)\n但是已經可以將常用商家會員卡號輸入進去當會員卡使用了\nhttp://i.imgur.com/Zs3QjB4.png\nhttp://i.imgur.com/YBcvf4s.png\nhttp://i.imgur.com/YfK1FRq.png
## 6 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃。\n\n據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行;\nAndroid Pay合作銀行則多了一銀公股行庫為盟友。\n\n消息來源說,由於Samsung手機屬於Android系統,\n因此Samsung Pay與Android Pay兩大系統的使用客群勢將重疊,\n為搶攻市占,兩大行動支付系統在上線前,分別在技術上與合約條款採取策略,\n想方設法拉攏銀行與消費者。\n\n根據Android Pay出爐的合約條款,規定合作銀行在上線前與上線後的四、五天內,\n不得與其他國際支付合作,該條款被市場視為是衝著Samsung Pay而來。\n舉例來說,如果某銀行選擇在5月先推Samsung Pay,\n可能就無法在Android Pay 6月上線第一時間搶到頭香。\n\n此一條款限制,讓許多銀行陷入到底要選Samsung Pay或Android Pay的兩難抉擇,\n但據了解,目前多數銀行考量Samsung品牌具備軟硬體整合的優勢,\n因此較傾向先上Samsung Pay。\n\n另外,為擴大適用通路,Samsung Pay除了可在感應式刷卡機使用外,\n就連傳統的磁條式刷卡機也能使用,藉由擴大適用範圍與便利性,提高使用率。\n\n消息人士說,有鑑於Apple Pay在台上線首日出現當機或刷卡不順的狀況,\nSamsung Pay為搶得先機,決定在5月初先以公開測試的方式,\n測試當大量用戶湧上線時,可能出現哪些狀況,儘早修正排除各種狀況,\n縮短使用陣痛期。\n\n在行銷費預算部分,比起Apple Pay要求銀行必須編列將近新台幣上億元的行銷預算,\nSamsung Pay與Android Pay要求銀行的行銷預算只要100萬~150萬美元。\n\n銀行主管說,金融界的支付競爭將從實體信用卡走向行動支付,邁入白熱化。\n\n心得:\n恭喜開版, 話說文章分類能否新增個 新聞 選項,\n最近行動支付這麼紅應該會有不少新聞,\nAndroid Pay 看來要等到 6 月了, 不過比之前說的下半年快了不少,\n另外 Android Pay 雖然還沒開放,\n(不過之前有人反映玉山的某些卡片已經可以綁卡了)\n但是已經可以將常用商家會員卡號輸入進去當會員卡使用了\nhttp://i.imgur.com/Zs3QjB4.png\nhttp://i.imgur.com/YBcvf4s.png\nhttp://i.imgur.com/YfK1FRq.png
##      cmtPoster cmtStatus                                          cmtContent
## 1       tafafa        推                                               :ZGZa
## 2     sam31376        推 :看看有沒有更新到最新版本我昨天也是一直失敗更新後就
## 3     sam31376         →                                               :好了
## 4          Go2        推                                               :PUSH
## 5   jefflin555        推                                            :期待MST
## 6 ThisIsNotKFC        推                         :沒有三星,只能期待安卓佩惹

篩選欄位

# 取出 cmtPoster(回覆者)、artPoster(發文者)、artUrl(文章連結) 三個欄位
link <- posts_Reviews %>%
      select(cmtPoster, artPoster, artUrl)
head(link)
##      cmtPoster   artPoster
## 1       tafafa        tmlc
## 2     sam31376        tmlc
## 3     sam31376        tmlc
## 4          Go2 snowwolf725
## 5   jefflin555 snowwolf725
## 6 ThisIsNotKFC snowwolf725
##                                                     artUrl
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html

建立網路關係

reviewNetwork <- graph_from_data_frame(d=link, directed=T)
reviewNetwork
## IGRAPH 59a9029 DN-- 13218 164346 -- 
## + attr: name (v/c), artUrl (e/c)
## + edges from 59a9029 (vertex names):
##  [1] tafafa      ->tmlc         sam31376    ->tmlc        
##  [3] sam31376    ->tmlc         Go2         ->snowwolf725 
##  [5] jefflin555  ->snowwolf725  ThisIsNotKFC->snowwolf725 
##  [7] csjan       ->snowwolf725  jin062900   ->snowwolf725 
##  [9] now99       ->snowwolf725  tmlc        ->snowwolf725 
## [11] jefflin555  ->snowwolf725  jefflin555  ->snowwolf725 
## [13] C13H16ClNO  ->snowwolf725  tmlc        ->snowwolf725 
## [15] lar01       ->snowwolf725  iceagesid   ->andychen0603
## + ... omitted several edges

網路圖

# 畫出網路圖
plot(reviewNetwork)

> 可以發現密密麻麻的東西,完全看不出個所以然。我們試着放少一點的東西來試試。

調整參數

# 把點點的大小和線的粗細調小,並不顯示使用者賬號。
plot(reviewNetwork, vertex.size=2, edge.arrow.size=.2,vertex.label=NA)

> 還是沒什麼好解釋的,我們試着縮小文章的數量看看。

資料篩選

挑出2020-03-01當天的文章和它的回覆

link <- posts_Reviews %>%
      ## filter(artDate == as.Date('2020-03-01')) %>%
      select(cmtPoster, artPoster, artUrl) %>% 
      unique()
head(link)
##      cmtPoster   artPoster
## 1       tafafa        tmlc
## 2     sam31376        tmlc
## 4          Go2 snowwolf725
## 5   jefflin555 snowwolf725
## 6 ThisIsNotKFC snowwolf725
## 7        csjan snowwolf725
##                                                     artUrl
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 7 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html

過濾圖中的點(v)

# 這邊要篩選link中有出現的使用者
# 因爲如果userList(igraph中graph_from_data_frame的v參數吃的那個東西)中出現了沒有在link中出現的使用者
# 也會被igraph畫上去,圖片就會變得沒有意義
# 想要看會變怎麼樣的人可以跑一下下面的code
filtered_user <- userList %>%
          filter(user%in%link$cmtPoster | user%in%link$artPoster) %>%
          arrange(desc(type))
head(filtered_user)
##         user    type
## 1     tafafa replyer
## 2   sam31376 replyer
## 3      csjan replyer
## 4      now99 replyer
## 5 C13H16ClNO replyer
## 6      lar01 replyer

過濾使用者後

set.seed(487)
# 建立網路關係圖,因爲剛剛看的時候感覺箭頭有點礙眼,
# 所以這裏我們先把關係的方向性拿掉,減少圖片中的不必要的資訊
reviewNetwork <- graph_from_data_frame(d=link, v=filtered_user, directed=F)
plot(reviewNetwork, vertex.size=3, edge.arrow.size=0.3,vertex.label=NA)

> 可以稍微看出圖中的點(人)之間有一定的關聯,不過目前只有單純圖形我們無法分析其中的內容。
因此以下我們將資料集中的資訊加到我們的圖片中。

加強圖像的顯示資訊(1)

set.seed(487)
# 用使用者的身份來區分點的顏色,如果有發文的話是金色的,只有回覆文章的則用淺藍色表示
V(reviewNetwork)$color <- ifelse(V(reviewNetwork)$type=="poster", "gold", "lightblue")
plot(reviewNetwork, vertex.size=3, edge.arrow.size=0.3,vertex.label=NA)

加強圖像的顯示資訊(2)

set.seed(487)
# 篩選要顯示出的使用者,以免圖形被密密麻麻的文字覆蓋
# 顯示有超過4個關聯的使用者賬號
labels <- degree(reviewNetwork)
V(reviewNetwork)$label <- names(labels)

V(reviewNetwork)$color <- ifelse(V(reviewNetwork)$type=="poster", "gold", "lightblue")
plot(reviewNetwork, vertex.size=3, edge.arrow.size=0.2,
     vertex.label=ifelse(degree(reviewNetwork) > 5, V(reviewNetwork)$label, NA),  vertex.label.font=2)

> 我們可以看到基本的使用者關係,但是我們希望能夠將更進階的資訊視覺化。
例如:使用者經常參與的文章種類,或是使用者在該社群網路中是否受到歡迎。

主題分類

詳細內容請參考第十週的課程

前處理

# 文章斷句
mask_meta <- posts %>%
              mutate(sentence=gsub("[\n]{2,}", "。", sentence))
# 以全形或半形 驚歎號、問號、分號 以及 全形句號 爲依據進行斷句
mask_sentences <- strsplit(mask_meta$sentence,"[。!;?!?;]")
# 將每句句子,與他所屬的文章連結配對起來,整理成一個dataframe
mask_sentences <- data.frame(
                        artUrl = rep(mask_meta$artUrl, sapply(mask_sentences, length)), 
                        sentence = unlist(mask_sentences)
                      ) %>%
                      filter(!str_detect(sentence, regex("^(\t|\n| )*$")))
mask_sentences$sentence <- as.character(mask_sentences$sentence)
head(mask_sentences)
##                                                     artUrl
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
##                                                                                                                                                                                    sentence
## 1                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017
## 2                                                                                                                                       GeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板
## 3                                                                                                                                                                           新任板主為 tmlc
## 4                                                                                                                                                                                 恭喜*^_^*
## 5 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃
## 6                                                據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行
## 文章斷詞
# load lexicon
mask_lexicon <- scan(file = "./dict/M-pay_lexicon.txt", what=character(),sep='\n', 
                   encoding='utf-8',fileEncoding='utf-8')
# load stop words
stop_words <- scan(file = "./dict/stop_words.txt", what=character(),sep='\n', 
                   encoding='utf-8',fileEncoding='utf-8')
## Warning in scan(file = "./dict/stop_words.txt", what = character(), sep =
## "\n", : 輸入連結 './dict/stop_words.txt' 中的輸入不正確
# 使用默認參數初始化一個斷詞引擎
jieba_tokenizer = worker()
# 使用字典重新斷詞
new_user_word(jieba_tokenizer, c(mask_lexicon))
## [1] TRUE
# tokenize function
chi_tokenizer <- function(t) {
  lapply(t, function(x) {
    if(nchar(x)>1){
      tokens <- segment(x, jieba_tokenizer)
      tokens <- tokens[!tokens %in% stop_words]
      # 去掉字串長度爲1的詞彙
      tokens <- tokens[nchar(tokens)>1]
      return(tokens)
    }
  })
}
tokens <- mask_sentences %>%
  unnest_tokens(word, sentence, token=chi_tokenizer) %>%
  filter(!str_detect(word, regex("[0-9a-zA-Z]"))) %>%
  count(artUrl, word) %>%
  rename(count=n)
head(tokens)
##                                                     artUrl     word count
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html     一個     1
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html     成立     1
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html 行動支付     1
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html     作者     1
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html     系統     1
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html   板主為     1
## 清理斷詞結果
# 挑出總出現次數大於3的字
reserved_word <- tokens %>% 
  group_by(word) %>% 
  count() %>% 
  filter(n > 3) %>% 
  unlist()

mask_removed <- tokens %>% 
  filter(word %in% reserved_word)

mask_dtm <- mask_removed %>% cast_dtm(artUrl, word, count)
mask_dtm
## <<DocumentTermMatrix (documents: 4047, terms: 6267)>>
## Non-/sparse entries: 197369/25165180
## Sparsity           : 99%
## Maximal term length: 6
## Weighting          : term frequency (tf)

LDA 主題分析

# LDA分成4個主題
mask_lda <- LDA(mask_dtm, k = 4, control = list(seed = 1234))
# 看各群的常用詞彙
tidy(mask_lda, matrix = "beta") %>%
  group_by(topic) %>%
  top_n(15, beta) %>%
  ungroup() %>%
  mutate(topic = as.factor(topic),
         term = reorder_within(term, beta, topic)) %>%
  ggplot(aes(term, beta, fill = topic)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  coord_flip() +
  scale_x_reordered() +
  theme(text=element_text(family="黑體-繁 中黑", size=10))
## Warning: `tbl_df()` is deprecated as of dplyr 1.0.0.
## Please use `tibble::as_tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database

## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

# 使用LDA分類每篇文章的主題
mask_topics <- tidy(mask_lda, matrix="gamma") %>% # 在tidy function中使用參數"gamma"來取得 theta矩陣。
                  group_by(document) %>%
                  top_n(1, wt=gamma)
head(mask_topics)
## # A tibble: 6 x 3
## # Groups:   document [6]
##   document                                                 topic gamma
##   <chr>                                                    <int> <dbl>
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493523711.A.8B3.html     1 0.505
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493539107.A.C58.html     1 0.671
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493703723.A.65E.html     1 0.557
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493709446.A.929.html     1 0.993
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493709772.A.CC1.html     1 0.858
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493709900.A.290.html     1 0.944

LDA主題進行視覺化

# 把文章資訊和主題join起來
posts_Reviews <- merge(x = posts_Reviews, y = mask_topics, by.x = "artUrl", by.y="document")
head(posts_Reviews)
##                                                     artUrl
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493432055.A.40E.html
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493446652.A.943.html
##                       artTitle    artDate  artTime   artPoster    artCat
## 1       Fw:[新板成立]MobilePay 2017-04-29 02:14:13        tmlc MobilePay
## 2       Fw:[新板成立]MobilePay 2017-04-29 02:14:13        tmlc MobilePay
## 3       Fw:[新板成立]MobilePay 2017-04-29 02:14:13        tmlc MobilePay
## 4 [情報]三大行動支付本季掀戰火 2017-04-29 06:17:24 snowwolf725 MobilePay
## 5 [情報]三大行動支付本季掀戰火 2017-04-29 06:17:24 snowwolf725 MobilePay
## 6 [情報]三大行動支付本季掀戰火 2017-04-29 06:17:24 snowwolf725 MobilePay
##   commentNum push boo
## 1          3    2   0
## 2          3    2   0
## 3          3    2   0
## 4         12   11   0
## 5         12   11   0
## 6         12   11   0
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           sentence
## 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017\n\nGeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板\n\n新任板主為 tmlc\n\n恭喜*^_^*
## 2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017\n\nGeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板\n\n新任板主為 tmlc\n\n恭喜*^_^*
## 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    作者: [系統] 看板: Record\n標題: [新板成立] MobilePay \n時間: Sat Apr 29 10:08:24 2017\n\nGeminiMan 開了一個新板 MobilePay : 試閱 ◎行動支付板\n\n新任板主為 tmlc\n\n恭喜*^_^*
## 4 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃。\n\n據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行;\nAndroid Pay合作銀行則多了一銀公股行庫為盟友。\n\n消息來源說,由於Samsung手機屬於Android系統,\n因此Samsung Pay與Android Pay兩大系統的使用客群勢將重疊,\n為搶攻市占,兩大行動支付系統在上線前,分別在技術上與合約條款採取策略,\n想方設法拉攏銀行與消費者。\n\n根據Android Pay出爐的合約條款,規定合作銀行在上線前與上線後的四、五天內,\n不得與其他國際支付合作,該條款被市場視為是衝著Samsung Pay而來。\n舉例來說,如果某銀行選擇在5月先推Samsung Pay,\n可能就無法在Android Pay 6月上線第一時間搶到頭香。\n\n此一條款限制,讓許多銀行陷入到底要選Samsung Pay或Android Pay的兩難抉擇,\n但據了解,目前多數銀行考量Samsung品牌具備軟硬體整合的優勢,\n因此較傾向先上Samsung Pay。\n\n另外,為擴大適用通路,Samsung Pay除了可在感應式刷卡機使用外,\n就連傳統的磁條式刷卡機也能使用,藉由擴大適用範圍與便利性,提高使用率。\n\n消息人士說,有鑑於Apple Pay在台上線首日出現當機或刷卡不順的狀況,\nSamsung Pay為搶得先機,決定在5月初先以公開測試的方式,\n測試當大量用戶湧上線時,可能出現哪些狀況,儘早修正排除各種狀況,\n縮短使用陣痛期。\n\n在行銷費預算部分,比起Apple Pay要求銀行必須編列將近新台幣上億元的行銷預算,\nSamsung Pay與Android Pay要求銀行的行銷預算只要100萬~150萬美元。\n\n銀行主管說,金融界的支付競爭將從實體信用卡走向行動支付,邁入白熱化。\n\n心得:\n恭喜開版, 話說文章分類能否新增個 新聞 選項,\n最近行動支付這麼紅應該會有不少新聞,\nAndroid Pay 看來要等到 6 月了, 不過比之前說的下半年快了不少,\n另外 Android Pay 雖然還沒開放,\n(不過之前有人反映玉山的某些卡片已經可以綁卡了)\n但是已經可以將常用商家會員卡號輸入進去當會員卡使用了\nhttp://i.imgur.com/Zs3QjB4.png\nhttp://i.imgur.com/YBcvf4s.png\nhttp://i.imgur.com/YfK1FRq.png
## 5 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃。\n\n據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行;\nAndroid Pay合作銀行則多了一銀公股行庫為盟友。\n\n消息來源說,由於Samsung手機屬於Android系統,\n因此Samsung Pay與Android Pay兩大系統的使用客群勢將重疊,\n為搶攻市占,兩大行動支付系統在上線前,分別在技術上與合約條款採取策略,\n想方設法拉攏銀行與消費者。\n\n根據Android Pay出爐的合約條款,規定合作銀行在上線前與上線後的四、五天內,\n不得與其他國際支付合作,該條款被市場視為是衝著Samsung Pay而來。\n舉例來說,如果某銀行選擇在5月先推Samsung Pay,\n可能就無法在Android Pay 6月上線第一時間搶到頭香。\n\n此一條款限制,讓許多銀行陷入到底要選Samsung Pay或Android Pay的兩難抉擇,\n但據了解,目前多數銀行考量Samsung品牌具備軟硬體整合的優勢,\n因此較傾向先上Samsung Pay。\n\n另外,為擴大適用通路,Samsung Pay除了可在感應式刷卡機使用外,\n就連傳統的磁條式刷卡機也能使用,藉由擴大適用範圍與便利性,提高使用率。\n\n消息人士說,有鑑於Apple Pay在台上線首日出現當機或刷卡不順的狀況,\nSamsung Pay為搶得先機,決定在5月初先以公開測試的方式,\n測試當大量用戶湧上線時,可能出現哪些狀況,儘早修正排除各種狀況,\n縮短使用陣痛期。\n\n在行銷費預算部分,比起Apple Pay要求銀行必須編列將近新台幣上億元的行銷預算,\nSamsung Pay與Android Pay要求銀行的行銷預算只要100萬~150萬美元。\n\n銀行主管說,金融界的支付競爭將從實體信用卡走向行動支付,邁入白熱化。\n\n心得:\n恭喜開版, 話說文章分類能否新增個 新聞 選項,\n最近行動支付這麼紅應該會有不少新聞,\nAndroid Pay 看來要等到 6 月了, 不過比之前說的下半年快了不少,\n另外 Android Pay 雖然還沒開放,\n(不過之前有人反映玉山的某些卡片已經可以綁卡了)\n但是已經可以將常用商家會員卡號輸入進去當會員卡使用了\nhttp://i.imgur.com/Zs3QjB4.png\nhttp://i.imgur.com/YBcvf4s.png\nhttp://i.imgur.com/YfK1FRq.png
## 6 原文:\nhttps://money.udn.com/money/story/5613/2432648\n行動支付大戰開打,繼Apple Pay後,Samsung Pay與Android Pay將分別在\n5月、6月先後上線,三大國際行動支付業者之間的戰火,第2季正式點燃。\n\n據透露,Samsung Pay與Android Pay已進入最後測試與調整階段,\n合作銀行大致與Apple Pay大同小異,\n目前已知Samsung Pay合作銀行有玉山與花旗銀行;\nAndroid Pay合作銀行則多了一銀公股行庫為盟友。\n\n消息來源說,由於Samsung手機屬於Android系統,\n因此Samsung Pay與Android Pay兩大系統的使用客群勢將重疊,\n為搶攻市占,兩大行動支付系統在上線前,分別在技術上與合約條款採取策略,\n想方設法拉攏銀行與消費者。\n\n根據Android Pay出爐的合約條款,規定合作銀行在上線前與上線後的四、五天內,\n不得與其他國際支付合作,該條款被市場視為是衝著Samsung Pay而來。\n舉例來說,如果某銀行選擇在5月先推Samsung Pay,\n可能就無法在Android Pay 6月上線第一時間搶到頭香。\n\n此一條款限制,讓許多銀行陷入到底要選Samsung Pay或Android Pay的兩難抉擇,\n但據了解,目前多數銀行考量Samsung品牌具備軟硬體整合的優勢,\n因此較傾向先上Samsung Pay。\n\n另外,為擴大適用通路,Samsung Pay除了可在感應式刷卡機使用外,\n就連傳統的磁條式刷卡機也能使用,藉由擴大適用範圍與便利性,提高使用率。\n\n消息人士說,有鑑於Apple Pay在台上線首日出現當機或刷卡不順的狀況,\nSamsung Pay為搶得先機,決定在5月初先以公開測試的方式,\n測試當大量用戶湧上線時,可能出現哪些狀況,儘早修正排除各種狀況,\n縮短使用陣痛期。\n\n在行銷費預算部分,比起Apple Pay要求銀行必須編列將近新台幣上億元的行銷預算,\nSamsung Pay與Android Pay要求銀行的行銷預算只要100萬~150萬美元。\n\n銀行主管說,金融界的支付競爭將從實體信用卡走向行動支付,邁入白熱化。\n\n心得:\n恭喜開版, 話說文章分類能否新增個 新聞 選項,\n最近行動支付這麼紅應該會有不少新聞,\nAndroid Pay 看來要等到 6 月了, 不過比之前說的下半年快了不少,\n另外 Android Pay 雖然還沒開放,\n(不過之前有人反映玉山的某些卡片已經可以綁卡了)\n但是已經可以將常用商家會員卡號輸入進去當會員卡使用了\nhttp://i.imgur.com/Zs3QjB4.png\nhttp://i.imgur.com/YBcvf4s.png\nhttp://i.imgur.com/YfK1FRq.png
##      cmtPoster cmtStatus                                          cmtContent
## 1       tafafa        推                                               :ZGZa
## 2     sam31376        推 :看看有沒有更新到最新版本我昨天也是一直失敗更新後就
## 3     sam31376         →                                               :好了
## 4          Go2        推                                               :PUSH
## 5   jefflin555        推                                            :期待MST
## 6 ThisIsNotKFC        推                         :沒有三星,只能期待安卓佩惹
##   topic     gamma
## 1     3 0.9671179
## 2     3 0.9671179
## 3     3 0.9671179
## 4     3 0.8728503
## 5     3 0.8728503
## 6     3 0.8728503

針對街口分析

# 文章資料
posts1 <- read_csv("./Project6_1_articleMetaData.csv")
posts1
## # A tibble: 935 x 10
##    artTitle artDate    artTime  artUrl artPoster artCat commentNum  push   boo
##    <chr>    <date>     <time>   <chr>  <chr>     <chr>       <dbl> <dbl> <dbl>
##  1 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~          7     3     0
##  2 Re:[街口]~ 2017-04-30 03:41:48 https~ isaacc    Mobil~         19    12     0
##  3 [閒聊]恭賀開~ 2017-04-30 08:47:27 https~ chocopie  Mobil~          7     2     0
##  4 [討論]街口支~ 2017-04-30 12:35:21 https~ nkhs9412~ Mobil~         32    19     0
##  5 [請益]恭喜開~ 2017-04-30 18:37:36 https~ a24573165 Mobil~         28     5     0
##  6 [請益]街口7~ 2017-05-01 01:22:22 https~ cocoaswi~ Mobil~         50    30     0
##  7 [閒聊]恭喜開~ 2017-05-01 10:27:27 https~ centrum   Mobil~         55    30     0
##  8 [請益]街口通~ 2017-05-01 10:44:10 https~ cathyaa   Mobil~         11     4     0
##  9 [閒聊]分享今~ 2017-05-01 12:54:34 https~ jungjial~ Mobil~         25     5     1
## 10 [討論]街口付~ 2017-05-01 15:42:39 https~ ChouBoJen Mobil~         23    16     0
## # ... with 925 more rows, and 1 more variable: sentence <chr>
# 回覆資料
reviews1 <- read_csv("./Project6_1_articleReviews.csv")
head(reviews1)
## # A tibble: 6 x 10
##   artTitle artDate    artTime  artUrl artPoster artCat cmtPoster cmtStatus
##   <chr>    <date>     <time>   <chr>  <chr>     <chr>  <chr>     <chr>    
## 1 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~ tmlc      推       
## 2 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~ IUSAN     推       
## 3 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~ eversun   推       
## 4 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~ eversun   →        
## 5 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~ eversun   →        
## 6 [街口]今天屈~ 2017-04-30 01:37:19 https~ sidochic  Mobil~ eversun   →        
## # ... with 2 more variables: cmtDate <dttm>, cmtContent <chr>
# 文章斷句
mask_meta1 <- posts1 %>%
              mutate(sentence=gsub("[\n]{2,}", "。", sentence))
# 以全形或半形 驚歎號、問號、分號 以及 全形句號 爲依據進行斷句
mask_sentences1 <- strsplit(mask_meta1$sentence,"[。!;?!?;]")
# 將每句句子,與他所屬的文章連結配對起來,整理成一個dataframe
mask_sentences1 <- data.frame(
                        artUrl = rep(mask_meta1$artUrl, sapply(mask_sentences1, length)), 
                        sentence = unlist(mask_sentences1)
                      ) %>%
                      filter(!str_detect(sentence, regex("^(\t|\n| )*$")))
mask_sentences1$sentence <- as.character(mask_sentences1$sentence)
head(mask_sentences1)
##                                                     artUrl
## 1 https://www.ptt.cc/bbs/MobilePay/M.1493516244.A.9AC.html
## 2 https://www.ptt.cc/bbs/MobilePay/M.1493516244.A.9AC.html
## 3 https://www.ptt.cc/bbs/MobilePay/M.1493516244.A.9AC.html
## 4 https://www.ptt.cc/bbs/MobilePay/M.1493516244.A.9AC.html
## 5 https://www.ptt.cc/bbs/MobilePay/M.1493523711.A.8B3.html
## 6 https://www.ptt.cc/bbs/MobilePay/M.1493523711.A.8B3.html
##                                                                                                            sentence
## 1                                                                                  首先祝賀開版,行動支付是未來趨勢
## 2                                                  先來個討論吧,歡迎大家討論一下今天使用的狀況,或是有遇到什麼問題
## 3                                                    七折價應該是最後金額再打七折吧,原本門市優惠跟街口七折不衝突吧
## 4                                                                                                            謝謝\n
## 5 我也是一早看到APP裡面的這個公告\n活動有上限150的設計,所以代表示店內折扣後500元以內,\n然後最後買單時用街口付款吧
## 6                                                                                \n因此應該跟其他的店內優惠不衝突吧
## 文章斷詞
# load lexicon
mask_lexicon <- scan(file = "./dict/M-pay_lexicon.txt", what=character(),sep='\n', 
                   encoding='utf-8',fileEncoding='utf-8')
# load stop words
stop_words <- scan(file = "./dict/stop_words.txt", what=character(),sep='\n', 
                   encoding='utf-8',fileEncoding='utf-8')
## Warning in scan(file = "./dict/stop_words.txt", what = character(), sep =
## "\n", : 輸入連結 './dict/stop_words.txt' 中的輸入不正確
# 使用默認參數初始化一個斷詞引擎
jieba_tokenizer = worker()
# 使用字典重新斷詞
new_user_word(jieba_tokenizer, c(mask_lexicon))
## [1] TRUE
# tokenize function
chi_tokenizer <- function(t) {
  lapply(t, function(x) {
    if(nchar(x)>1){
      tokens <- segment(x, jieba_tokenizer)
      tokens <- tokens[!tokens %in% stop_words]
      # 去掉字串長度爲1的詞彙
      tokens <- tokens[nchar(tokens)>1]
      return(tokens)
    }
  })
}
tokens <- mask_sentences1 %>%
  unnest_tokens(word, sentence, token=chi_tokenizer) %>%
  filter(!str_detect(word, regex("[0-9a-zA-Z]"))) %>%
  count(artUrl, word) %>%
  rename(count=n)

## 清理斷詞結果
# 挑出總出現次數大於3的字
reserved_word1 <- tokens %>% 
  group_by(word) %>% 
  count() %>% 
  filter(n > 3) %>% 
  unlist()

mask_removed1 <- tokens %>% 
  filter(word %in% reserved_word1)

mask_dtm1 <- mask_removed1 %>% cast_dtm(artUrl, word, count)

街口主題分析

# LDA分成4個主題
mask_lda1 <- LDA(mask_dtm1, k = 4, control = list(seed = 1234))
# 看各群的常用詞彙
tidy(mask_lda1, matrix = "beta") %>%
  #filter
  group_by(topic) %>%
  top_n(10, beta) %>%
  ungroup() %>%
  mutate(topic = as.factor(topic),
         term = reorder_within(term, beta, topic)) %>%
  ggplot(aes(term, beta, fill = topic)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  coord_flip() +
  scale_x_reordered() +
  theme(text=element_text(family="黑體-繁 中黑", size=10))
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

# 挑選出2020/03/01後的文章,
# 篩選有在15篇以上文章回覆者,
# 文章主題歸類為1(活動優惠)與3(行動支付)者,
# 欄位只取:cmtPoster(評論者), artPoster(發文者), artUrl(文章連結), topic(主題)
link <- posts_Reviews %>%
      filter(artDate > as.Date('2020-03-01')) %>%
      group_by(cmtPoster, artUrl) %>% 
      filter(n()>15) %>% 
      ungroup() %>% 
      filter(topic == 1 | topic == 3) %>% 
      select(cmtPoster, artPoster, artUrl, topic) %>% 
      unique()
link
## # A tibble: 10 x 4
##    cmtPoster  artPoster  artUrl                                            topic
##    <chr>      <chr>      <chr>                                             <int>
##  1 benedict76 RonChin    https://www.ptt.cc/bbs/MobilePay/M.1583389825.A.~     3
##  2 ianqoo2000 RonChin    https://www.ptt.cc/bbs/MobilePay/M.1583389825.A.~     3
##  3 aq981334   RonChin    https://www.ptt.cc/bbs/MobilePay/M.1583389825.A.~     3
##  4 aabbcat    aabbcat    https://www.ptt.cc/bbs/MobilePay/M.1583484599.A.~     3
##  5 Sheng98    aabbcat    https://www.ptt.cc/bbs/MobilePay/M.1583484599.A.~     3
##  6 r51303     aabbcat    https://www.ptt.cc/bbs/MobilePay/M.1583484599.A.~     3
##  7 winsonwu   winsonwu   https://www.ptt.cc/bbs/MobilePay/M.1584591143.A.~     3
##  8 Sheng98    timlin1989 https://www.ptt.cc/bbs/MobilePay/M.1588683223.A.~     1
##  9 Sheng98    sbtiagr    https://www.ptt.cc/bbs/MobilePay/M.1588787878.A.~     1
## 10 Sheng98    frogbsd    https://www.ptt.cc/bbs/MobilePay/M.1589944356.A.~     1
# 篩選link中有出現的使用者
filtered_user <- userList %>%
          filter(user%in%link$cmtPoster | user%in%link$artPoster) %>%
          arrange(desc(type))
filtered_user
##          user   type
## 1  timlin1989 poster
## 2     Sheng98 poster
## 3    aq981334 poster
## 4    winsonwu poster
## 5     frogbsd poster
## 6     RonChin poster
## 7     sbtiagr poster
## 8  benedict76 poster
## 9      r51303 poster
## 10    aabbcat poster
## 11 ianqoo2000 poster

使用者經常參與的文章種類

# 建立網路關係
reviewNetwork <- graph_from_data_frame(d=link, v=filtered_user, directed=F)

# 依據使用者身份對點進行上色
labels <- degree(reviewNetwork)
V(reviewNetwork)$label <- names(labels)
V(reviewNetwork)$color <- ifelse(V(reviewNetwork)$type=="poster", "gold", "lightblue")

# 依據回覆發生的文章所對應的主題,對他們的關聯線進行上色
E(reviewNetwork)$color <- ifelse(E(reviewNetwork)$topic == "1", "lightgreen", "palevioletred")

# 畫出社群網路圖
set.seed(5432)
par(family="STKaiti")
plot(reviewNetwork, vertex.size=3, edge.width=3, vertex.label.dist=1,
     vertex.label=ifelse(degree(reviewNetwork) > 7, V(reviewNetwork)$label, NA),vertex.label.font=2)

# 加入標示
legend("bottomright", c("發文者","回文者"), pch=21, 
  col="#777777", pt.bg=c("gold","lightblue"), pt.cex=1, cex=1)
## Warning in strwidth(legend, units = "user", cex = cex, font = text.font): font
## family not found in Windows font database
legend("topleft", c("活動優惠","行動支付"), 
       col=c("lightgreen","palevioletred"), lty=1, cex=1)

使用者是否受到歡迎

# PTT的回覆有三種,推文、噓文、箭頭
# 我們只要看推噓就好,因此把箭頭清掉
link <- posts_Reviews %>%
      filter(cmtStatus!="→") %>%
      group_by(cmtPoster, artUrl) %>% 
      filter(n()>5) %>% 
      ungroup() %>% 
      select(cmtPoster, artPoster, artUrl, cmtStatus) %>% 
      unique()

# 接下來把網路圖畫出來,跟前面做的事都一樣,因此不再細述

# 篩選link中有出現的使用者
filtered_user <- userList %>%
          filter(user%in%link$cmtPoster | user%in%link$artPoster) %>%
          arrange(desc(type))

# 建立網路關係
reviewNetwork <- graph_from_data_frame(d=link, v=filtered_user, directed=F)

# 依據使用者身份對點進行上色
labels <- degree(reviewNetwork)
V(reviewNetwork)$label <- names(labels)
V(reviewNetwork)$color <- ifelse(V(reviewNetwork)$type=="poster", "gold", "lightblue")


# 依據回覆發生的文章所對應的主題,對他們的關聯線進行上色
E(reviewNetwork)$color <- ifelse(E(reviewNetwork)$cmtStatus == "推", "lightgreen", "palevioletred")

# 畫出社群網路圖
set.seed(5432)
par(family="STKaiti")
plot(reviewNetwork, vertex.size=2, edge.width=3, vertex.label.dist=1,
     vertex.label=ifelse(degree(reviewNetwork) > 5, V(reviewNetwork)$label, NA),vertex.label.font=2)

# 加入標示
legend("bottomright", c("發文者","回文者"), pch=21,
  col="#777777", pt.bg=c("gold","lightblue"), pt.cex=1, cex=1)
## Warning in strwidth(legend, units = "user", cex = cex, font = text.font): font
## family not found in Windows font database
legend("topleft", c("推","噓"), 
       col=c("lightgreen","palevioletred"), lty=1, cex=1)

#結語 1.鄉民對行動支付的關注項目為:活動回饋、合作信用卡資訊、使用問題討論、街口支付、一卡通綁定。 2.支付種類中,街口支付在鄉民討論度最高,且態度多篇正面(推>噓) 2.在行動支付版的一卡通使用較多,可能與LINE PAY的使用有關。 3.鄉民對街口支付討論關注的部分,在於優惠活動、支付的法規規範、在商店的使用方式、餘額使用、客服回覆等。 4.鄉民對街口支付討論的感受偏向正面(推>噓)