“ 本章节是数据预处理的第一步:了解数据(集)。只有充分了解了数据,我们才能对数据做进一步的预处理和后续深入的分析。”
目录
1 数据结构
str()
dim()
head()
2 描述性统计分析
summary()
psych::describe()
分组计算doBy::summaryBy
分组计算psych::describeBy
3 频数和列联表
table 一维计数
xtabs 多维(交叉)计数
gmodels::CrossTable #列联表
01
—
数据结构
class() # 数据类型
dim() # 数据(集)的行列数
nrow() # 数据(集)的行数,等价于dim(mtcars)[1]
ncol() # 数据(集)的列数,等价于dim(mtcars)[2]
View() # 查看数据(集),以表格形式展示 如下图1
head(X,n) # 显示数据集前n行
str() # 查看数据(集)类型、行列数,每列的数据类型和简要数据概况
图1 View(mtcars)
data(mtcars)
# 数据类型 class(mtcars)
[1] "data.frame"
# 数据(集)的行列数 dim(mtcars)
[1] 32 11
# 数据(集)的行数,等价于dim(mtcars)[1] nrow(mtcars)
[1] 32
dim(mtcars)[1]
[1] 32
# 数据(集)的列数,等价于dim(mtcars)[2] ncol(mtcars)
[1] 11
dim(mtcars)[2]
[1] 11
str(mtcars)
'data.frame': 32 obs. of 11 variables:
mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
cyl : num 6 6 4 6 8 6 8 4 4 6 ...
disp: num 160 160 108 258 360 ...
hp : num 110 110 93 110 175 105 245 62 95 123 ...
drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
wt : num 2.62 2.88 2.32 3.21 3.44 ...
qsec: num 16.5 17 18.6 19.4 17 ...
vs : num 0 0 1 1 0 1 0 1 1 1 ...
am : num 1 1 1 0 0 0 0 0 0 0 ...
gear: num 4 4 4 3 3 3 3 4 4 4 ...
carb: num 4 4 1 1 2 1 4 2 2 4 ...
02
—
描述性统计分析
描述性统计分析主要是认识数据的整体状况,例如是否缺失、均值、方差、中位数等描述性统计变量。推荐使用summary()、psych::describe()
## 描述统计
# 1.1 summary()
summary(mtcars) #具体查看下方示例
# 1.2 psych::describe
library(psych)
psych::describe(mtcars) #具体查看下方示例
# 1.3 Hmisc::describe
library(Hmisc)
describe(df)
# 1.4 aggregate() # 分组描述统计分析
myvars<-c("mpg","hp","wt")
aggregate(mtcars[myvars],by=list(am=mtcars$am),mean)
#输出结果
am mpg hp wt
1 0 17.14737 160.2632 3.768895
2 1 24.39231 126.8462 2.411000
# 1.5 doBy包和psych包 具体查看下方示例
# 分组计算的扩展,doBy包和psych包提供了分组计算的描述性统计量的函数,doBy包中的summaryBy()函数使用的基本格式
> summary(mtcars)
mpg cyl disp hp drat wt qsec
Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0 Min. :2.760 Min. :1.513 Min. :14.50
1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89
Median :19.20 Median :6.000 Median :196.3 Median :123.0 Median :3.695 Median :3.325 Median :17.71
Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7 Mean :3.597 Mean :3.217 Mean :17.85
3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90
Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0 Max. :4.930 Max. :5.424 Max. :22.90
vs am gear carb
Min. :0.0000 Min. :0.0000 Min. :3.000 Min. :1.000
1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
Median :0.0000 Median :0.0000 Median :4.000 Median :2.000
Mean :0.4375 Mean :0.4062 Mean :3.688 Mean :2.812
3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
Max. :1.0000 Max. :1.0000 Max. :5.000 Max. :8.000
> psych::describe(mtcars)
vars n mean sd median trimmed mad min max range skew kurtosis se
mpg 1 32 20.09 6.03 19.20 19.70 5.41 10.40 33.90 23.50 0.61 -0.37 1.07
cyl 2 32 6.19 1.79 6.00 6.23 2.97 4.00 8.00 4.00 -0.17 -1.76 0.32
disp 3 32 230.72 123.94 196.30 222.52 140.48 71.10 472.00 400.90 0.38 -1.21 21.91
hp 4 32 146.69 68.56 123.00 141.19 77.10 52.00 335.00 283.00 0.73 -0.14 12.12
drat 5 32 3.60 0.53 3.70 3.58 0.70 2.76 4.93 2.17 0.27 -0.71 0.09
wt 6 32 3.22 0.98 3.33 3.15 0.77 1.51 5.42 3.91 0.42 -0.02 0.17
qsec 7 32 17.85 1.79 17.71 17.83 1.42 14.50 22.90 8.40 0.37 0.34 0.32
vs 8 32 0.44 0.50 0.00 0.42 0.00 0.00 1.00 1.00 0.24 -2.00 0.09
am 9 32 0.41 0.50 0.00 0.38 0.00 0.00 1.00 1.00 0.36 -1.92 0.09
gear 10 32 3.69 0.74 4.00 3.62 1.48 3.00 5.00 2.00 0.53 -1.07 0.13
carb 11 32 2.81 1.62 2.00 2.65 1.48 1.00 8.00 7.00 1.05 1.26 0.29
分组计算的扩展,doBy包和psych包提供了分组计算的描述性统计量的函数,doBy包中的summaryBy()函数使用的基本格式:
# doBy()包中summaryBy()函数的使用格式:
# summaryBy(formula,data=dataframe,FUN=function)
# formula接受以下格式:
# var1+var2+var3+var4+……+varN~groupvar1+groupvar2+……#+groupvarN
# 在~左侧的变量师需要分析的数值型变量,而在右侧的变量是类别型的分组变#量。
library(doBy)
mtcars,FUN=mystats) =
# 输出结果
am mpg.n mpg.mean mpg.stdev mpg.skew mpg.kurtosis hp.n hp.mean hp.stdev hp.skew
1 0 19 17.14737 3.833966 0.01395038 -0.8031783 19 160.2632 53.90820 -0.01422519
2 1 13 24.39231 6.166504 0.05256118 -1.4553520 13 126.8462 84.06232 1.35988586
wt.n wt.mean wt.stdev wt.skew wt.kurtosis
1 -1.2096973 19 3.768895 0.7774001 0.9759294 0.1415676
2 0.5634635 13 2.411000 0.6169816 0.2103128 -1.1737358
library(psych)
myvars<-c("mpg","hp","wt")
mtcars$am)) =
#输出结果
Descriptive statistics by group
am: 0
vars n mean sd median trimmed mad min max range skew kurtosis se
mpg 1 19 17.15 3.83 17.30 17.12 3.11 10.40 24.40 14.00 0.01 -0.80 0.88
hp 2 19 160.26 53.91 175.00 161.06 77.10 62.00 245.00 183.00 -0.01 -1.21 12.37
wt 3 19 3.77 0.78 3.52 3.75 0.45 2.46 5.42 2.96 0.98 0.14 0.18
am: 1
vars n mean sd median trimmed mad min max range skew kurtosis se
mpg 1 13 24.39 6.17 22.80 24.38 6.67 15.00 33.90 18.90 0.05 -1.46 1.71
hp 2 13 126.85 84.06 109.00 114.73 63.75 52.00 335.00 283.00 1.36 0.56 23.31
wt 3 13 2.41 0.62 2.32 2.39 0.68 1.51 3.57 2.06 0.21 -1.17 0.17
03
—
频数和列联表
推荐学习使用table、xtabs、gmodels::CrossTable
# 2.频数和列联表
#频数生成 2.1 table
vs)
gear)
# 将频数转换为比例
prop.table(table(mtcars$gear))
prop.table()*100转化成百分比
# 2.2 二维列联表
mytable<-table(A,B) A为行变量 B为列变量
xtabs()函数还可以使用公式风格的输入创建列联表
#其中mydata是一个矩阵或者数据框 mytable<-xtabs(~A+B,data=mydata)
三维以上列联表mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
mytable <- xtabs(~gear+vs, data = mtcars)
mytable
prop.table(mytable, 2) #按列计算百分比
addmargins(mytable, 2) #增加行和
#使用CrossTable()创建二维列表
"gmodels") install.packages(
library(gmodels)
$vs) gear, mtcars
示例
> ## 2.频数和列联表
> # 2.1 table #频数生成
> table(mtcars$vs)
0 1
18 14
> table(mtcars$gear)
3 4 5
15 12 5
>
> # 将频数转换为比例
> prop.table(table(mtcars$gear))
3 4 5
0.46875 0.37500 0.15625
> # prop.table()*100转化成百分比
>
> # 2.2 二维列联表
> # mytable<-table(A,B) A为行变量 B为列变量
> # xtabs()函数还可以使用公式风格的输入创建列联表
> # mytable<-xtabs(~A+B,data=mydata) #其中mydata是一个矩阵或者数据框
> # 三维以上列联表mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
> mytable <- xtabs(~gear+vs, data = mtcars)
> mytable
vs
gear 0 1
3 12 3
4 2 10
5 4 1
>
> prop.table(mytable, 2) #按列计算百分比
vs
gear 0 1
3 0.66666667 0.21428571
4 0.11111111 0.71428571
5 0.22222222 0.07142857
> addmargins(mytable, 2) #增加行和
vs
gear 0 1 Sum
3 12 3 15
4 2 10 12
5 4 1 5
>
> #使用CrossTable()创建二维列表
> # install.packages("gmodels")
> library(gmodels)
> CrossTable(mtcars$gear, mtcars$vs)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 32
| mtcars$vs
mtcars$gear | 0 | 1 | Row Total |
-------------|-----------|-----------|-----------|
3 | 12 | 3 | 15 |
| 1.504 | 1.934 | |
| 0.800 | 0.200 | 0.469 |
| 0.667 | 0.214 | |
| 0.375 | 0.094 | |
-------------|-----------|-----------|-----------|
4 | 2 | 10 | 12 |
| 3.343 | 4.298 | |
| 0.167 | 0.833 | 0.375 |
| 0.111 | 0.714 | |
| 0.062 | 0.312 | |
-------------|-----------|-----------|-----------|
5 | 4 | 1 | 5 |
| 0.501 | 0.645 | |
| 0.800 | 0.200 | 0.156 |
| 0.222 | 0.071 | |
| 0.125 | 0.031 | |
-------------|-----------|-----------|-----------|
Column Total | 18 | 14 | 32 |
| 0.562 | 0.438 | |
-------------|-----------|-----------|-----------|
“ 获取源代码请至公众号后台回复:20200524”
本文分享自微信公众号 - 数据驱动实践(Data-driven)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4600229/blog/4456367