用R语言对SPSS第4章数码产品顾客购买习惯调查问卷进行描述性统计分析

浏览: 1422
  • 读取SPSS数据文件

library(foreign)

>digitaldata<-read.spss("digital pruchase.sav",use.value.labels = TRUE,to.data.frame = TRUE)

>str(digitaldata)#读取的数据是未经处理的原始数据,需要进行数据清理

'data.frame':	24938 obs. of  22 variables:
$ ID : Factor w/ 24936 levels "0010018239","0010417158",..: 1 2 3 4 5 6 8 9 10 11 ...
$ gender: atomic 1 2 1 2 1 2 1 1 1 2 ...
..- attr(*, "value.labels")= Named num 2 1
.. ..- attr(*, "names")= chr "女" "男"
$ age : Factor w/ 12 levels "10岁以下","10-14岁",..: 4 4 7 12 4 6 8 8 11 5 ...
$ edu : Factor w/ 4 levels "高中-中专及以下",..: 1 2 2 3 2 3 3 2 1 1 ...
$ B1_1 : Factor w/ 2 levels "无","有": 1 1 2 1 1 1 2 2 1 2 ...
$ B1_2 : Factor w/ 2 levels "无","有": 2 2 2 2 2 2 2 2 2 2 ...
$ B1_3 : Factor w/ 2 levels "无","有": 2 2 1 1 2 2 1 2 1 2 ...
$ B1_4 : Factor w/ 2 levels "无","有": 1 1 2 1 1 2 1 1 1 1 ...
$ B1_5 : Factor w/ 2 levels "无","有": 1 2 2 2 1 2 1 2 2 1 ...
$ B1_6 : Factor w/ 2 levels "无","有": 2 2 2 1 2 2 1 2 1 1 ...
$ B1_7 : Factor w/ 2 levels "无","有": 1 2 2 1 2 2 1 1 1 1 ...
$ B1_8 : Factor w/ 2 levels "无","有": 1 1 1 1 1 1 1 1 1 1 ...
$ B2_1 : Factor w/ 8 levels "笔记本电脑","台式电脑",..: 1 1 1 1 2 1 5 1 2 2 ...
$ B2_2 : Factor w/ 8 levels "笔记本电脑","台式电脑",..: 3 6 2 6 4 5 6 2 4 7 ...
$ B2_3 : Factor w/ 8 levels "笔记本电脑","台式电脑",..: 5 NA 7 NA 6 6 7 4 NA NA ...
$ B3 : Factor w/ 2 levels "否","是": 2 2 1 1 1 1 2 1 1 2 ...
$ B4 : Factor w/ 13 levels "100元以下","100-199元",..: 6 13 NA NA NA NA 7 NA NA 7 ...
$ B5_1 : Factor w/ 2 levels "否","是": 1 2 NA NA NA NA 2 NA NA 1 ...
$ B5_2 : Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_3 : Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_4 : Factor w/ 2 levels "否","是": 2 1 NA NA NA NA 1 NA NA 2 ...
$ B5_5 : Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
- attr(*, "variable.labels")= Named chr "" "性别" "年龄分段" "教育程度" ...
..- attr(*, "names")= chr "ID" "gender" "age" "edu" ...
- attr(*, "codepage")= int 936

#说明:

#1、读取进来的数据共24983条记录,22个变量,其中gender没有定义属性(未定义的变量在进行函数分析时会默认为数值型变量),其余变量全部为因子变量,最好将客户ID改为数值型变量

 #2、B1是多选题,题目为:目前已经拥有的数码产品有哪些?包含8个选项。

 #3、B2是多选题,题目为:未来优先打算购买的数码产品有哪些?包含8个选项,最多选3个。

 #4、B3是单选题,题目为:是否有过网购经历?包含是/否2个选项。

 #5、B4是单选题,题目为:平均每月网购消费金额大致是多少?包含13个选项。

 #6、B5是多选题,题目为:网购支付方式有哪些?包含5个选项。

>summary(digitaldata[,c("ID","gender","age","edu","B3","B4")])#对单选题因子变量进行汇总,但是最多显示6个数据的详细信息,超过用other显示

          ID            gender           age                    edu         B3                      B4      
0019010926: 2 Min. :1.000 25-29岁:6239 高中-中专及以下: 4210 否: 9021 100-199元 :2597
0101264331: 2 1st Qu.:1.000 30-34岁:4872 大学专科 : 7241 是:15917 200-349元 :2566
0010018239: 1 Median :1.000 20-24岁:4458 大学本科 :11464 350-499元 :2288
0010417158: 1 Mean :1.311 35-39岁:3460 硕士及以上 : 2023 500-749元 :1946
0010822924: 1 3rd Qu.:2.000 40-44岁:2659 不清楚-难以回答:1464
0013747185: 1 Max. :7.000 45-49岁:1552 (Other) :5058
(Other) :24930 (Other):1698 NA's :9019

>sapply(digitaldata[,c("gender","age","edu","B3","B4")],table)#给出因子变量的具体频数统计

$gender
1 2 3 7
17197 7739 1 1
$age
10岁以下 10-14岁 15-19岁 20-24岁 25-29岁 30-34岁 35-39岁 40-44岁 45-49岁 50-54岁 55-59岁 60岁以上
0 0 418 4458 6239 4872 3460 2659 1552 545 396 339
$edu
高中-中专及以下 大学专科 大学本科 硕士及以上
4210 7241 11464 2023
$B3
否 是
9021 15917
$B4
100元以下 100-199元 200-349元 350-499元 500-749元 750-999元 1000-1199元
1431 2597 2566 2288 1946 992 1091
1200-1499元 1500-1999元 2000-2999元 3000-4999元 5000元及以上 不清楚-难以回答
352 421 453 187 131 1464

#结合summary和str函数解释:

#对ID的汇总显示有两个重复变量

#gender中除了1,2还有3和7这2个异常值,其含义表示缺失值,,需赋值处理

#age中14岁以下的人数为0,

  • 变量属性转换

>digitaldata$ID<-as.character(digitaldata$ID)

>digitaldata$gender<-factor(digitaldata$gender,levels = c(1,2),labels = c("男","女"))#转变为因子时,没有被水平的值自动转化为NA,从数据框表中看到性别里有2个异常值,3和7经转化后均变成NA了。

  • 删除重复个案

>digitaldata<-digitaldata[!duplicated(digitaldata$ID),]#duplicated()针对向量来查找的,可删除重复观测。

>digitaldata[duplicated(digitaldata$ID),]#结果表明ID无重复值了。

[1] ID     gender age    edu    B1_1   B1_2   B1_3   B1_4   B1_5  
[10] B1_6 B1_7 B1_8 B2_1 B2_2 B2_3 B3 B4 B5_1
[19] B5_2 B5_3 B5_4 B5_5
<0 行> (或0-长度的row.names)
  • 查看并删除缺失值

>par(mfrow=c(1,1))

>library(VIM)

>aggr(digitaldata,prop=FALSE,numbers=TRUE)


5$DRT6HU~UR6%0F[16NRESF.png

#说明:

#age的两个异常值已转化为缺失值

#B3除是和否两个元素外,无缺失值

#B4和B5_1~B5_5均存在缺失值,表明B3有部分元素为否。

#删除性别缺失值的行

>digitaldata<-digitaldata[!is.na(digitaldata$gender),]

  • 逻辑校验

#B3为否时,B4和B5_1~B5_5应该都为空。

>table(digitaldata$B4,digitaldata$B3)

                 
否 是
100元以下 0 1431
100-199元 0 2597
200-349元 1 2565
350-499元 0 2288
500-749元 1 1945
750-999元 0 992
1000-1199元 0 1091
1200-1499元 0 352
1500-1999元 0 421
2000-2999元 0 453
3000-4999元 0 187
5000元及以上 0 131
不清楚-难以回答 0 1464

>multi<-digitaldata[,c("ID","B3","B5_1","B5_2","B5_3","B5_4","B5_5")]

>head(multi)

          ID B3 B5_1 B5_2 B5_3 B5_4 B5_5
1 0010018239 是 否 否 否 是 否
2 0010417158 是 是 否 否 否 否
3 0010822924 否 <NA> <NA> <NA> <NA> <NA>
4 0013747185 否 <NA> <NA> <NA> <NA> <NA>
5 0013941171 否 <NA> <NA> <NA> <NA> <NA>
6 0014517331 否 <NA> <NA> <NA> <NA> <NA>

>str(multi)

'data.frame':	24936 obs. of  7 variables:
$ ID : Factor w/ 24936 levels "0010018239","0010417158",..: 1 2 3 4 5 6 8 9 10 11 ...
$ B3 : Factor w/ 2 levels "否","是": 2 2 1 1 1 1 2 1 1 2 ...
$ B5_1: Factor w/ 2 levels "否","是": 1 2 NA NA NA NA 2 NA NA 1 ...
$ B5_2: Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_3: Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...
$ B5_4: Factor w/ 2 levels "否","是": 2 1 NA NA NA NA 1 NA NA 2 ...
$ B5_5: Factor w/ 2 levels "否","是": 1 1 NA NA NA NA 1 NA NA 1 ...

>library(reshape)

>multimelt<-melt(multi,id.vars=c("ID","B3"),measure.vars=c("B5_1","B5_2","B5_3","B5_4","B5_5"))

>head(multimelt,10)

           ID B3 variable value
1 0010018239 是 B5_1 否
2 0010417158 是 B5_1 是
3 0010822924 否 B5_1 <NA>
4 0013747185 否 B5_1 <NA>
5 0013941171 否 B5_1 <NA>
6 0014517331 否 B5_1 <NA>
7 0019817323 是 B5_1 是
8 0021728957 否 B5_1 <NA>
9 0021876209 否 B5_1 <NA>
10 0023417676 是 B5_1 否

>multiagre<-cast(multimelt,variable+value~B3)

>multiagre[order(multiagre$value),]

   B3 variable    否    是   NA
1 否 B5_1 1 0 9018
2 否 B5_2 0 2 9017
3 否 B5_3 1 0 9018
4 否 B5_4 0 1 9018
5 否 B5_5 1 0 9018
6 是 B5_1 5729 10188 0
7 是 B5_2 4420 11497 0
8 是 B5_3 11882 4035 0
9 是 B5_4 10644 5273 0
10 是 B5_5 15658 259 0

#删除逻辑错误观测值

>digitaldata<-digitaldata[!(digitaldata$B3=="否"&(!is.na(digitaldata$B4) |!is.na(digitaldata$B5_1) |!is.na(digitaldata$B5_2)| !is.na(digitaldata$B5_3)| !is.na(digitaldata$B5_4)|!is.na(digitaldata$B5_5))),]

  • 业务分析

#性别与网购经历以及网购支付方式的交叉表及独立性检验

>gender_B3<-table(digitaldata$B3,digitaldata$gender)

>chisq.test(gender_B3)

	Pearson's Chi-squared test with Yates' continuity correction

data: gender_B3
X-squared = 536.4, df = 1, p-value < 2.2e-16

#网购支付方式是多选题,如何进行交叉表的独立性检验

推荐 0
本文由 人和六栋 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册