JSON

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

字号+ 作者:H5之家 来源:H5之家 2017-03-14 12:00 我要评论( )

R 是一种强大的语言,可用于内存中统计计算和图形显示。它类似于 SAS、IBM SPSSreg; Statistics、MATLAB 或 FORTRAN,但它是

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 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

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • java如何调用json

    java如何调用json

    2017-03-14 12:03

  • PHP中json_decode()溢出的问题

    PHP中json_decode()溢出的问题

    2017-03-14 11:03

  • 解析javascript 数组以及json元素的添加删除

    解析javascript 数组以及json元素的添加删除

    2017-03-14 11:00

  • Metasploit官方攻防模拟实训工具:Metasploit Vulnerable Servic

    Metasploit官方攻防模拟实训工具:Metasploit Vulnerable Servic

    2017-03-14 10:03

网友点评
"