首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

R JSON 数据类型要了解 R 如何​​处理 JSON 数据,首先应该从 rjson 库开始,它将导入列表格式的数据。要了解关于 R 数据类型的更多信息,请查看                 中的链接。列表数据类型是最灵活的,因为它可以从列表数据分解成任何其他数据类型,而且列表类型中的数据不必是长度相等的(矢量类型则不同,存在这方面的限制。)不过,可以应用于数据集的许多统计函数都不能用于列表格式的数据。因此,您必须从列表格式的数据中将有用的数据点提取为另一种数据类型。
要探索 R 如何处理一段给定数据,可以使用命令 str()。如果使用了之前创建的 grades 对象,那么                    str(grades) 的输出应该与清单 1 类似。
清单 1. 在 R 中的 JSON                数据的结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
str(grades)
List of 4
    $ ist of 4
    ..$ name  : chr "Amy"
    ..$ grade1: num 35
    ..$ grade2: num 41
    ..$ grade3: num 53
$ ist of 4
    ..$ name  : chr "Bob"
    ..$ grade1: num 44
    ..$ grade2: num 37
    ..$ grade3: num 28
$ ist of 4
    ..$ name  : chr "Charles"
    ..$ grade1: num 68
    ..$ grade2: num 65
    ..$ grade3: num 61
$ ist of 4
    ..$ name  : chr "David"
    ..$ grade1: num 72
    ..$ grade2: num 78
    ..$ grade3: num 81




确定要提取哪些数据点,并使用 c(),或者使用联接,以便提取数据,如下所示:
1
2
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                对象。要为某个给定学生的成绩创建一个对象,可以发出以下命令:
1
Amy.grade< - c(grades[[1]]$grade1, grades[[1]]$grade2, grades[[1]]$grade3)




该命令使用了赋值运算符,包括大于 (>) 或小于 (<)                符号,具体情况取决于赋值的方向,该命令还结合使用了一个连字符 (-)。通过索引号(例如,[[1]]                    是第一个列表),或者通过带美元符号运算符的名称(例如,$grade1),访问以列表格式保存的项中的独立元素。
R 中更有用的一种数据类型是 data.frame,它是矢量的复合物。为了从示例数据创建                data.frame,首先需要为其余学生的分数创建数字矢量,如下所示:
1
2
3
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)




接下来,用下面的命令将所有的矢量组合成一个数据帧:
1
All.grades <- data.frame(Amy.grade, Bob.grade, Charles.grade, David.grade)




从逗号分隔值或电子表格程序导入 R 的数据也会成为 data.frame 对象,使用处理器内置到 R 中。
R 统计函数要想对 grade1.num 的统计性质有基本的了解,可以使用 summary 命令:
1
2
3
          summary(Amy.grade)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
35      38      41      43      47      53




summary 命令也可以用于数据帧。summary(All.grades) 的输出与清单 2 相似。
清单 2. 在 R                中的数据帧汇总
1
2
3
4
5
6
7
8
              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 对象之间的关联:
1
2
cor(Amy.grade, Bob.grade)
[1] -0.9930365




备注:方差和协方差使用了与关联相同的语法,但它们分别使用了 cov() 和                    var() 函数,如下所示:
1
2
3
4
cov(Amy.grade, Bob.grade)
[1] -73
var(Amy.grade, Bob.grade)
[1] -73




要计算平均绝对偏差,可以使用 mad() 函数:
1
2
mad(Charles.grade)
[1] 4.4478




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




该函数显示了 Amy 的成绩的标准偏差为 9.165151。
请注意,输出中有一个索引号                    [1]。这让您知道可以用对待其他任何对象的方式来对待这个函数的输出,您还可以为它分配一个名称,例如,x<-                    sd(Amy.grade)。如果使用 edit() 命令更改矢量 Amy.grade                    的内容,x 的值也会随之改变。
另一种有用的统计功能是 Kolmogorov-Smirnov 测试。您可以对示例数据使用此测试,以便确定两个学生之间的概率分布是否不同。
清单 3. Kolmogorov-Smirnov                测试
1
2
3
4
5
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 来自相同的分布。
返回列表