用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 包:


 
 
  1. install.packages("twitteR")  
  2. #安装 TwitteR 
  3. library (twitteR)  
  4. #载入 TwitteR 

安装并载入 twitteR 包之后,你得输入上文提及的应用程序的 API 信息:


 
 
  1. api_key <- ""  
  2.  #在引号内放入你的 API key  
  3. api_secret <- ""  
  4.  #在引号内放入你的 API secret token  
  5. token <- ""  
  6.  #在引号内放入你的 token 
  7. token_secret <- ""  
  8.  #在引号内放入你的 token secret 

接下来,连接推特访问 API:


 
 
  1. setup_twitter_oauth(api_key, api_secret, token, token_secret) 

我们来试试让推特搜索有关社区花园和农夫市场:


 
 
  1. tweets <- searchTwitter("community garden OR #communitygarden OR farmers market OR #farmersmarket", n = 200, lang = "en"

这个代码意思是搜索前 200 篇 (n = 200) 英文 (lang = "en") 的推文, 包括关键词 community garden 或 farmers market 或任何提及这些关键词的话题标签。

推特搜索完成之后,在数据框中保存你的结果:


 
 
  1. tweets.df <-twListToDF(tweets) 

为了用推文创建地图,你需要收集的导出为 .csv 文件:


 
 
  1. write.csv(tweets.df, "C:\Users\YourName\Documents\ApptoMap\tweets.csv")  
  2.  #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 脚本安装这些包:


 
 
  1. install.packages("leaflet"
  2. install.packages("maps")  
  3. library(leaflet) 
  4. library(maps) 

现在需要一个路径让 Leaflet 访问你的数据:


 
 
  1. read.csv("C:\Users\YourName\Documents\ApptoMap\tweets.csv", stringsAsFactors = FALSE

stringAsFactors = FALSE 意思是保留信息,不将它转化成 factors。 (想了解 factors,读这篇文章"stringsAsFactors: An unauthorized biography", 作者 Roger Peng)

是时候制作你的 Leaflet 地图了。我们将使用 OpenStreetMap基本地图来做你的地图:


 
 
  1. m <- leaflet(mymap) %>% addTiles() 

我们在基本地图上加个圈。对于 lng 和 lat,输入包含推文的经纬度的列名,并在前面加个~。 ~longitude 和 ~latitude 指向你的 .csv 文件中与列名:


 
 
  1. m %>% addCircles(lng = ~longitude, lat = ~latitude, popup = mymap$type, weight = 8, radius = 40, color = "#fb3004", stroke = TRUE, fillOpacity = 0.8) 

运行你的代码。会弹出网页浏览器并展示你的地图。这是我前面收集的推文的地图:

推文定位地图

带定位的推文地图,使用了 Leaflet 和 OpenStreetMap CC-BY-SA

虽然你可能会对地图上的图文数量如此之小感到惊奇,通常只有 1% 的推文记录了地理编码。我收集了总数为 366 的推文,但只有 10(大概总推文的 3%)是记录了地理编码的。如果你为得到记录了地理编码的推文而困扰,改变搜索关键词看看能不能得到更好的结果。

总结

对于初学者,把以上所有碎片结合起来,从推特数据生成一个 Leaflet 地图可能很艰难。 这个教程基于我完成这个任务的经验,我希望它能让你的学习过程变得更轻松。

(题图:琼斯·贝克. CC BY-SA 4.0. 来源: Cloud, Globe. Both CC0.)


作者:Dorris Scott

来源:51CTO

相关文章
|
12月前
|
人工智能 机器人 芯片
《C++与类脑芯片:开启人工智能硬件新征程》
在人工智能快速发展的背景下,类脑芯片作为模仿人类大脑神经元结构的新型硬件,以其低功耗和高并行处理能力崭露头角。C++凭借其高效执行、强大内存管理和丰富的库支持,在类脑芯片的应用开发中展现出独特优势。二者结合不仅在智能感知、数据处理和机器人控制等领域带来突破,还为未来创新应用如智能诊断、个性化教育等开辟了广阔前景。尽管面临编程复杂性和生态不完善等挑战,但通过学术界、产业界和开源社区的合作,C++与类脑芯片有望推动人工智能迈向新高度。
331 12
|
存储 缓存 算法
作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察
MySQL作为一个存储系统,有着一个关键的优化机制——缓冲池(buffer pool),它极大地提高了数据的访问效率,避免了频繁的磁盘IO操作。通过将常用的数据存储在内存中,MySQL可以快速响应查询请求,减少耗时的磁盘访问。这一优化机制在提升数据库性能方面起到了重要的作用。
708 7
作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察
|
存储 分布式计算 Hadoop
Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式
该文介绍了Hadoop中两种小文件管理策略。首先,通过Hadoop Archive (HAR)将小文件归档成大文件以减少存储和管理开销。操作包括使用`hadoop archive`命令进行归档和解档。其次,文章讨论了小文件优化的Uber模式,这种模式在同一JVM中运行所有MapReduce任务以提高效率和局部性,但可能引发单点故障和资源限制问题。启用Uber模式需在`mapred-site.xml`配置文件中设置相关参数。文中还提供了使用WordCount例子验证Uber模式配置的步骤。
529 0
|
iOS开发
scenePhase 的作用 -- 检测 APP 是否在后台
SwiftUI 提供了一个名为 `scenePhase` 的 环境变量,它在应用程序在前台、后台和非活动状态之间切换时会自动更新。你可以在 App 结构体本身或任何 SwiftUI 视图中观察这些状态的变化。
scenePhase 的作用 -- 检测 APP 是否在后台
|
SQL 关系型数据库 MySQL
[Python]使用Python操作MySQL数据库(pymysql)
[Python]使用Python操作MySQL数据库(pymysql)
|
存储 缓存 分布式计算
大数据架构必须具备的七大核心能力
大数据架构提供了新数据环境下的处理能力,大数据架构不仅必须扩展到包含传统和大数据源,而且还需要更广泛的功能集来支持数据的消费、处理和交付。
大数据架构必须具备的七大核心能力
|
存储 SQL 分布式计算
Hadoop 概述、Hadoop 发展历史、Hadoop 三大发行版本、Hadoop优势、Hadoop组成、Hadoop1.x、2.x、3.x区别、HDFS架构概述、大数据技术生态体系、推荐系统框架图
高可靠性、高扩展性、高效性、高容错性YARN架构概述、MapReduce架构概述、HDFS、YARN、MapReduce三者关系、1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。 2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 3)Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。MapReduce将计算过程分为两个阶段:
2294 1
Hadoop 概述、Hadoop 发展历史、Hadoop 三大发行版本、Hadoop优势、Hadoop组成、Hadoop1.x、2.x、3.x区别、HDFS架构概述、大数据技术生态体系、推荐系统框架图
|
存储 缓存 算法
学术加油站|基于 RDMA 的分布式系统研究进展
学术加油站|基于 RDMA 的分布式系统研究进展
1097 0
学术加油站|基于 RDMA 的分布式系统研究进展
|
传感器 定位技术
【DIY无人机】主控程序
如何自己动手制作一个飞控?
1020 1
【DIY无人机】主控程序
|
新零售 达摩院
(5000字长文)阿里巴巴“新六脉神剑”前瞻:从授人鱼到授人渔
(5000字长文)阿里巴巴“新六脉神剑”前瞻:从授人鱼到授人渔
802 0
(5000字长文)阿里巴巴“新六脉神剑”前瞻:从授人鱼到授人渔