2.1 n*m数据集
在n*m表格形式的数据集中,n代表数据的行,即观测点的数量;m代表列,即变量的数量;n*m为数据的维度。
一般来说,当拿到一份数据时,最先做的往往就是查看数据集的观测样本数、变量数,以及这些变量的实际含义,以此对数据集的庞大程度和各变量的相对重要性做到心中有数。这对选取何种数据挖掘算法,以及在这之前应该抽取多少及哪些变量及样本纳入建模都有重要的先导作用。
2.2 数据的分类
2.2.1 一般的数据分类
定量数据:连续型数据和离散型数据
定性数据:定类数据、定序数据、定距数据和定比数据,信息含量依次增加。
2.2.2 R的数据分类
numeric-数值型:定量变量
integer-整数型:仅含有整数
logical-逻辑型:TRUE和FALSE
character/string-字符型:每一个元素都是一个字符或者字符串,定类变量
factor-因子型:披着定量数据外壳的定性数据,即以数字代码形式表现的字符型数据,本质上也为定性数据。
> sex<-factor(c(1,1,0,0,1),levels=c(0,1),labels = c("male","female"))
> sex
[1] female female male male female
Levels: male female
levels和lables有对应关系。但当不对levels或lables进行设置时,各个字符的数字代码则按照字母表顺序从1开始依次取值。
> num<-factor(c("b","a","d","c"))
> as.numeric(num)
[1] 2 1 4 3
2.2.3 用R简单处理数据
1.基本信息
> install.packages("MASS")
> library(MASS) 加载含有数据集的软件包MASS
> data("Insurance") 获取数据集Insurance
> dim(Insurance) 获取数据集的维度
[1] 64 5
> dim(Insurance)[1] 红色部分可以表示数据框,包括两个元素。[]用来访问元素。
[1] 64
> dim(Insurance)[2]
[1] 5
> names(Insurance) 访问数据框的行名
[1] "District" "Group" "Age" "Holders" "Claims"
> head(names(Insurance),n=2) 访问前两个元素
[1] "District" "Group"
> tail(names(Insurance)) 默认访问后六个,但本来只有五个
[1] "District" "Group" "Age" "Holders" "Claims"
> tail(names(Insurance),n=3)
[1] "Age" "Holders" "Claims"
> head(Insurance$Age)
[1] <25 25-29 30-35 >35 <25 25-29
Levels: <25 < 25-29 < 30-35 < >35
2.变量类型
通过class函数可以对变量的类型进行识别。
levels可以看到因子型数据的各个水平值,并且可以对水平值进行修改。
数据类型的判断:is.numeric(),is.integer(),is.logical(),is.character(),is.factor()
强制数据类型转换:as.numeric(),as.integer(),as.logical(),as.character(),as.factor()
2.3 数据抽样及R实现
2.3.1 简单随机抽样
sample(x,size,replace=FALSE,prob=NULL)
x表示待抽取对象,一般以向量形式表示;
size为非负整数,表示想要抽取的样本个数;
replace表示是否为可放回抽样,默认为不放回;
pro用于设置各抽取样本的抽样概率,默认为无取值,即等概率抽样。
1.有放回的随机抽样(replace=TRUE)
2.无放回的随机抽样(replace=FALSE)
2.3.2 分层抽样
install.packages("sampling")
library(sampling) 需要加载这个包
strata(data,stratanames=NULL,size,method=c("srswor","srswr","poisson","systematic"),pik,description=FALSE)
data为待抽样数据集;
stratanames中放置进行分层所依据的变量名称;
size各层中将要抽出的观测样本数,顺序与数据集中该变量各水平出现顺序一致;注意:在使用该函数前,应该对数据集按变量进行升序排列;
method抽样方法,无放回、有放回、泊松、系统抽样;
pik用于设置各层中样本的抽样概率;
description用于选择是否输出含有各层基本信息额结果。
sub<-strata(Insurance,stratanames = "District",size=c(1,2,3,4),method = "systematic",pik = Insurance$Claims)
按照District进行分层, 每一层中抽取的元素个数为1、2、3、4,在每一层内元素抽取的概率与Claims一致,claims值越大,抽到的概率就越大。
getdata(Insurance,sub) 输出具体的数据信息
2.3.3 整群抽样
install.packages("sampling")
library(sampling) 需要加载这个包
cluster(data,clustername,size,method=c("srswor","srswr","possion","systemstic",pik,description=FALSE)
clustername指用来划分群的变量名称;
size指需要抽取的群数。
整群抽样一般要求各群对数据总体有较好的代表性,即群内各样本的差异要大,而群间的差异要小。
当群间差异较大时,整群抽样往往具有样本分布面不广、样本对总体代表性相对较差等缺点。
2.4 训练集与测试集
训练集用于建立模型,测试集用于评价模型。
一般控制训练集与测试集的比例为3:1左右,这是为了在保证建立模型的训练集样本足够的前提下,尽量使测试集的评价结果可信。
> train_sub<-sample(nrow(Insurance),3/4*nrow(Insurance)) 可以将红色部分理解为行号的一个向量
> train_data<-Insurance[train_sub,]
> test_data<-Insurance[-train_sub,]
> dim(train_data);dim(test_data)
[1] 48 5
[1] 16 5