本文首发在陈锐博客(7988888.xyz),此文章中所有链接均通过博客进行访问。
本文学习主要为打卡内容使用,非教程。
内容来源:本学习教程主要参考来源网址:https://rlearning.netlify.app/
辅助视频教程:B站:https://www.bilibili.com/video/BV19x411X7C6?p=24

本学习内容课程大纲

Task00:熟悉规则与R语言入门(1天)
  • 安装
  • 环境配置
Task01 数据结构与数据集 (3天)
  • 编码基础
  • 数据类型
  • 特殊数据类型
  • table like 数据类型
  • 加载数据 (csv, rds, excel, Rdata)
  • 实例
Task02 数据清洗与准备 (3天)
  • 重复值处理
  • 缺失值识别与处理
  • 异常值识别与处理
  • 特征处理
  • 规范化与偏态数据
Task03 基本统计分析 (3天)
  • 多种方法获取描述性统计量
  • 分组计算描述性统计
  • 频数表和列联表
  • 相关
  • 方差分析
Task04 数据可视化(3天)
  • ggplot2包介绍
  • 散点图
  • 直方图
  • 柱状图
  • 饼状图
  • 折线图
  • ggplot2扩展包主题
Task05 模型(3天)
  • 回归模型
  • 分类模型
本次学习根据课程大纲安排,将在2021年8月16日-2021年8月31日完成学习

Task00 R/Rstudio的安装

R语言下载网址:https://cloud.r-project.org/,R 语言是一门用于统计计算与绘图的编程语言和开源软件
RStudio下载网址:https://www.rstudio.com/products/rstudio/ 它包括一个控制台、语法突出显示的编辑器、直接执行代码的支持,以及用于绘图、历史记录、调试和工作区管理的工具。
对于安装过程,可百度进行。
在console窗口中可查询包的用法信息,通过输入首字母然后可通过键盘按键Tab进行补全包的名称。
可通过在Console输入getwd()函数来获取当前工作路径
右下角图展示的当前项目中的文件数据等
调整写代码的颜色主题:
Global Options-Appearance-RStudio Theme
快捷按键:
window:
control  + 🔼  可一次性查询历史记录
alt+shift+k
MacOS:
Command + 🔼 可一次性查询历史记录
option+shift+k 查询所有快捷操作
ESC中断语句进行
cltr + L清除console中的记录
切换镜像源:
由于网速慢的原因,有时安装包会安装失败。
通过将包安装切换至中国镜像来解决:点【Tools】→【Global Options...】→【Packages】→【Change...】→【选中一个中国镜像】→【OK】→【OK】。如下图,以后安装包都会通过这个镜像。
R包的安装:
在选中合适的镜像源后,可在console窗口,输入命令
在线安装:
install.packages("包名称")
离线安装:
下载好安装文件后,通过packages-install-选择安装路径
查看已安装的全部R包:
.packages(all.available=T)
查看单独的包:
library("包名")

Task01 数据结构与数据集

Getwd()获取路径
在 R Studio 中可以使用快捷键
window:
Alt + -来输入<-
Mac:
option + -来输入<-
在R语言中的基础运算符号过程
赋值:
在 R 中基础赋值的符号有三种:
  1. 一个向左的箭头<-表示将箭头右方的值取名叫做箭头左侧的名字,或者将箭头右侧的值存储在箭头左侧的名字里;
  2. 一个向右的箭头->表示将箭头左侧的值储存在箭头右侧的名字里;
  3. 一个等号=表示将箭头右侧的值存储在箭头左侧的名字里。
x<-1
y<-2
x+y
函数:其实就是某些功能的赋值,比如addone此时就是函数
addone<-function(x=0) {
x+1
}
loop循环:
R 中的循环函数包括forwhile,和repeat
for用法:
for (variableinvector) {

}
在console窗口输入?for即可查找相关用法,或在help栏中输入也可
此处R中的loop用法跟Python中的很像,主要是条件的判断。
管道pipe:说起来就是简化函数的定义,能更方便的修改和识别函数。
可以参考此篇文章的解答:https://zhuanlan.zhihu.com/p/43423747https://zhuanlan.zhihu.com/p/339107871
数据类型:
在R中有五种基础数据类型,包括三个数值型、一个逻辑型和一个字符型。
数值型数据包括三种,分别是默认的实数数值型数据(double)、整数类型(integer)和复数类型(complex):
#numeric
a<-1000.111
#integer
b<-1000
#complex
c<-2+3i
判断数值类型:
typeof()
逻辑型(logical)数据只包括两个值,TRUET) 和 FALSEF):
字符型数据(character)可以总结为“任何带引号的值”。在Python中表示未字符串类型string
向量vector,向量是由一组相同类型的值组成的一维序列。vec_num <- c(1, 2, 3),在向量中可使用summean等函数进行计算。sum(vec_num) = 6
因子(factor),可以使用函数factorc组合来创建。它与字符向量的主要区别在于因子向量的独特值(levels)是有限个数的。
数值类型转换:
按照自由程度将已经提到的几种向量以从高到低的排序可得
字符>数值>逻辑
在数值型内的排序从自由度高到低为
复数>实数>整数
三种截取子集的符号:[[[$(其中$不能用在基础向量上)
特殊数据类型
日期:处理的包(lubridata
时间序列time series,首先要确保安装了forecast包
library(forecast)
gas%>%
auto.arima() %>%
forecast(36) %>%
autoplot()
矩阵(matrix)
在R里,矩阵是一个按照长方阵列排列的、有着固定行数和列数的、包含同一类型数据的集合。可使用函数matrix
对于一个矩阵来说,主要的命名集中于行名rownames和列名colnames
列表(list)
它和向量或者矩阵不一样,在一个列表中可以储存各种不同的基本数据类型。你既可以存三个数字,也可以把数值型、字符型、逻辑型混合
数据表(data frame与tibble)
一个数据表(data frame)的本质是一个列表(list)
内置数据集
使用data命令来查看、使用可用数据集
读取数据文件
# 读取csv文件
library(readr)
h1n1_flu<-read_csv("h1n1_flu.csv")
# 保存csv文件
write_csv(h1n1_flu, "h1n1_flu.csv")
R也可以直接读取其他软件的数据类型。这里列举使用haven包读写 SPSS 的 sav 和 zsav、 Stata 的 dta、SAS 的 sas7bdat 和 sas7bcat。
library(haven)
#SPSS
read_spss()
write_spss()
对于函数的介绍,可参考文章《R语言函数总结》
练习题
Task02 数据清洗与准备
这一章节有点难,需要花时间来琢磨。主要是对包的加载和使用其中的函数不了解。
环境配置(包加载)
数据集1:加载数据(本地文件h1n1_flu.csv)和查看部分数据(从33个特征中筛选出10个特征用于后续处理)
h1n1_data<-read.csv("h1n1_flu.csv",header=TRUE)
dim(h1n1_data)
h1n1_data<-h1n1_data[, c(1, 3, 11, 12, 15, 16, 19, 20, 22, 23, 33)]
head(h1n1_data)
数据集2:波士顿房价数据集(mlbench包中)(13个特征+1个预测字段)
data(BostonHousing)
dim(BostonHousing)
head(BostonHousing)
重复值处理
unique()函数可以对数据进行整体去重,distinct()函数可以针对某些列去重。
# 整体去重
h1n1_data_de_dup1<-unique(h1n1_data)

# 指定根据列respondent_id,h1n1_knowledge去重,并保留所有列
h1n1_data_de_dup2<-distinct(h1n1_data, respondent_id, h1n1_knowledge, .keep_all=T)
缺失值识别和处理
常用方法:
在R语言中,惯用会把缺失值表示为NA,一般可使用is.na(a)!complete.cases(a)来识别a是否为缺失值
# 假设定义的一个变量中存在缺失值
y<-c(1, 2, 3, NA)

# 用is.na在识别是否为缺失值
is.na(y)

# 用!complete.cases()在识别是否为缺失值
!complete.cases(y)
缺失值统计(使用is.na(x)
# 数据集中总缺失数据量
sum(is.na(h1n1_data))

# 数据集中某一列缺失数据量
sum(is.na(h1n1_data["h1n1_knowledge"]))
数据中某一行来统计。
pMiss<-function(x) {
sum(is.na(x)) /length(x) *100
}
apply(h1n1_data, 2, pMiss) # 按列统计缺失比率%
还可以 调用现成的包。
缺失值机制与分析:
分为完全随机缺失(MCAR),随机缺失(MAR)和非随机缺失(MNAR)
(1)完全随机缺失:缺失现象完全随机发生,与自身或其他变量的取值无关。(2)随机缺失:缺失数据的发生与数据库中其他无缺失变量的取值有关。如果缺失和观测值之间存在系统关系,则为MAR(2)非随机缺失:若缺失数据不属于MCAR和MAR,数据的缺失依赖于不完全变量本身,则数据为非随机缺失。
可视化分析缺失数据关联的方法:
使用VIM中的aggr函数:
# cex.axis调整轴字体大小,oma调整外边框大小
aggr(h1n1_data, cex.axis=.6, oma=c(9, 5, 5, 1))
# 先简单处理一下一些类别变量的顺序
h1n1_data_matplt<-h1n1_data
h1n1_data_matplt$age_group<-factor(h1n1_data_matplt$age_group)
h1n1_data_matplt$education<-factor(h1n1_data_matplt$education, levels=c("", "< 12 Years", "12 Years", "Some College", "College Graduate"))
h1n1_data_matplt$sex<-factor(h1n1_data_matplt$sex)
h1n1_data_matplt$income_poverty<-factor(h1n1_data_matplt$income_poverty, levels=c("18 - 34 Years", "<= $75,000, Above Poverty", "> $75,000"))
# levels(h1n1_data_matplt$age_group) # 查看顺序

# 矩阵图可视化
par(mar=c(9, 4.1, 2.1, 2.1)) # x轴标签太长,调用par()函数调整外边框的大小
matrixplot(h1n1_data_matplt, sortby="chronic_med_condition", cex.axis=0.7) # cex.axis为调整坐标轴字体大小
shadow_mat<-as.data.frame(abs(is.na(h1n1_data[, -1])))
head(shadow_mat)
# 可提取含缺失值的变量
shadow_mat<-shadow_mat[which(apply(shadow_mat, 2, sum) >0)]

# 计算相关系数
cor(shadow_mat)

# 相关系数热力图
heatmap(cor(shadow_mat))
缺失值处理:
1.将缺失值作为变量值使用
2.删除法
3.插补法
教程介绍了删除和插补法:
1.删除法:
行删除使用函数:complete.cases()na.omit()
h1n1_data_row_del1<-h1n1_data[!complete.cases(h1n1_data), ]
h1n1_data_row_del2<-na.omit(h1n1_data)
列删除:dataset[,-5]subset(dataset, select = -c(col1, col2))
#比如删除health_insurance
h1n1_data_col_del1<-subset(h1n1_data, select=-c(health_insurance))
2.插补法:简单插补法、拟合插补法、多重插补法
还需要多查找资料了解:
多重插补法: 处理缺失值之多重插补(Multiple Imputation)https://zhuanlan.zhihu.com/p/36436260
异常值识别
识别:有几种常用方法,包括可视化图形分布识别(箱线图)、z-score识别、局部异常因子法(LOF法)、聚类法等。
z-score是一种一维或低维特征空间中参数异常检测方法。它假定数据是高斯分布,异常值是分布尾部的数据点,因此远离数据的平均值。一般将z-score低于-3或高于3的数据看成是异常值。
局部异常因子法(LOF),是一种无监督的离群检测方法,是基于密度的离群点检测方法中一个比较有代表性的算法。适用于在中等高维数据集上执行异常值检测。
特征编码
特征编码其实在很多程序语言中都会使用到,它是对一类特征的一种归类,能更好的用于后续的数据处理。
1.独热编码/哑编码
One-hot encoding 和 dummy,是将类别变量扩充为多个只显示0,1的变量,每个变量代表原类别变量中的一个类。 ——来源学习教程
2.标签编码
标签编码(Label Encoder)是将类别变量转换成连续的数值型变量,通常对有序的变量进行标签编码,既保留了顺序信息,也节约了空间(不会扩充变量)
3.手动编码
即自定义编码,可以用特定的函数进行处理,比如case_when()
规范化与偏态数据
为什么要数据规范化?简单来说是为了去除数据量纲和数据大小的差异,确保数据是在同一量纲或者同一数量级下进行比较,一般用在机器学习算法之前。数据规范化又可以使用0-1规范化,Z-score等方法。
为什么要处理偏态数据?。很多模型会假设数据或参数服从正态分布。例如线性回归(linear regression),它假设误差服从正态分布。——来源学习教程
规范化的方法:
1.0-1规范化
2.Z-score标准化
3.对数转换(log transform)
4.Box-Cox
附录:参考资料
理论资料
数据的预处理基础: 如何处理缺失值 https://cloud.tencent.com/developer/article/1626004
多重插补法: 处理缺失值之多重插补(Multiple Imputation)https://zhuanlan.zhihu.com/p/36436260
异常值检测: R语言--异常值检测 https://blog.csdn.net/kicilove/article/details/76260350
异常值检测之LOF: 异常检测算法之局部异常因子算法-Local Outlier Factor(LOF) https://blog.csdn.net/BigData_Mining/article/details/102914342
规范化: 规范化、标准化、归一化、正则化 https://blog.csdn.net/u014381464/article/details/81101551
什么样的模型对缺失值更敏感?:https://blog.csdn.net/zhang15953709913/article/details/88717220
R语言函数用法示例
funModeling用法示例:https://cran.r-project.org/web/packages/funModeling/vignettes/funModeling_quickstart.html
tidyverse官方文档:https://www.tidyverse.org/
VIM教学网页:https://www.datacamp.com/community/tutorials/visualize-data-vim-package
mice使用文档(Multivariate Imputation by Chained Equations):https://cran.r-project.org/web/packages/mice/mice.pdf
mice使用中文解释:https://blog.csdn.net/sinat_26917383/article/details/51265213
mice检验结果解释:http://blog.fens.me/r-na-mice/
caret包数据预处理:https://www.cnblogs.com/Hyacinth-Yuan/p/8284612.html
R语言日期时间处理:https://zhuanlan.zhihu.com/p/83984803
基于R语言进行Box-Cox变换:https://ask.hellobi.com/blog/R_shequ/18371
R中数据集分割:https://zhuanlan.zhihu.com/p/45163182
Task03 基本的统计分析
待学习待更新。

内容参考网络资料,以上内容仅供学习使用,不作其它用途,如有侵权,请留言以下微信号,作删除处理
有任何疑问及建议,扫描以下公众号二维码添加交流:

继续阅读
阅读原文