许多研究人员都对直接从网站获取新的数据很感兴趣。但是从网站上收集大量数据可能是不切实际的。当手动收集数据后,很容易出现人为错误。当自动收集数据时时,它可能会违反网站的服务条款。
所以,研究人员通常依赖一个被称为API的工具,该工具代表应用程序编程接口。Web API根据规则提供了网站和用户之间的通信方式。特别是,它们允许用户通过从特定网站下的数据库请求数据,从而快速获得明确定义的数据类型。(这不是唯一的API。例如,智能手机应用程序经常使用API在你的设备和应用程序的数据库之间来回传送数据,但是在这篇文章中,我们关注的是从网站向用户提供数据的API。)
许多大公司以及政府机构都创建了公共API。这些组织的数据可以很容易的访问,以鼓励开发人员使用他们的平台。在Pew研究中心,作者经常使用API为研究收集信息。常见的有我们在社交媒体中的机器人、关于枪支的Google搜索、Facebook上的科学页面以及关于政府政策的公开评论中(都使用了API)。
API如何提供数据
API提供各种形式的数据,但JSON是其中最受欢迎的。JSON是用于构造数据的有用文件格式,因为它保存了与制表符或逗号分隔文件(如.tsv和.csv文件)相关的更多层次结构和关于数据集的元信息。根据你用于数据分析时使用的编程语言,有些库可以使JSON数据操作变得直观。例如,在R统计语言中,可以使用jsonlite库将API中的数据转换为熟悉的R对象和类。
API可以用于不同的编程语言
为了在各种用不同语言编写的计算机程序(如Java、Python、R等)上有效地与API进行交互,研究人员依赖于API”封装器”。这些工具(存在于大多数流行的API中)允许研究人员在使用他们自己选择的编程语言的同时直接从API请求数据。下面,我们以世界银行的API为例,使用R访问数据。
示例:如何与世界银行的API进行交互
世界银行API为研究人员提供了数百个关于世界各国健康、财富和文化的变量。为了展示如何使用这个API,我们可以编写一个脚本来获取一些变量并绘制它们。在这种情况下,我们将使用世界银行提供的识别码搜索变量,然后将变量提取到R的内存中。
下面的代码使用WDI包,这是一个包含世界银行API封装的R包。 (如上所述,封装器是一个函数或一组函数,用于执行对API的调用,并将结果转换为比API本身更有用的内容。)要执行此代码,首先必须安装WDI软件包以及devtools、ggplot2、gganimate、data.table和dplyr。你可以使用以下命令为R安装这些函数:
我们还将为动画安装gganimate附加软件包:
现在安装了这些软件包,让我们将它们加载到工作内存中:
WDI包提供了一种便捷的方式来搜索世界银行API以寻找可能值得研究变量。下面,我们在”string”字段之后指定要搜索的单词,以及查找它的位置”name”字段。这样,我们可以看到所有与道路基础设施、免疫率和任何其他变量有关的变量与人均衡量。
搜索返回变量列表及其相应的代码。现在我们已经知道了我们感兴趣的变量的代码,我们可以从API调用数据。我们用WDI函数来做到这一点。在这个函数调用中,我们提供了我们想要的国家的参数、变量代码、第一年的数据、最后一年的数据以及可选的”extra”字段集。”extra”字段集是国家元数据——尝试关闭此选项,看看会发生什么。
数据以data.table的形式加载到内存中,这是一种矩形数据框架,可以轻松进行交互和分析。 存在的一个问题是变量名称不容易解释,所以让我们将它们转换为更直观的东西。我们使用dplyr软件包来实现这一点,该软件包提供了一组用于处理数据的工具。它有一个方便可读的语法。我们将使用”rename”命令来重命名变量。
接下来,让我们删除缺少的观测值,以便我们可以绘制数据。当然,你应该仔细考虑缺失的国家以及原因。
我们可以创建一个特定年份的收入和免疫率之间关系的可视化表示。我们将为每个国家绘制一个点,按照该国人口的对数大小来确定。我们也会绘制一般关系的黄线。
下图是一个使用ggplot2的静态图:
最后,我们将创建一个在一段时间内具有相同关系的动画。为此,请首先安装ImageMagick。 然后创建一个包含数据中所有年份的图表: