大家好,欢迎来到IT知识分享网。
 
文章目录
什么是数据分析
 • 访问数据(从多个来源将数据导入应用程序)
 • 清理数据(编码缺失数据,修复或删除错误编码的数据,将变量转换为更有用的格式)
 • 注释数据(为了记住每个部分代表的含义)
 • 总结数据(获取描述性统计信息来帮助表征数据)
 • 可视化数据(因为一张图片确实胜过千言万语)
 • 建模数据(发现关系和测试假设)
 • 准备结果(创建出版质量的表格和图形)
一、质量分析
1.有问题的数据类型
缺失值、异常值、重复数据、不一致数据、偏倚值等
2.缺失值处理
- is.na():指明哪里有缺失值,在缺失值的位置标为TRUE
 
> mydata <- data.frame(col1 = c(1,2,NA,4,5), + col2 = c("a",NA,NA,"d","e"), + col3 = c(TRUE,FALSE,FALSE,TRUE,TRUE)) > is.na(mydata) col1 col2 col3 [1,] FALSE FALSE FALSE [2,] FALSE TRUE FALSE [3,] TRUE TRUE FALSE [4,] FALSE FALSE FALSE [5,] FALSE FALSE FALSE 
- complete.cases():判断每一行有没有缺失值,如果没有就是TRUE
 
> complete.cases(mydata) [1] TRUE FALSE FALSE TRUE TRUE 
- mydata[complete.cases(mydata),]:取出没有缺失值的行
 
> mydata[complete.cases(mydata),] col1 col2 col3 1 1 a TRUE 4 4 d TRUE 5 5 e TRUE > mydata[!complete.cases(mydata),] col1 col2 col3 2 2 <NA> FALSE 3 NA <NA> FALSE 
3.异常值处理
- 最小值、最大值
min、max函数 - 箱线图
 
> x<-c(0:100,-100,200) > boxplot(x) > outliers<-boxplot(x)$out > outliers [1] -100 200 
二、特征分析
1.描述型统计量
获取描述型统计量的方法
- summary函数
根据输入对象的类型生成相应的摘要统计信息,包括最小值、最大值、中位数、四分位数、因子变量的水平等等。
对于数值型数据,summary 函数会给出以下统计信息:
·最小值(Minimum)
·第一四分位数(1st Quartile)
·中位数(Median)
·平均值(Mean)
·第三四分位数(3rd Quartile)
·最大值(Maximum)
对于因子(factor)型数据,summary 函数会给出因子水平(factor levels)及各水平对应的频数。 
> myvars <- c("mpg", "hp", "wt") > summary(mtcars[myvars])#对上述三个属性分别进行summary分析 mpg hp wt Min. :10.40 Min. : 52.0 Min. :1.513 1st Qu.:15.43 1st Qu.: 96.5 1st Qu.:2.581 Median :19.20 Median :123.0 Median :3.325 Mean :20.09 Mean :146.7 Mean :3.217 3rd Qu.:22.80 3rd Qu.:180.0 3rd Qu.:3.610 Max. :33.90 Max. :335.0 Max. :5.424 
- describe函数
 
- 其他函数
 
2.可视化结果
- 直方图(Histogram):主要用于显示连续变量的分布情况,可以观察数据的分布形状、中心位置、离散程度等特征,以及是否存在异常值或峰态。
 - 密度图(Density Plot):也适用于连续变量,但更加平滑地展示了数据的分布情况,可以更清晰地观察数据的概率密度分布,并进行比较。
 - 箱线图(Box Plot):主要用于显示数值型变量的分布和离散程度,可以观察数据的中位数、四分位数、异常值等,帮助发现数据的集中趋势和离散程度。
 - 点图(Dot Plot):适用于显示分类变量的分布情况,可以观察不同类别之间的差异,特别是在数据点较少的情况下,点图可以更直观地展示数据的分布情况。
 
三、数据预处理
1.数据清洗
处理缺失值、异常值和重复值等数据质量问题,确保数据的完整性和准确性。
步骤1:处理缺失值
方法1:删除
 样本量很大或缺失值较少时,可以采用删除缺失值的方法。
> mydata <- data.frame(col1 = c(1,2,NA,4,5), + col2 = c("a",NA,NA,"d","e"), + col3 = c(TRUE,FALSE,FALSE,TRUE,TRUE)) > newdata <- na.omit(mydata) > newdata col1 col2 col3 1 1 a TRUE 4 4 d TRUE 5 5 e TRUE > newdata <- mydata[complete.cases(mydata), ] > newdata col1 col2 col3 1 1 a TRUE 4 4 d TRUE 5 5 e TRUE 
方法2:填补
 数值型数据:用当前样本的均值来填补。
> mydata1 <- mydata[complete.cases(mydata$col1), ]#取出第1列所有的非缺失值 > mydata2 <- mydata[!complete.cases(mydata$col1), ]#取出第1列所有的缺失值 > aver_col1 <- mean(mydata1$col1)#计算第1列非缺失值的均值 > mydata2$col1 <- rep(aver_col1, nrow(mydata2))#把均值填到缺失值的位置上,重复次数就是缺失值的个数 > mydata_filled <- rbind(mydata1, mydata2)#把填充好的两部分重新合在一起(位置改变) > mydata_filled col1 col2 col3 1 1 a TRUE 2 2 <NA> FALSE 4 4 d TRUE 5 5 e TRUE 3 3 <NA> FALSE 
非数值型数据:用当前样本的众数填补。(自己定义一个众数函数)
> mode_function <- function(x) { 
      + unique_x <- unique(x)#获取唯一值(重复的只留一个) + unique_x[which.max(tabulate(match(x, unique_x)))] + #match函数用于在一个向量中查找另一个向量的元素,并返回第一个向量中每个元素在第二个向量中的位置,这里表示返回原始数组对应的每个唯一值的位置 + #tabulate函数用于统计整数向量中各个整数出现的次数,并返回一个与整数向量长度相同的向量,其中每个元素表示对应整数在原始向量中出现的次数。 + #which.max函数用于找出向量或数组中的最大值所在的位置(索引) + } > mode_column3 <- mode_function(mydata$col3) > mode_column3 [1] TRUE 
方法3:回归插补
 lm 函数用于拟合线性模型。其基本用法是将待拟合的模型表示为一个公式,然后将该公式作为参数传递给 lm 函数,同时指定数据集。
x <- c(1, 2, 3, 4, 5) y <- c(2, 3, 4, 5, 6) my_data <- data.frame(x, y) # 拟合简单线性回归模型 model <- lm(y ~ x, data = my_data) # 查看模型摘要 summary(model) 
方法4:多重插补
 用mice包实现,步骤:
library(mice) imp <- mice(data, m)#data是包含缺失值的矩阵或数据框,m表示被插补的数据集个数,即用m种方式进行插补 fit <- with(imp, analysis)#对每个数据集应用模型analysis pooled <- pool(fit)#把m个统计结果合在一起 summary(pooled) 
步骤2:处理异常值
2.数据集成
rbind(dataframeA, dataframeB): join two datasets vertically cbind(dataframeA, dataframeB): join two datasets horizontally 
方法2:merge函数
merge(dataframeA, dataframeB, by=“keywords") 
3.数据转换
四、抽样
抽样是在分析和建模过程中,选择总体的一个子集来代表整个总体的过程。
 • 训练集是提供给模型构建算法的数据,以便算法能够设置正确的参数,最好地预测结果变量。
 • 测试集是输入到最终模型中的数据,用于验证模型的预测是否准确。
注意:不能只划分一次训练集和测试集,而是多次划分,求平均值(增加稳定性)!
抽样方法1
id <- sample(1:nrow(data), round(0.2*nrow(data)), replace=FALSE) testSet <- data[id,] trainingSet <- data[-id,] 
抽样方法2(这种更便于debug)
data$gp <- runif(nrow(data)) testSet <- subset(data, data$gp <= 0.2) trainingSet <- subset(data, data$gp > 0.2) 
                                                        免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120751.html
                


