天天看點

用R收集和映射推特資料的初學者向導

用R收集和映射推特資料的初學者向導

學習使用 r 的 twitter 和 leaflet 包, 你就可以把任何話題的推文定位畫在地圖上。

當我開始學習 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:\users\yourname\documents\apptomap\tweets.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:\users\yourname\documents\apptomap\tweets.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) 

運作你的代碼。會彈出網頁浏覽器并展示你的地圖。這是我前面收集的推文的地圖:

用R收集和映射推特資料的初學者向導

推文定位地圖

帶定位的推文地圖,使用了 leaflet 和 openstreetmap cc-by-sa

雖然你可能會對地圖上的圖文數量如此之小感到驚奇,通常隻有 1% 的推文記錄了地理編碼。我收集了總數為 366 的推文,但隻有 10(大概總推文的 3%)是記錄了地理編碼的。如果你為得到記錄了地理編碼的推文而困擾,改變搜尋關鍵詞看看能不能得到更好的結果。

總結

對于初學者,把以上所有碎片結合起來,從推特資料生成一個 leaflet 地圖可能很艱難。 這個教程基于我完成這個任務的經驗,我希望它能讓你的學習過程變得更輕松。

(題圖:瓊斯·貝克. cc by-sa 4.0. 來源: cloud, globe. both cc0.)

作者:dorris scott

來源:51cto

繼續閱讀