用 R 收集和映射推特數據的初學者嚮導
當我開始學習 R ,我也需要學習如何出於研究的目的地收集推特數據並對其進行映射。儘管網上關於這個話題的信息很多,但我發覺難以理解什麼與收集並映射推特數據相關。我不僅是個 R 新手,而且對各種教程中技術名詞不熟悉。但儘管困難重重,我成功了!在這個教程里,我將以一種新手程序員都能看懂的方式來攻略如何收集推特數據並將至展現在地圖中。
創建應用程序
如果你沒有推特帳號,首先你需要 註冊一個。然後,到 apps.twitter.com 創建一個允許你收集推特數據的應用程序。別擔心,創建應用程序極其簡單。你創建的應用程序會與推特應用程序介面(API)相連。 想像 API 是一個多功能電子個人助手。你可以使用 API 讓其它程序幫你做事。這樣一來,你可以接入推特 API 令其收集數據。只需確保不要請求太多,因為推特數據請求次數是有限制 的。
收集推文有兩個可用的 API 。你若想做一次性的推文收集,那麼使用 REST API. 若是想在特定時間內持續收集,可以用 streaming API。教程中我主要使用 REST API。
創建應用程序之後,前往 Keys and Access Tokens 標籤。你需要 Consumer Key (API key)、 Consumer Secret (API secret)、 Access Token 和 Access Token Secret 才能在 R 中訪問你的應用程序。
收集推特數據
下一步是打開 R 準備寫代碼。對於初學者,我推薦使用 RStudio,這是 R 的集成開發環境 (IDE) 。我發現 RStudio 在解決問題和測試代碼時很實用。 R 有訪問該 REST API 的包叫 twitteR。
打開 RStudio 並新建 RScript。做好這些之後,你需要安裝和載入 twitteR 包:
install.packages("twitteR")
#安裝 TwitteR
library (twitteR)
#載入 TwitteR
安裝並載入 twitteR 包之後,你得輸入上文提及的應用程序的 API 信息:
api_key <- ""
#在引號內放入你的 API key
api_secret <- ""
#在引號內放入你的 API secret token
token <- ""
#在引號內放入你的 token
token_secret <- ""
#在引號內放入你的 token secret
接下來,連接推特訪問 API:
setup_twitter_oauth(api_key, api_secret, token, token_secret)
我們來試試讓推特搜索有關社區花園和農夫市場:
tweets <- searchTwitter("community garden OR #communitygarden OR farmers market OR #farmersmarket", n = 200, lang = "en")
這個代碼意思是搜索前 200 篇 (n = 200)
英文 (lang = "en")
的推文, 包括關鍵詞 community garden
或 farmers market
或任何提及這些關鍵詞的話題標籤。
推特搜索完成之後,在數據框中保存你的結果:
tweets.df <-twListToDF(tweets)
為了用推文創建地圖,你需要收集的導出為 .csv 文件:
write.csv(tweets.df, "C:UsersYourNameDocumentsApptoMaptweets.csv")
#an example of a file extension of the folder in which you want to save the .csv file.
運行前確保 R 代碼已保存然後繼續進行下一步。.
生成地圖
現在你有了可以展示在地圖上的數據。在此教程中,我們將用一個 R 包 Leaflet 做一個基本的應用程序,這是一個生成互動式地圖的熱門 JavaScript 庫。 Leaflet 使用 magrittr 管道運算符 (%>%
), 因為其語法自然,易於寫代碼。剛接觸可能有點奇怪,但它確實降低了寫代碼的工作量。
為了清晰起見,在 RStudio 打開一個新的 R 腳本安裝這些包:
install.packages("leaflet")
install.packages("maps")
library(leaflet)
library(maps)
現在需要一個路徑讓 Leaflet 訪問你的數據:
read.csv("C:UsersYourNameDocumentsApptoMaptweets.csv", stringsAsFactors = FALSE)
stringAsFactors = FALSE
意思是保留信息,不將它轉化成 factors。 (想了解 factors,讀這篇文章"stringsAsFactors: An unauthorized biography", 作者 Roger Peng)
是時候製作你的 Leaflet 地圖了。我們將使用 OpenStreetMap基本地圖來做你的地圖:
m <- leaflet(mymap) %>% addTiles()
我們在基本地圖上加個圈。對於 lng
和 lat
,輸入包含推文的經緯度的列名,並在前面加個~
。 ~longitude
和 ~latitude
指向你的 .csv 文件中與列名:
m %>% addCircles(lng = ~longitude, lat = ~latitude, popup = mymap$type, weight = 8, radius = 40, color = "#fb3004", stroke = TRUE, fillOpacity = 0.8)
運行你的代碼。會彈出網頁瀏覽器並展示你的地圖。這是我前面收集的推文的地圖:
![推文定位地圖](/data/attachment/album/201708/17/150211us845om3tpz3l4mz.jpg "推文定位地圖")
帶定位的推文地圖,使用了 Leaflet 和 OpenStreetMap CC-BY-SA
雖然你可能會對地圖上的圖文數量如此之小感到驚奇,通常只有 1% 的推文記錄了地理編碼。我收集了總數為 366 的推文,但只有 10(大概總推文的 3%)是記錄了地理編碼的。如果你為得到記錄了地理編碼的推文而困擾,改變搜索關鍵詞看看能不能得到更好的結果。
總結
對於初學者,把以上所有碎片結合起來,從推特數據生成一個 Leaflet 地圖可能很艱難。 這個教程基於我完成這個任務的經驗,我希望它能讓你的學習過程變得更輕鬆。
(題圖:瓊斯·貝克. CC BY-SA 4.0. 來源: Cloud, Globe. Both CC0.)
作者簡介:
Dorris Scott - Dorris Scott 是喬治亞大學的地理學博士生。她的研究重心是地理信息系統(GIS)、 地理數據科學、可視化和公共衛生。她的論文是在一個 GIS 系統介面將退伍軍人福利醫院的傳統和非傳統數據結合起來,幫助病人為他們的健康狀況作出更為明朗的決定。
via: https://opensource.com/article/17/6/collecting-and-mapping-twitter-data-using-r
作者:Dorris Scott 譯者:XYenChi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive