湯明軒(Andrew) 秘書長 sulaxd@gmail.com 本簡報內容,如需引用請註明出處 Mining Facebook for Knowing a Person You Fancy 湯明軒(Andrew) 秘書長 sulaxd@gmail.com 本簡報內容,如需引用請註明出處
故事從一場x開始 圖片來源:葡萄藤
我多了幾個FB好友 與一個目標
但,我該如何走下一步棋呢? 剛認識的彼此,直接進入聊天階段沒什麼問題的。 但你敲的時機點,可能有問題。 透過FB聊天,最保險的時機點為何? 上班?上課? 休息?睡覺? 透過FB聊天,最保險的時機點為何? 估計是她平常會發文的時間點附近
從發文時間,了解她較常使用FB的時間 這個時間切入應該不錯~
人和 天時與地利Get!然後呢? Say Hello~她回應的機率應該提高了不少 但,下一句,該聊什麼呢? 從興趣下手,或許是不錯的選擇。 畢竟,話不投機半句多 從興趣下手,或許是不錯的選擇。 她加入的粉絲團類型,應該可以看出一些端倪! 說不定她因此覺得妳們很投緣。
從喜好粉絲團,了解她興趣之所在
再來,還有什麼值得一窺? 基本上,這應該足夠了。 真要再加強彼此的聯結性,那還是人和的部分 該如何看出誰是她的好友? 如果連她的好友、死黨都打點好,還怕熟不起來嗎? 該如何看出誰是她的好友? 透過回應她發文的頻率,越是頻繁者,關係應該不差。 把點讚的人也計算進來,可能只會找出愛點讚的朋友
從文字雲,了解她的交友圈
感謝各位耐心聆聽 今天的演講 接下來進入第二階段 Work Shop
以下 有點沉悶 忍住別睡 實作概述 以上三招該如何實現?接下來帶各位走一趟 認識 Facebook - Graph API Explorer Posts資料 發文時間 回應者名稱 Likes粉絲團資料 粉絲團類型 導出三種統計之結果 以下 有點沉悶 忍住別睡
Facebook - Graph API Explorer https://developers.facebook.com/tools/explorer/ 取得Facebook資料前,我們必須先認識它。
取得目標 ID or name 至目標之個人頁面即可看到如下之網址 取得後即可進入Graph API Explorer https://www.facebook.com/sulaxd https://www.facebook.com/profile.php?id=1083976159 取得後即可進入Graph API Explorer https://developers.facebook.com/tools/explorer/
1 2 3 4 5
1 2
1 2
目標對象的ID:321654651 Posts Data Posts 資料概述 文章ID:321654_3213135 1. From: 誰發的文name:湯咪 他的ID: 321654651 發文內容message: 1. 發文型態: 建立時間: 1. 按讚Like: Data: 按讚人ID:435131654 按讚人name:Andrew 1. 回應 回應文的ID:32165415_4654655465 回應人ID : 32131312123 回應人name : Mary Posts 資料概述
1 2 3 3 3
目標對象的ID:321654651 按讚的粉絲團: Like 資料概述 Data: 類型:”Product/service” 粉絲團名稱:手創工坊 類型:”Company” 粉絲團名稱:福星機車行
接下來,寫程式把資料導入 R 有人知道怎麼寫嗎?
老實說,我也不會寫 從來沒學過程式怎麼寫 不會寫?那就問。 從前是念商管,第一個接觸的程式語言就是R 幸好R語言真的不難(某些層面有點像excel) 不會寫?那就問。 R 語言搭配Google使用 借力使力-讓一切都變得簡單了
Step 1-Google it ! 先來下個關鍵字:「R data facebook」 太多結果可以參考了!
第一個搜尋結果 Apply R
Copy
準備一、導入facebook函數 Paste
準備二、導入存取代碼(access token) Copy Paste
範例一、發文時間統計
範例1.1、導入post資料 目標對象ID 存取代碼 欲查詢資料
範例1.2、挑出發文時間 執行此行即可得第一篇之發文時間 PostResult$posts$data[[1]]$created_time 若需取得總共三十篇之發文時間則 result <- NULL for(i in 1:30){ result <- c(result ,PostResult$posts$data[[i]]$created_time) }
範例1.3、發文時間統計 將字串格式改為時間格式 只取「小時」 針對結果做次數分配表 以次數分配表畫出長條圖 TIME <- strptime(result,"%Y-%m-%dT%H:%M:%S%z") 只取「小時」 hour <- format(TIME,"%H") 針對結果做次數分配表 以次數分配表畫出長條圖 barplot(table(hour))
範例1.4、發文時間長條圖
範例二、回應發文者統計
範例2.1、挑出回應發文者名稱 執行此行即可得第一篇之第一個回應發文者名稱 PostResult$posts$data[[1]]$comments$data[[1]]$from$name PostResult$posts$data[[1]]$comments$data[[1]]$from$name
範例2.2、第一篇所有回應發文者名稱 若需取得總共第一篇之所有回應發文者名稱則 result <- NULL for(i in 1:length(PostResult$posts$data[[1]]$comments$data)){ result <- c(result , PostResult$posts$data[[1]]$comments$data[[i]]$from$name) } 第一篇有幾筆回應資料
範例2.3、所有發文之回應發文者名稱 若需取得所有發文(此例為10篇)之回應發文者名稱之所有回應發文者名稱則 result <- NULL for(j in 1:length(PostResult$posts$data)){ for(i in 1:length(PostResult$posts$data[[j]]$comments$data)){ result <- c(result , PostResult$posts$data[[j]]$comments$data[[i]]$from$name) }
範例2.4、回應發文者名稱統計 針對結果做次數分配表 儲存結果為.csv檔 Write(result, file=“comments.csv”)
範例2.5、回應發文者名稱文字雲製作 因文字雲常以空格為斷字標準 先以excel打開.csv檔,將英文之空格以取代之功能消去 線上HTML5文字雲輕鬆做 http://timc.idv.tw/wordcloud/ R也有文字雲之套件,但目前之中文字體我較不喜歡,所以…
範例2.5、回應發文者名稱文字雲 兩次以上的人才會出現
範例三、粉絲團分類統計
範例3.1、導入Likes資料 目標對象ID 存取代碼 欲查詢資料
範例3.2、挑出目標對象按讚之粉絲團分類 執行此行即可得第一個按讚粉絲團分類 LikesResult$likes$data[[1]]$category 若需取得總共三十個之按讚粉絲團分類 result <- NULL for(i in 1:30){ result <- c(result, LikesResult$likes$data[[i]]$category) }
範例3.3、粉絲團分類統計 針對結果做次數分配表
範例3.3、粉絲團分類長條圖 以次數分配表畫出長條圖 barplot(table(result),las=2)
範例結束,歸納一些結論
掌握資料的人將掌握一切 本次主題實作: 未來分析方向: 透過發文時間-得知目標之經常在線時間 透過回文者名稱-得知目標之好友圈 透過按讚粉絲團-得知目標之喜好 未來分析方向: 好友圈加入時間與性別參數-得知潛在情敵 透過發文內容-得知目標之情緒狀況 由此主題可知,只是玩個Facebook就可以洩漏 許多個人訊息。所以,請小心管理您的個人資料 與小心使用社群網站。 例如: 定期隱藏歷史動態 跟資料科學家當FB好友前三思
近期活動 延續 R Taiwan 2013 的經驗 活動名稱:2014資料科學與產業應用研討會 (Data Science and Industrial Applications 2014) 主辦單位: 活動時間:103/5/23(五) 活動概述: 資料科學與產業實務的結合 邀請分享產業資料分析之專業人士演講 免費,人數限制100人 未來 R Taiwan 與 Data Science and Industrial Applications 將定期舉辦
資料來源 Mining Facebook Data: Most "Liked" Status and Friendship Network Crawling facebook with R HTML5 文字雲
Q&A 謝謝您的耐心聆聽 資料科學是一門需要想像力的技術
實作可能出現之問題
除錯 狀況一 解決辦法:修改部分facebook函數並重新執行 狀況二 解決辦法
除錯 狀況三 解決辦法:至Graph API Explorer更新存取代碼
除錯 狀況四 長條圖下方之名稱超出顯示範圍 解決辦法: 先執行下面第一行,其中15值越大會將圖越往上移 op <- par(mar=c(15,4,2,2)) barplot(table(result),las=2)
除錯 狀況五 時區錯誤 解決辦法: TIME <- as.POSIXct(as.numeric(strptime(TIME,"%Y-%m- %dT%H:%M:%S%z"))+28800, origin = ISOdatetime(1960,1,1,0,0,0))