R语言入门

一、R基本

1.1 算术运算符

运算符 描述
+ 加法
减法
* 乘法
/ 除法
^或** 求幂
%% 求余
%/% 整数除法

1.2 常用数学函数

  • abs(x)
  • sqrt(x)
  • sin(x)、cos(x)、tan(x)
  • asin(x)、acos(x)、atan(x)
  • exp(x)
  • log(x)、log2(x)、log10(x)
  • round(x)
  • ceiling(x)
  • floor(x)
  • trunc(x)

1.3 常用的统计函数

函数 描述
length(x) 求 x 中元素的个数
mean(x) 求 x 的算术平均值
median(x) 求 x 的中位数
var(x) 求 x 的样本方差
sd(x) 求 x 的样本标准差
range(x) 求 x 的全距
min(x) 求 x 的最小值
max(x) 求 x 的最大值
quantile(x) 求 x 的分位数
sum(x) 求 x 中所有元素的和
scale(x) 将 x 标准化

1.4 工作空间管理

工作空间(workspace)就是 R 的工作环境,所有创建的对象都被临时保存在工作空间(也可称为全局环境,.GlobalEnv)中。

  • ls( ) :列出当前工作空间中的所有对象
  • getwd( ) :查看当前的工作目录
  • setwd( ) :设定当前的工作目录

2. R 的数据结构

2.1 存储的数据结构

向量Vector:存储数值型、字符型、逻辑型数据的一维数组。标量可以看作是只含有一个元素的向量。函数 c( ) 可用来创建向量,每一个向量中的数据类型必须一致

因子factor:即分类变量,名义型变量是没有顺序关系的分类变量,有序型变量是有层级和顺序关系的分类变量

矩阵Matrix多维数组列表(允许不同类型数据混合), 数据框(dataframe)

'''向量赋值'''
x1 <- c(2, 4, 1, -2, 5)
x2 <- c("one", "two", "three")
x3 <- c(TRUE, FALSE, TRUE, FALSE)
x4 <- 1:5     # 等价于x4 <- c(1, 2, 3, 4, 5)
x5 <- seq(from = 2, to = 10, by = 2)  # 等价于x5 <- c(2, 4, 6, 8, 10)
x6 <- rep("a", times = 4)  # 等价于x6 <- c("a", "a", "a", "a")

#下标取值
x[5]    #从1开始计数
x[c(4, 6, 7)]    #取第4,6,7
x[-(1:4)]    #去掉前四个元素


'''因子赋值'''
sex <- c(1, 2, 1, 1, 2, 1, 2)
sex.f <- factor(sex,
                levels = c(1, 2),     #levels 表示原变量的分类标签值
                labels = c("Male", "Female"))    #labels 表示因子取值的标签

levels(sex.f)     #查看因子的属性
sex.f1 <- relevel(sex.f, ref = "Female")     #改变因子水平的排序:改变参考组
status.f <- factor(status,levels = c(1, 2, 3),labels = c("Poor", "Improved", "Excellent"),ordered = TRUE)    #有序因子 ordered=True


'''矩阵'''
M <- matrix(1:6, nrow = 2, byrow=FALSE)     #byrow默认按列将数值进行排列
dim(M)     #查看维度
mat1 %*% mat2     #矩阵乘法
t(mat1)     #转置
det( )、solve( )      #行列式和逆矩阵
rowSums、colSums、rowMeans、ColMeans      #按行、列求和或者求平均


'''数组:带标签的矩阵'''
dim1 <- c("A1", "A2", "A3")
dim2 <- c("B1", "B2", "B3", "B4")
dim3 <- c("C1", "C2")
print(array(1:24, dim = c(3, 4, 2), dimnames = list(dim1, dim2, dim3)))
# --> , , C1
   B1 B2 B3 B4
A1  1  4  7 10
A2  2  5  8 11
A3  3  6  9 12

, , C2

   B1 B2 B3 B4
A1 13 16 19 22
A2 14 17 20 23
A3 15 18 21 24


'''列表:  很多函数返回值是列表'''
list1 <- list(a = 1, b = 1:5, c = c("red", "blue", "green"))


'''数据框'''
ID <- 1:5
sex <- c("male", "female", "male", "female", "male")
age <- c(25, 34, 38, 28, 52)
pain <- c(1, 3, 2, 2, 3)      
pain.f <- factor(pain, levels = 1:3, labels = c("mild", "medium", "severe"))   
patients <- data.frame(ID, sex, age, pain.f)

#引用某一个列:$
patients$age


2.2 数据类型的转换:is , as

数据类型的判断与转换函数

判断 转换
is.numeric( ) as.numeric( )
is.character( ) as.character( )
is.logical( ) as.logical( )
is.factor( ) as.factor( )
is.vector( ) as.vector( )
is.matrix( ) as.matrix( )
is.array( ) as.array( )
is.data.frame( ) as.data.frame( )
is.list( ) as.list( )
is.table( ) as.table( )

3. R导入导出数据

3.1 内置数据集

#查看内置数据集
data(package = "datasets")
#调用iris数据
data(iris)

3.2 创建数据

各种分布的数据:rnorm( )、runif( )、rbinom( )、 rpois( ) 

r1 <- rnorm(n = 100, mean = 0, sd = 1)
r2 <- runif(n = 10000, min = 0, max = 100)
r3 <- rbinom(n = 80, size = 100, prob = 0.1)
r4 <- rpois(n = 50, lambda = 1)

#查看
hist(r1)
head(r1)

3.3 导入数据

  • txt 格式:read.table( )
  • csv 格式:read.csv( )
  • xls 或 xlsx 格式:read.xlsx( )  需导入openxlsx包
  • R数据文件 rdata:load()
  • 其他格式:借助 library(foreign)

3.4 导出数据

txt或csv文件:write.table( ) 和 write.csv( ) 

R 数据文件:save()

save(patients, file = "patients.rdata")

3.5 rio包

rio 包以提供一个类似万能工具的包为目标,用统一的 import( ) 函数和 export( ) 函数简化了用户导入和导出数据的工作。此外,该包里的 convert( ) 函数可以实现不同文件格式之间的转换。rio 包支持多种文件格式,包括 SAS、SPSS、Stata、Excel、MATLAB、Minitab 等其他软件中使用的数据文件格式

library(rio)  #install_formats( )可以安装
data("infert")
str(infert)     #str常用于查看数据集的大小以及各个变量的类型

#导出
export(infert, "infert.csv")
#转换
convert("infert.csv", "infert.sav")
#导入
infert.data <- import("infert.sav")

二. 数据集操作

View(iris)  #查看
nrow(iris)
ncol(iris)
dim(iris)
names(iris)  #列名
str(iris)  #结构
attributes(iris) #数据属性
summary(iris)
head(iris)
tail(iris)

colnames()  #重命名列

1. 统计分析数据

install.packages("Hmisc")

library(Hmisc)
describe(iris) #需要Hmisc包

mean(iris$Sepal.Length)
median(iris$Sepal.Length)
range(iris$Sepal.Length)  #数据范围区间
quantile(iris$Sepal.Length, c(0.1,0.3,0.6))
var(iris$Sepal.Length)
cov(iris$Sepal.Length, iris$Petal.Length)  #covariance
cor(iris$Sepal.Length, iris$Petal.Length)  #correlation

table(iris, useNA='ifany')  #计数统计

colSums()  #按列求和
rowSums()  #按行求和

2. 聚合

aggregate(iris$Sepal.Length ~ iris$Species, summary,data=iris)

#向量化操作
apply(x, MARGIN, FUN, ...)  #MARGIN是维度的下标,1表示行, 2表示列
apply(mydata,1,mean) #求矩阵行均值
apply(mydata,2,mean) #求矩阵列均值

lapply(X, FUN, ...)  #用于对列表对象执行操作

3. 可视化统计分析

#密度图
plot(density(iris$Sepal.Length),main='Density of Sepal Length')

#盒图
boxplot(Sepal.Length ~ Species, data = iris)
boxplot(Sepal.Length ~ Species, data = iris)$out  #查看异常值

#散点图 (x,y,color,marker)
plot(iris$Sepal.Length, iris$Sepal.Width, col = iris$Species, pch = as.numeric(iris$Species))

#散点图矩阵(两两每列)
pairs(iris)

#柱状图
barplot(iris$Sepal.Length, horiz=FALSE, las=2)

4. ggplot2包 作图

ggplot2的作图一般步骤为:

  • 准备数据,一般为数据框, 且一般为长表, 即每个观测时间占一行, 每个观测变量占一列。
  • 将数据输入到ggplot()函数中, 并指定参与作图的每个变量分别映射到哪些图形特性, 比如映射为x坐标、y坐标、颜色、形状等。 这些映射称为aesthetic mappings或aesthetics。
  • 选择一个合适的图形类型, 函数名以geom_开头, 如geom_point()表示散点图。 图形类型简称为geom。 将ggplot()部分与geom_xxx()部分用加号连接。 到此已经可以作图,下面的步骤是进一步的细化设定。
  • 设定适当的坐标系统, 如coord_cartesian()scale_x_log10()等。 仍用加号连接。
  • 设定标题和图例位置等,如labs()。 仍用加号连接。

5. 字符串操作

#分割字符串
strsplit(x,'[$]')

三、数据预处理

1. 缺失值

#查看缺失值NA
is.na(iris)
which(is.na(iris))  #返回缺失值位置

#填充缺失值NA
x[is.na(x)] <- mean(x, na.rm=TRUE)

#筛除缺失值NA
complete.cases(df)  #返回各行布尔值, df[complete.cases(), ]
na.omit(df)  #返回不含缺失值的各行

#查看空值(没有赋值), 空格字符串不是空值!
is.null()


#除去字符型数据前后的空格
library(raster)
trim(iris)

2. 异常值

Methods:

  • Use Interquartile range:Outliers = Observations > Q3 + 1.5*IQR or < Q1 – 1.5*IQR
  • Use z-score:Outliers = Observations with z-score > 3 or < -3
# IQR
boxplot(iris$Sepal.Width)$out  #输出异常值
boxplot(iris$Sepal.Width, outline=False)  #忽略异常

# z-score
scale(iris$Sepal.Width)  #(样本-样本均值)/样本标准差

3. 重复值

#查看是否重复值
duplicated(df,by=c("id","value"))

#重复值索引
which(duplicated(df))

#除去重复值, 两种方法
df[!duplicated(df,by=c("id","value")),]
unique(df)

4. 标准化\归一化

#极大极小缩放
min_max_norm <- function(x){
    (x-min(x))/(max(x)-min(x))
}
lapply(iris,min_max_norm)

#标准化
scale()

5. 类别编码

#Ordinal Encoding

factor_Breakfast <- factor(Breakfast,order = TRUE,
levels=c('Never','Rarely','Most days','Every day'))
encode_Breakfast <- as.numeric(factor_Breakfast)
encode_Breakfast

#One-Hot Encoding 法1
model.matrix(~iris$Species-1,iris)) #返回独热编码
#法2
library(mltools)
library(data.table)
one_hot(as.data.table(as.factor(iris$Species))) #返回独热编码


6. 特征选择

R语言入门_第1张图片

四、数据挖掘算法

1. 划分数据集

set.seed(1234)

idx <- sample(c(TRUE, FALSE), nrow(iris), replace=TRUE, prob=c(0.7,0.3))
train <- iris[idx, ]
test <- iris[!idx, ]

2. 算法

#KNN
library(class)
knn_output <- knn(train[,1:4],test[,1:4],train[,5],k=3)

#决策树
library(rpart)
model1 <- rpart(Species~., data = train, method = 'class')
dt_output <- predict(model1, test[,1:4],type = 'class')

#随机森林
library(randomForest)
model2 <- randomForest(Species ~ ., data = train, ntree=200, importance = TRUE)
rf_output <- predict(model2, test[,1:4])

#线性回归
model1 <- lm(Balance~.,data=train)
lm_output <- predict(model1,test)

3. 结果评估

3.1 分类算法 

#混淆矩阵
table(knn_output,test$Species)

#具体统计分析和混淆矩阵
library(caret)
confusionMatrix(knn_output, test$Species, mode='everything')
R语言入门_第2张图片 confusionMatrix

3.2 回归算法

#线性回归
library(performance)
check_model(fit)


library(caret)
RMSE()
MAE()

统计回归分析:

#遍历赋值
x <- c(1,2,3,4,5)
y <- c(6,7,8,9,10)

#一元回归模型
fit = lm(y~x)

#置信区间
confint(fit)
#统计总结
summary(fit)

#逻辑回归模型
model = glm(cbind(y,1-y) ~x1+x2, family=binomial, data=df )

更多

R语言数据挖掘分析常用函数和包有哪些? - 知乎

R 语言必学的 10 大包是什么? - 知乎

你可能感兴趣的:(数据分析,r语言,逻辑回归,开发语言)