游客满意度调数据(模拟数据,42变量,373条记录)
这是一个随机数模拟的数据,可以练习使用,但是分析结论同学不要太认真
(1)电子问卷
http://kaiwu.city/openfiles/tourist_satisfaction_questionnaire_cn.docx
(2)csv格式调研数据
http://kaiwu.city/openfiles/tourist.csv
(3)Excel格式调研数据
http://kaiwu.city/openfiles/tourist_cn.xlsx
(4)SPSS格式调研数据 http://kaiwu.city/openfiles/data_tourist_cn.sav
data preparation(数据准备)与data wrangling、data munging、data cleaning的含义非常接近 https://theappsolutions.com/blog/development/data-wrangling-guide-to-data-preparation/
Data Wrangling in R (1)Dplyr - essential data-munging R package. Supreme data framing tool. Especially useful for data management operating by categories. (2)Purrr - good for list function operations and error-checking. (3)Splitstackshape - an oldie but goldie. Good for shaping complex data sets and simplifying the visualization. (4)JSOnline - nice and easy parsing tool. (5)Magrittr - good for wrangling scattered sets and putting them into a more coherent form.
# 最为稳健的方法,检测是否安装,没有安装就安装
if(!isTRUE(require("Hmisc"))){install.packages("Hmisc")}
## Loading required package: Hmisc
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
##
## format.pval, units
#数据分析包
if(!isTRUE(require("psych"))){install.packages("psych")}
## Loading required package: psych
##
## Attaching package: 'psych'
## The following object is masked from 'package:Hmisc':
##
## describe
#数据分析包
if(!isTRUE(require("lavaan"))){install.packages("lavaan")} #结构方程分析
## Loading required package: lavaan
## This is lavaan 0.6-15
## lavaan is FREE software! Please report any bugs.
##
## Attaching package: 'lavaan'
## The following object is masked from 'package:psych':
##
## cor2cov
if(!isTRUE(require("broom"))){install.packages("broom")}# 分析结果整洁输出
## Loading required package: broom
if(!isTRUE(require("ggplot2"))){install.packages("ggplot2")}# 专业绘图,数据可视化
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
if(!isTRUE(require("ggrepel"))){install.packages("ggrepel")} # 绘图的标注(不遮挡)
## Loading required package: ggrepel
if(!isTRUE(require("corrplot"))){install.packages("corrplot")} #相关分析绘图
## Loading required package: corrplot
## corrplot 0.92 loaded
if(!isTRUE(require("semPlot"))){install.packages("semPlot")} #结构方程分析绘图
## Loading required package: semPlot
if(!isTRUE(require("leaflet"))){install.packages("leaflet")}# 地图绘制,基于openstreet数据
## Loading required package: leaflet
#library(Hmisc) #数据分析包
#library(psych) #数据分析包
#library(broom) # 分析结果整洁输出
#library(leaflet) # 地图绘制,基于openstreet数据
#library(ggplot2) #专业绘图
#library(ggrepel) # 绘图的标注(不遮挡)
#library(lavaan) #结构方程分析
#library(semPlot) #结构方程分析绘图
#library(corrplot)# 相关系数图
#设定工作文件夹, 根据自己电脑的情况进行修改
datafolder<-'D:/tdata/tourist_cn_R/'
#文件夹的设定,注意斜线的方向
#datafolder<-'D:\\tdata\\tourist_cn_R\\'
#数据可以通过网盘直链下载
# http://kaiwu.city/openfiles/tourist.csv
#373条记录(被调查者),42个变量
#数据下载后存入datafolder
数据可以通过网盘直链下载 http://kaiwu.city/openfiles/tourist.csv 373条记录(被调查者),42个变量 数据下载后存入datafolder
read.csv是常见的读入数据方法(csv格式,以逗号为分隔符的数据集)
tourist<-read.csv('http://kaiwu.city/openfiles/tourist.csv',header=TRUE,encoding = 'UTF-8')
#tourist<-read.csv(paste(datafolder,'tourist.csv',sep=""),header=TRUE,encoding = 'UTF-8')
#tourist<-read.csv('D:/tdata/tourist_cn_R/tourist.csv',header=TRUE,encoding = 'UTF-8')
#3种相同效果的文件名及路径
#第1种:'D:/pdata/rdata/tourist_cn/tourist.csv'
#第2种:paste(datafolder,'tourist.csv',sep="")
#第3种:paste0(datafolder,'tourist.csv')
#注意第3种paste0,最后1位是数字0,不是字母。
#header表示表头——数据中包含变量名的,header==TRUE,否则header==FALSE
#encoding = 'UTF-8'是csv文件的编码格式,UTF-8支持中文等多种格式,但是注意excel另存为csv时,默认是ANSI格式,需要注意设置一下。
#head 表示呈现前6行数据,tail显示后6行数据
head(tourist)
## sid gender byear region income expense type3 type2 thotel sat1 sat2 sat3
## 1 rec001 1 1971 1 2708 432 3 2 3 4 2 2
## 2 rec002 1 1995 1 1884 238 2 1 3 5 5 4
## 3 rec003 1 1990 2 2458 399 3 2 3 3 4 5
## 4 rec004 2 1970 2 2726 245 2 1 1 5 2 3
## 5 rec005 1 1964 4 3084 287 2 2 2 5 3 5
## 6 rec006 1 1965 5 2184 216 3 1 3 4 3 3
## sat4 sat5 sat6 ri1 ri2 ri3 ri4 ri5 rp1 rp2 rp3 rp4 rp5 te1 te2 te3 te4 te5
## 1 3 4 4 4 4 4 5 4 4 5 4 5 4 4 4 4 4 4
## 2 5 3 5 4 3 4 4 5 4 3 4 4 5 5 5 4 4 4
## 3 3 3 2 5 5 5 5 5 5 5 4 5 5 3 4 4 4 4
## 4 5 4 4 4 5 5 5 5 4 5 5 5 5 4 4 4 4 5
## 5 2 4 5 5 5 5 5 5 5 5 5 5 5 4 5 4 4 5
## 6 2 5 3 4 4 5 5 5 4 4 5 5 5 1 3 3 3 1
## te6 te7 te8 zh1 zh2 zh3 zh4 zh5 zh6 zh7 latitude longitude
## 1 4 4 4 3 1 1 2 3 2 2 31.24039 121.6653
## 2 5 3 4 4 4 5 3 5 5 5 31.20866 121.4604
## 3 4 4 4 1 1 2 2 1 3 1 31.10409 121.3958
## 4 4 2 4 3 3 3 3 2 2 2 31.06726 121.1696
## 5 5 4 5 1 1 1 4 2 1 1 31.17709 121.6795
## 6 1 3 2 4 3 3 4 2 4 4 31.18326 121.4021
#tail(tourist)
# 练习1 : 下载数据,试着用本地磁盘文件,修改datafolder目录,读入数据。
#tourist<-read.csv('http://kaiwu.city/openfiles/tourist.csv',header=TRUE,encoding = 'UTF-8')
#tourist<-read.csv(paste(datafolder,'tourist.csv',sep=""),header=TRUE,encoding = 'UTF-8')
SPSS格式数据下载网址 http://kaiwu.city/openfiles/data_tourist_cn.sav 注意要安装haven拓展功能包,才可以导入
#导入SPSS格式数据也可以,需要haven
#if(!isTRUE(require("haven"))){install.packages("haven")}
#tourist_spss<-read_sav(url("http://kaiwu.city/openfiles/data_tourist_cn.sav"))
#tourist_spss<-read_sav(paste0(datafolder,'data_tourist_satisfaction_cnlabels.sav'))
#head(tourist_spss)
#head(tourist_spss)
如果想直接导入excel格式数据(xls或xlsx),推荐使XLConnect XLConnect可以实现Excel与R的数据双向交互
连接汇报用的excel文件 参考博文 https://www.r-bloggers.com/2016/03/few-steps-to-connect-r-with-excel-xlconnect-2/ http://www.sthda.com/english/articles/2-r/4-xlconnect-read-write-and-manipulate-microsoft-excel-files-from-within-r/
#导入Excel格式数据也可以,需要readxl
#if(!isTRUE(require("readxl"))){install.packages("readxl")}
#tourist_excel<-read_excel(paste0(datafolder,"data_tourist_satisfaction_en.xlsx"),sheet="data")
#导入Excel格式数据也可以,需要openxlsx
#if(!isTRUE(require("openxlsx"))){install.packages("openxlsx")}
#tourist_excel<- read.xlsx("http://kaiwu.city/openfiles/tourist_cn.xlsx",sheet="data")
#tourist_excel<- read.xlsx(paste0(datafolder,"data_tourist_satisfaction_en.xlsx"),sheet="data")
#value labels变量值标签,参考电子问卷
# http://kaiwu.city/openfiles/tourist_satisfaction_questionnaire_cn.docx
#tourist是数据框dataframe的名字,gendr是变量的名字,tourist$gender就是调用tourist数据框的gender变量
#等同的效果是tourist[,"gender"]或tourist[,2]
#factor是R的一种数据形式,可以简单理解为分类变量,注意这个levels是可以有顺序的。
tourist$gender <- factor(tourist$gender,levels = c(1,2),labels = c("男","女"))
tourist$thotel <- factor(tourist$thotel,levels = c(1,2,3,4),labels = c("经济型酒店", "豪华型酒店", "民宿", "酒店式公寓"))
tourist$type3 <- factor(tourist$type3,levels = c(1,2,3),labels = c("自然风光", "历史文化", "自然与历史混合"))
tourist$type2 <- factor(tourist$type2,levels = c(1,2),labels = c("观赏型", "参与型"))
head(tourist)
## sid gender byear region income expense type3 type2 thotel
## 1 rec001 男 1971 1 2708 432 自然与历史混合 参与型 民宿
## 2 rec002 男 1995 1 1884 238 历史文化 观赏型 民宿
## 3 rec003 男 1990 2 2458 399 自然与历史混合 参与型 民宿
## 4 rec004 女 1970 2 2726 245 历史文化 观赏型 经济型酒店
## 5 rec005 男 1964 4 3084 287 历史文化 参与型 豪华型酒店
## 6 rec006 男 1965 5 2184 216 自然与历史混合 观赏型 民宿
## sat1 sat2 sat3 sat4 sat5 sat6 ri1 ri2 ri3 ri4 ri5 rp1 rp2 rp3 rp4 rp5 te1 te2
## 1 4 2 2 3 4 4 4 4 4 5 4 4 5 4 5 4 4 4
## 2 5 5 4 5 3 5 4 3 4 4 5 4 3 4 4 5 5 5
## 3 3 4 5 3 3 2 5 5 5 5 5 5 5 4 5 5 3 4
## 4 5 2 3 5 4 4 4 5 5 5 5 4 5 5 5 5 4 4
## 5 5 3 5 2 4 5 5 5 5 5 5 5 5 5 5 5 4 5
## 6 4 3 3 2 5 3 4 4 5 5 5 4 4 5 5 5 1 3
## te3 te4 te5 te6 te7 te8 zh1 zh2 zh3 zh4 zh5 zh6 zh7 latitude longitude
## 1 4 4 4 4 4 4 3 1 1 2 3 2 2 31.24039 121.6653
## 2 4 4 4 5 3 4 4 4 5 3 5 5 5 31.20866 121.4604
## 3 4 4 4 4 4 4 1 1 2 2 1 3 1 31.10409 121.3958
## 4 4 4 5 4 2 4 3 3 3 3 2 2 2 31.06726 121.1696
## 5 4 4 5 5 4 5 1 1 1 4 2 1 1 31.17709 121.6795
## 6 3 3 1 1 3 2 4 3 3 4 2 4 4 31.18326 121.4021
##### 练习2
##### region(区域)变量的变量值标签。
##### 1 2 3 4 5 6 7
##### 华中 华东 华北 东北 西北 西南 华西
##### 练习2的答案
tourist$region <- factor(tourist$region,levels = c(1,2,3,4,5,6,7),labels = c('华中', '华东', '华北', '东北', '西北', '西南', '华西'))
head(tourist)
## sid gender byear region income expense type3 type2 thotel
## 1 rec001 男 1971 华中 2708 432 自然与历史混合 参与型 民宿
## 2 rec002 男 1995 华中 1884 238 历史文化 观赏型 民宿
## 3 rec003 男 1990 华东 2458 399 自然与历史混合 参与型 民宿
## 4 rec004 女 1970 华东 2726 245 历史文化 观赏型 经济型酒店
## 5 rec005 男 1964 东北 3084 287 历史文化 参与型 豪华型酒店
## 6 rec006 男 1965 西北 2184 216 自然与历史混合 观赏型 民宿
## sat1 sat2 sat3 sat4 sat5 sat6 ri1 ri2 ri3 ri4 ri5 rp1 rp2 rp3 rp4 rp5 te1 te2
## 1 4 2 2 3 4 4 4 4 4 5 4 4 5 4 5 4 4 4
## 2 5 5 4 5 3 5 4 3 4 4 5 4 3 4 4 5 5 5
## 3 3 4 5 3 3 2 5 5 5 5 5 5 5 4 5 5 3 4
## 4 5 2 3 5 4 4 4 5 5 5 5 4 5 5 5 5 4 4
## 5 5 3 5 2 4 5 5 5 5 5 5 5 5 5 5 5 4 5
## 6 4 3 3 2 5 3 4 4 5 5 5 4 4 5 5 5 1 3
## te3 te4 te5 te6 te7 te8 zh1 zh2 zh3 zh4 zh5 zh6 zh7 latitude longitude
## 1 4 4 4 4 4 4 3 1 1 2 3 2 2 31.24039 121.6653
## 2 4 4 4 5 3 4 4 4 5 3 5 5 5 31.20866 121.4604
## 3 4 4 4 4 4 4 1 1 2 2 1 3 1 31.10409 121.3958
## 4 4 4 5 4 2 4 3 3 3 3 2 2 2 31.06726 121.1696
## 5 4 4 5 5 4 5 1 1 1 4 2 1 1 31.17709 121.6795
## 6 3 3 1 1 3 2 4 3 3 4 2 4 4 31.18326 121.4021
计算变量,compute variables与recode是两个思路,但是有时可以互相替换。
#计算总体满意度sat
tourist<-transform(tourist,sat=(sat1+sat2+sat3+sat4+sat5+sat6)/6)
summary(tourist$sat)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.667 3.667 4.000 3.994 4.333 5.000
#compute variables
# 练习3 : 基于byear(出生年份),计算age变量(年龄)。
# 2022- byear
#练习3答案
#练习3 : 基于byear(出生年份),计算age变量(年龄)。
# 方案1:transform
tourist<-transform(tourist,age=2023-byear)
# 方案2:直接计算
# tourist$age<-2022-tourist$byear
summary(tourist$age)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 30.00 45.00 44.12 58.00 71.00
attach和detach配合,可以减少tourist$的使用 []里面是条件
# recode 重新编码:income3收入段变量——分3段
attach(tourist)
tourist$income3[income < 2000] <- 1
tourist$income3[income >= 2000 & income <3000] <- 2
tourist$income3[income >= 3000] <- 3
detach(tourist)
# 加变量值标签
tourist$income3 <- factor(tourist$income3,levels = c(1,2,3),labels = c("2000以下", "2000-3000", "3000以上"))
summary(tourist$income3)
## 2000以下 2000-3000 3000以上
## 76 191 106
#compute variables
# 练习4 : 把收入变量income分为5段,2000以下,2000-2499,2500-2999,3000-3499,3500以上
# 练习4答案
# 练习4 : 把收入变量income分为5段,2000以下,2000-2499,2500-2999,3000-3499,3500以上
attach(tourist)
tourist$income5[income < 2000] <- 1
tourist$income5[income >= 2000 & income <2500] <- 2
tourist$income5[income >= 2500 & income <3000] <- 3
tourist$income5[income >= 3000 & income <3500] <- 4
tourist$income5[income >= 3500] <- 5
detach(tourist)
# 加变量值标签
tourist$income5 <- factor(tourist$income5,levels = c(1,2,3,4,5),labels = c("2000以下", "2000-2499","2500-2999","3000-3499", "3500以上"))
summary(tourist$income5)
## 2000以下 2000-2499 2500-2999 3000-3499 3500以上
## 76 80 111 72 34
# recode 重新编码:旅游花费变量——分3段
attach(tourist)
tourist$expense3[expense < 300] <- 1
tourist$expense3[expense >= 300 & expense < 400] <- 2
tourist$expense3[expense > 400] <- 3
detach(tourist)
# 加变量值标签
tourist$expense3 <- factor(tourist$expense3,levels = c(1,2,3),labels = c("300以下", "300-399", "400以上"))
summary(tourist$expense3)
## 300以下 300-399 400以上
## 152 144 77
快速浏览、汇总(最大值、最小值、数据类型、变量值标签) 有利于发现异常值
summary(tourist)
## sid gender byear region income
## Length:373 男:214 Min. :1952 华中:62 Min. :1133
## Class :character 女:159 1st Qu.:1965 华东:60 1st Qu.:2121
## Mode :character Median :1978 华北:62 Median :2654
## Mean :1979 东北:45 Mean :2590
## 3rd Qu.:1993 西北:48 3rd Qu.:3084
## Max. :2005 西南:57 Max. :3773
## 华西:39
## expense type3 type2 thotel
## Min. :199.0 自然风光 : 58 观赏型:178 经济型酒店:163
## 1st Qu.:262.0 历史文化 :132 参与型:195 豪华型酒店: 35
## Median :326.0 自然与历史混合:183 民宿 :121
## Mean :330.6 酒店式公寓: 54
## 3rd Qu.:391.0
## Max. :556.0
##
## sat1 sat2 sat3 sat4
## Min. :3.000 Min. :2.000 Min. :1.000 Min. :2.000
## 1st Qu.:4.000 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:4.000
## Median :5.000 Median :4.000 Median :4.000 Median :4.000
## Mean :4.349 Mean :3.743 Mean :3.676 Mean :4.214
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## sat5 sat6 ri1 ri2
## Min. :3.000 Min. :2.000 Min. :3.000 Min. :3.000
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:4.000 1st Qu.:4.000
## Median :4.000 Median :4.000 Median :4.000 Median :5.000
## Mean :4.097 Mean :3.887 Mean :4.351 Mean :4.491
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## ri3 ri4 ri5 rp1
## Min. :3.000 Min. :3.000 Min. :3.000 Min. :3.000
## 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:4.000
## Median :5.000 Median :5.000 Median :5.000 Median :4.000
## Mean :4.499 Mean :4.708 Mean :4.727 Mean :4.316
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## rp2 rp3 rp4 rp5
## Min. :3.000 Min. :2.000 Min. :3.000 Min. :3.000
## 1st Qu.:4.000 1st Qu.:4.000 1st Qu.:5.000 1st Qu.:4.000
## Median :5.000 Median :5.000 Median :5.000 Median :5.000
## Mean :4.515 Mean :4.383 Mean :4.721 Mean :4.643
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## te1 te2 te3 te4
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:3.000 1st Qu.:4.000 1st Qu.:4.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :3.912 Mean :3.791 Mean :4.131 Mean :4.078
## 3rd Qu.:5.000 3rd Qu.:4.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## te5 te6 te7 te8
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000 1st Qu.:3.000
## Median :4.000 Median :4.000 Median :4.000 Median :4.000
## Mean :3.756 Mean :3.898 Mean :3.729 Mean :3.657
## 3rd Qu.:4.000 3rd Qu.:5.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## zh1 zh2 zh3 zh4
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1.000
## Median :3.000 Median :3.000 Median :3.000 Median :2.000
## Mean :2.836 Mean :2.627 Mean :2.702 Mean :2.552
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
##
## zh5 zh6 zh7 latitude
## Min. :1.000 Min. :1.000 Min. :1.000