使用 R 从 API 中提取数据

2023-12-07

我可以访问 azure 中的一些遥测数据(特别是使用移动应用程序的客户的所有 API 调用)。我已经使用 R 中的 httr 包来请求 3 分钟内的数据,并像这样评估响应(显然有我自己的应用程序 ID 和密钥,下面我没有包含):

install.packages("httr")
library(httr)

r1 <- GET("https://api.applicationinsights.io/v1/apps/application-ID/query?timespan=PT0.05H&query=requests", add_headers("X-Api-Key" = "my-unique-key"))

r1

####### response object ########
# Response [https://api.applicationinsights.io/v1/apps/application-ID/query?timespan=PT0.05H&query=requests]
# Date: 2018-01-11 15:55
# Status: 200
# Content-Type: application/json; charset=utf-8
# Size: 84.7 kB

在环境窗口中,我可以看到 r1 是一个包含 10 的列表,并且有 84,652 个原始值:

enter image description here

我还可以使用 content 函数来查看我有一个 1 的列表:

r2 <- content(r1)

enter image description here

我真的有两个问题:

1)如何理解环境窗口中的这些输出?他们告诉我关于数据结构的什么信息(我认为它是基于内容类型描述的 JSON)

2)有没有办法检索数据并将其转换为表格格式(数据框)?我不明白如何查询数据。我阅读了这篇文章,但无法将其应用于我的数据:https://tclavelle.github.io/blog/r_and_apis/

任何帮助,将不胜感激。


更新 2018 年 1 月 19 日

我采用了贾林德的建议。请参阅下面的代码和输出:

library(httr)
library(jsonlite)

r1 <- GET("https://api.applicationinsights.io/v1/apps/application-ID/query?timespan=PT0.05H&query=requests", add_headers("X-Api-Key" = "my-unique-key"))

#convert to a character string
r2 <- rawtoChar(r1$content)  

#check the class is character
class(r2)    

# now extract JSON from string object
r3 <- fromJSON(r2)

# convert to a data frame - this returns a data frame with columns called name, columns and rows 
x <- as.data.frame(r3[[1]])  

# column headings data frame (there are 37 columns - see example of first 3 columns below):               
c <- as.data.frame(x$columns)

#                       name      type
#                  timestamp    datetime
#                         id     string
#                     source     string

# data frame with 37 columns and all rows of telemetry data (only showing first 4 columns of this data frame):

r <- as.data.frame(x$rows)
#           X1                               X2                X3                  X4
# 1   2018-01-19T10:29:25.4Z       |aticCNxxxx=.f83assss_     <NA>          GET /Cards/Cardtype1
# 2   2018-01-19T10:29:30.226Z     |tX6Xz0xxxxx=.27cxcxae_    <NA>          GET /AddressLookup/Address
# 3   2018-01-19T10:29:45.327Z     |OgfPbicLues=.f83a9a1f_    <NA>          POST /Account/MobileDevice
# 4   2018-01-19T10:29:46.078Z     |V5MwpXXxxxxx=.f83axxxx_   <NA>          GET /Cards/Cardtype1
# 5   2018-01-19T10:30:00.427Z     |Jok8wxxxxxx=.7be33aaa_    <NA>          GET /cards/Cardtype1

p0bs 是对的 - 你应该查看 jsonlite 包。

我不知道我是否可以完全帮助您解决问题的第一部分,但我也许可以帮助您将 JSON 放入数据框架中。

当您将 GET 函数应用于 URL 时,返回的原始内容为十六进制。

raw.result <- GET(url = url, path = path)
head(raw.result$content) ## This is in hex

十六进制很难使用,因此您可能要做的一件事是将内容转换为字符串。您可以使用 rawToChar 函数来完成此操作。

text.raw.content <- rawToChar(raw.result$content)
class(text.raw.content) ## Now its a string
nchar(text.raw.content) ## How many chars?

好的 - 现在你有一个字符串......它比十六进制更好......但仍然不是你正在寻找的。但是您可以使用 jsonlite 包中的 fromJSON 函数从字符串对象中提取 JSON。

json.content <- fromJSON(text.raw.content)
class(json.content) ## It's a list
length(json.content) ## With two elements
names(json.content) ## meta and data... makes sense...
class(json.content[[2]]) ## data.frame

因此,基本上,此列表的第二个元素是转换为本机 R 数据帧的 JSON 内容。根据我的经验,在你走到这一步之后,还必须进行更多的思考……但希望这能让你开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 R 从 API 中提取数据 的相关文章

随机推荐

  • TextBox :将文本换行为多行

    我的表单中有一个文本框 我试图将内容包装成多行 这样它就不会被截断 到目前为止我做到了这一点 TextBox myTextBox new TextBox myTextBox Multiline true myTextBox WordWrap
  • javascript中“object || {}”是什么意思?

    我在 javascript 应用程序中发现了以下代码行 var auth parent auth parent auth 我知道存在现有的对象父对象 它是用 auth 对象扩展的 但我不明白是什么parent auth 在这里做 paren
  • 有人可以解释一下这段简短的 C++ 代码吗,我无法理解它

    include
  • 第 2 部分:如何在不实际旋转的情况下获取基于分区的查询的总和

    因此 由于我没有最新版本的 Postgresql 我有 Postgresql 9 3 所以我不可能想出一个类似于计算特定字段的总值的数据透视函数的函数 您可以单击下面的链接来使用我创建的问题作为参考 它们在代码中类似 但在要求方面有所不同
  • 当鼠标离开屏幕时如何停止移动

    我希望有人可以帮助我解决一个小问题 目前 我在主摄像头上附加了一个输入管理器 允许用户通过将鼠标移动到窗口边缘来平移地图 但我遇到了一个小问题 我尝试自行修复但无济于事 如果鼠标移出窗口 平移仍然会发生 当我调试或使用其他应用程序时 我觉得
  • 如何使轴在网格线之间打勾

    在下面的简单示例中 如何使 x 轴刻度值出现在网格之间 import numpy as np import matplotlib pyplot as plt np random seed 1 x range 10 y np random r
  • 发布请求后收到 400 错误请求

    当我发送以下 http post 请求时 POST query fcgi HTTP 1 1 Content Type application x www form urlencoded Content Length 63 form stat
  • 使用 Google Sheet 导入 XML 并每分钟自动刷新

    我有下面的脚本 它在名为 价格 的 google 表中导入一些 XML 数据 一切工作正常 除了我设置了一个时间驱动的触发器每分钟运行一次 但数据不会更新 触发器似乎工作正常 因为我可以看到最后一次运行时间每分钟更新一次 调用 XML 数据
  • 为什么 gcc/clang 处理代码的方式略有不同? (给出的例子)

    所以我在摆弄 C 代码时 我注意到 gcc 和 clang 处理代码的方式 如果我使用可变大小在文件范围中声明一个数组 clang 编译没有问题 但 gcc 会抛出错误 我的猜测是 这与 gcc clang 默认情况下启用 未启用哪些编译器
  • 使用 jQuery 更新 css

    我正在尝试使用 jQuery 更新导航栏的 CSS 通常将 css 定义为 navbar static top navbar nav gt active gt a background color black 我该如何使用类选择器 无需单独
  • 授予远程用户(非管理员)使用 WMI 和 C# 枚举命名空间 cimv2 中 Win32_Service 中的服务的能力

    我正在创建一个看门狗服务 它将监视各种远程服务器 都在同一域中 上的其他服务 我用来连接远程服务器的用户不是管理员 当我尝试枚举 Win32 Service 类中的服务时 出现访问被拒绝错误 我已向用户授予 WMI 控件中 Root CIM
  • 推送到分支时未触发 Github 操作

    My build and test yml文件输入 github workflows如下 name CI on push branches main name of my branch pull request branches main
  • Java接口扩展问题

    我必须实现一个 RMI 服务器 它将作为另外两个 RMI 服务的前端 因此 我决定要做的一个合乎逻辑的事情是让该接口实现其他两个服务的接口 public interface FrontEndServer extends Remote Boo
  • Inno Setup 中不同语言的不同许可证文件

    我在 Inno Setup 中创建了多语言安装文件 如何针对不同语言使用不同的许可证文件 例如 英语语言 gt 英语许可证俄语 gt 俄语许可证 如果您只想要每种语言的自定义许可证 您可以使用指定LicenceFile上的参数 Langua
  • 为什么 SkiaSharp Touch SKTouchAction.Moved 事件不起作用?

    Summary ActionType 为 的情况下永远不会引发 Touch 事件SKTouchAction Moved but SKTouchAction Pressed被提出 为什么 Moved事件永远不会被引发 Detail 我正在尝试
  • 在java中找不到要求创建类的符号

    我有一个类定义如下 public class Myclass public int myvariable 100 if myvariable gt 0 为什么我前面出现错误if condition说明cannot find symbol s
  • 反应寄存器错误不显示

    我正在链接 Web 应用程序的正面和背面 并且在注册部分中 我无法向 UI 显示验证和服务器错误消息 当执行错误注册时 我收到 400 和 401 状态我想显示的消息位于 Axioserror gt response gt data gt
  • 尝试构建正则表达式来检查模式

    a 以数字开头和结尾b 连字符应以数字开头和结尾c 逗号应以数字开头和结尾d 数字范围应为 1 31 编辑 在正则表达式中需要这条规则 谢谢 Ed Heal e 如果数字以连字符 开头 则不能以逗号以外的任何其他字符结尾 并且遵循上面列出的
  • 是否可以在堆栈上创建类的实例?

    我知道在 C 中你可以在堆栈上创建类的实例 例如 MyClass mc MyClass 8 2 或者像在堆上 MyClass mc new MyClass 8 2 你能在 C 中做同样的事情吗 我在 C 中创建类的唯一方法是newing i
  • 使用 R 从 API 中提取数据

    我可以访问 azure 中的一些遥测数据 特别是使用移动应用程序的客户的所有 API 调用 我已经使用 R 中的 httr 包来请求 3 分钟内的数据 并像这样评估响应 显然有我自己的应用程序 ID 和密钥 下面我没有包含 install