你好,游客 登录 注册 搜索
背景:
阅读新闻

使用 R 从 JSON 中的数据中获取有意义的统计方法

[日期:2016-07-07] 来源:极客头条  作者: [字体: ]

R 是一种强大的语言,可用于内存中统计计算和图形显示。它类似于 SAS、IBM SPSS® Statistics、MATLAB 或 FORTRAN,但它是开源的。有一些转换器可以很容易地将以 SAS、IBM​​ SPSS Statistics 或 MATLAB 格式保存的数据移动到 R。此外,R 配备了通过 Comprehensive R Archive Network (CRAN) 提供的大量软件包。CRAN 提供了一些功能,这些功能类似于针对 Perl 语言的 CPAN,或者针对 Ruby 语言的 Rubygems.org。R 还集成了 InfoSphere BigInsights(参见 参考资料)。 InfoSphere BigInsights 使用 JSON 格式来保存和显示数​​据,本文将介绍如何结合使用 JSON 与 R。JSON 是一个键值数据存储,可以直接映射到 JavaScript 对象。本文使用一组示例学生及其各自的考试成绩。


设置开发环境

首先,您需要设置开发环境。您需要使用 R,而且可以选择使用 RStudio 集成开发环境(IDE)。大多数软件包管理系统(apt、yum 等)默认情况下都提供了 R 版本 2.15,但是,如果想用最版的 R(在撰写本文时的最新版本是 3.0.2),则必须编辑您的可用数据源。 

deb http://favorite-cran-mirror/bin/linux/debian wheezy-cran3/

用离您最近的镜像替换 favorite-cran-mirror。关于 CRAN 镜像的列表,请参见 参考资料。除了基于终端的 R 界面之外,您的 CRAN 镜像还为其他发行版本(比如 Red Hat Enterprise Linux®、SuSE 和 Ubuntu 等)提供了指令。 

install.packages("rjson")

然后使其可用:

library("rjson")

您可以使用 CRAN 上提供的任何软件包的名称替换 rjson。 

grades=fromJSON(file = '/path_to_file/grades.json',  unexpected.escape = "error")

用您的文件路径替换 path_to_file。 
基本的 R 命令 您可以在 R 中使用 help 函数了解关于任何给定命令的更多信息:

help(name_of_command)

或者,您可以使用下面的命令:

?name_of_command

用您想学习的命令的名称替换 name_of_command。例如,想要阅读 library 命令的帮助页,只需输入 help(library)。这将打开 library 函数的帮助页。输入 q 会退出帮助页并返回 R shell。 

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE)

例如,gsub("A", "a", grades) 在返回值中将每个大写的 A 转换为小写 a。perl 标志使得 R 使用 Perl 兼容的正则表达式库,而不是使用标准的正则表达式,如果想从 Perl 导入现有的正则表达式规则,可能会用到这个标志。 sub() 方法更改了匹配模式的第一次出现。而 gsub() 则更改了该模式的所有出现。 

system('echo "something"', intern=TRUE)

也许下面的命令是更有用的示例,该命令利用底层 shell 可用的任何语言的任意脚本中的返回值来创建 R 对象:

system('./my/script/here.pl', intern=true)

R JSON 数据类型 


清单 1. 在 R 中的 JSON 数据的结构

str(grades)

List of 4

$ : List of 4

..$ name  : chr "Amy"

..$ grade1: num 35

..$ grade2: num 41

..$ grade3: num 53

$ : List of 4

..$ name  : chr "Bob"

..$ grade1: num 44

..$ grade2: num 37

..$ grade3: num 28

$ : List of 4

..$ name  : chr "Charles"

..$ grade1: num 68

..$ grade2: num 65

..$ grade3: num 61

$ : List of 4

..$ name  : chr "David"

..$ grade1: num 72

..$ grade2: num 78

..$ grade3: num 81

确定要提取哪些数据点,并使用 c(),或者使用联接,以便提取数据,如下所示:

grade1.num <- c(grades[[1]]$grade1, grades[[2]]$grade1, grades[[3]]$grade1,grades[[4]]$grade1)

此命令函数将会创建一个新的对象 (grade1.num),其中包括每个学生第次考试的分数。grade1.num 现在是一个数值矢量,是 R 中最基本的数据类型。如果要删除 R 对象,那么可以发出 rm() 命令。例如,rm(grade1.num) 删除了刚刚从 R 会话创建的 grade1.num 对象。要为某个给定学生的成绩创建一个对象,可以发出以下命令:

Amy.grade< - c(grades[[1]]$grade1, grades[[1]]$grade2, grades[[1]]$grade3)

该命令使用了赋值运算符,包括大于 (>) 或小于 (<) 符号,具体情况取决于赋值的方向,该命令还结合使用了一个连字符 (-)。通过索引号(例如,[[1]] 是第一个列表),或者通过带美元符号运算符的名称(例如,$grade1),访问以列表格式保存的项中的独立元素。 

Bob.grade <- c(grades[[2]]$grade1, grades[[2]]$grade2, grades[[2]]$grade3)

Charles.grade <- c(grades[[3]]$grade1, grades[[3]]$grade2, grades[[3]]$grade3)

David.grade <- c(grades[[4]]$grade1, grades[[4]]$grade2, grades[[4]]$grade3)

接下来,用下面的命令将所有的矢量组合成一个数据帧:

All.grades <- data.frame(Amy.grade, Bob.grade, Charles.grade, David.grade)

从逗号分隔值或电子表格程序导入 R 的数据也会成为 data.frame 对象,使用处理器内置到 R 中。 R 统计函数 要想对 grade1.num 的统计性质有基本的了解,可以使用 summary 命令:

summary(Amy.grade)

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

35     38     41     43     47     53

summary 命令也可以用于数据帧。summary(All.grades) 的输出与清单 2 相似。


清单 2. 在 R 中的数据帧汇总

summary(All.grades)

Amy.grade    Bob.grade     Charles.grade    David.grade 

Min.   :35   Min.   :28.00   Min.   :61.00   Min.   :72.0 

1st Qu.:38   1st Qu.:32.50   1st Qu.:63.00   1st Qu.:75.0 

Median :41   Median :37.00   Median :65.00   Median :78.0 

Mean   :43   Mean   :36.33   Mean   :64.67   Mean   :77.0 

3rd Qu.:47   3rd Qu.:40.50   3rd Qu.:66.50   3rd Qu.:79.5 

Max.   :53   Max.   :44.00   Max.   :68.00   Max.   :81.0

为了确定两个矢量是否统计相关,可以使用处理数值矢量的易于使用的 R 函数:cor()。例如,您可以使用下面的命令来检查 Bob.grade 和 Amy.grade 对象之间的关联:

cor(Amy.grade, Bob.grade)[1] -0.9930365

备注:方差和协方差使用了与关联相同的语法,但它们分别使用了 cov() 和 var() 函数,如下所示:

cov(Amy.grade, Bob.grade)

[1] -73

var(Amy.grade, Bob.grade)

[1] -73

要计算平均绝对偏差,可以使用 mad() 函数:

mad(Charles.grade)[1] 4.4478

另一个处理数值矢量的有用函数是 sd()。此函数将会检查两个或两个以上矢量的标准偏差:

sd(Amy.grade)[1] 9.165151

该函数显示了 Amy 的成绩的标准偏差为 9.165151。 


清单 3. Kolmogorov-Smirnov 测试

ks.test(Amy.grade, Bob.grade)

Two-sample Kolmogorov-Smirnov test

data:Amy.grade and Bob.grade

D = 0.3333, p-value = 1

alternative hypothesis: two-sided

您可以看到,Amy.grade 和 Bob.grade 来自相同的分布。 R 可视化 R 因其创建数据可视化的能力而众所周知。在这个家族中,最简单的函数是 plot()。例如,plot(David.grade) 创建了该对象的一个简单散点图。使用以下命令为轴线添加标题和标签:

plot(David.grade, main = "David's Grades", ylab = "Grade", xlab = "Test Number")

函数 dotchart 类似于 plot,它采用了许多相同的参数,但 dotchart 使用了 labels=row.names(x) 标志,它允许您使用行名称(如果有的话)来标记图表。 R 还可以生成直方图,例如,hist(All.grades[[1]])。该命令等同于 hist(Amy.grade),但它会从先前创建的数据帧中提取矢量。 

barplot(Charles.grade, horiz=TRUE, col="darkblue")

图形函数 boxplot(例如,boxplot(All.grades))很有用。使用 boxplot,可以比较完整的数据帧。要添加轴标签、中值比较的空隙(notches for median comparison)、标题和颜色,请输入以下命令:

boxplot(All.grades, main = "Class Grades", ylab = "Grade",

xlab = "Test Number", col=(c("gold","darkgreen","blue","red")),

notch=TRUE)

请注意嵌套在 boxplot 函数中的连接函数的用法。 结束语 本文介绍了 R 语言如何提供一个强大的工具来统计分析数据,并以图形方式显示结果。R 已经在金融、生物和工程等行业提供了多种用途。目前的 InfoSphere BigInsights 产品已包括 R 函数,R 会受到用户的欢迎。





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款