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

使用 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 来自相同的分布。 |
|
|
|
|
|