个人学习笔记——R篇(实例)

箱形图异常值检测

data = read.csv(file="C:/Users/RF_Ba/Desktop/Test/catering_sale1.csv")

sum(complete.cases(data))
sum(!complete.cases(data))
mean(!complete.cases(data))
data[!complete.cases(data),]

sp=boxplot(data$"B",boxwex = 0.7)
title("异常值检测箱型图")

xi=1.1
sd.s =sd(data[complete.cases(data),]$"B")
mn.s = mean(data[complete.cases(data),]$"B")
points(xi,mn.s,col='red',pch=20)
arrows(xi,mn.s - sd.s,xi,mn.s + sd.s, code=3,col='pink',angle = 45,length = .1)

exists('sp')
text(rep(c(1.1,0.9),length(sp$out)/2),sp$out,sp$out,col='red')

均值,中位数,极差,标准差,变异系数,四分位数

setwd("/home/rf-backspace/文档/R Study/try")

saledata = read.table(file = "/home/rf-backspace/文档/R Study/try/catering_sale.csv",sep=",",header=TRUE)
sales = saledata[,2]

#均值
mean_ = mean(sales,na.rm = T)
#中位数
median_ = median(sales,na.rm = T)
#极差
range_ = max(sales,na.rm = T) - min(sales,na.rm = T)
#标准差
std_ = sqrt(var(sales,na.rm = T))
#变异系数
variation_ = std_/mean_
#四分位数间距
q1 = quantile(sales, 0.25, na.rm = T)
q3 = quantile(sales, 0.75, na.rm = T)
distance = q3 - q1

a = matrix(c(mean_,median_, range_, std_, variation_, q1, q3, distance),1, byrow = T)
colnames(a) = c("均值", "中位数", "极差", "标准差", "变异系数", "1/4分位数", "3/4分位数", "四分位数间距")
print (a)

贡献度分析(帕累托法则,20/80定律)

setwd("/home/rf-backspace/文档/R Study/try")

dishdata = read.csv(file = "/home/rf-backspace/文档/R Study/try/catering_dish_profit.csv", header = TRUE)

barplot(dishdata[,3],col = "blue1",name.arg=dishdata[,2],width = 1, space = 0, ylim=c(0,10000),xlab="菜品",ylab="盈利:元")
accratio = dishdata[,3]
for (i in 1:length(accratio)) {
  accratio[i] = sum(dishdata[1:i,3])/sum(dishdata[,3])
}

par(new = T, mar= c(4,4,4,4))
points(accratio*10000 ~c((1:length(accratio) - 0.5)), new = FALSE, type = "b", new = T)
axis(4, col = "red", col.axis = "red", at = 0:10000, label = c(0:10000/10000))
mtext("累计百分比",4,2)
points(6.5, accratio[7]*10000, col = "red")
text(7, accratio[7]*10000,paste(round(accratio[7] + 0.00001, 4)*100,"%"))

 相关性

setwd("/home/rf-backspace/文档/R Study/try")

cordata = read.csv(file = "/home/rf-backspace/文档/R Study/try/catering_sale_all.csv", header = TRUE)

cor(cordata[,2:11])

特征函数

函数名函数功能使用格式
mean()计算数据样本的算术平均数

n = mean(X)

样本X可为向量,矩阵或多维数组

exp(mean(log())计算数据样本的几何平均数

n = exp(mean(log(X))

样本X可为向量,矩阵或多维数组

var()计算数据样本的方差

v = var(x)

若X为向量,则计算向量的样本方差,若X为矩阵,则v为X的各列向量的样本方差构成的行向量

sd()计算数据样本的标准差

s = sd(x)

若X为向量,则计算向量的标准差,若X为矩阵,则s为X的各列向量的标准差构成的行向量

cor()计算数据样本的相关系数矩阵

R = cor(x,y =NULL, use = "everything", mthod = c("pearson", "kendall","spearman"))

name,value参考下方补充表

cov()计算数据样本的协方差矩阵

R = cov(X)

X可为向量或矩阵。若X为向量时,R表示X的方差。若X为矩阵时,cov(X)计算方差矩阵。

moment()计算数据样本的指定阶中心矩

 m = moment(X, order)

计算样本X的order阶次的中心矩m,参数order为正整数。样本X可为向量,矩阵或多维数组。

说明一阶中心矩为0,二阶中心矩为用除数n得到的方差,其中n为向量X的长度或矩阵X的行数。使用此函数需加载e1071包
summary()计算数据样本的均值,最大值,最小值,中位数,四分位数

cor函数中name,value参数取值

namevalue说明
methodpearson皮尔森相关系数,默认选项
kendall肯德尔系数
spearman斯皮尔曼系数
useeverything全部数据,有空值的计算出NA
all.obs所有观测值,有NA的计算提示error
complete.obs

只使用没有缺失值的行

na.or.complete在存在空值时计算出空值
pairwise.complete.obs计算R(i,j)只使用地i 和j列中所有非缺失的数据

 作图函数

作图函数名功能格式
barplot() 绘制简单条形图barplot(X, horiz = FALSE, main, xlab, ylab)
说明X为一个向量或者矩阵。参数Horiz是逻辑值,改成TRUE图形变为横向条形图。main:图表标题,xlab:横坐标轴标题,ylab:纵坐标轴标题
pie()绘制饼形图pie(X)
说明若X中非负元素和小于1,则函数仅画出部分的饼形图,且非负元素X(i,j)的值直接限定饼形图中扇形的大小。若X中非负元素和大于等于1,则非负元素X(i,j)代表饼形图中的扇形大小通过X(i,j)/Y的大小来决定,其中,Y为矩阵X中非负元素和
hist()绘制二维条形直方图,可显示数据的分配情形hist(X, freq = TRUE)
说明把向量X中的数值自动分组,各组距相等,条形图每一条的高度表示频率或频数,默认freq = TRUE,即画出频数条形图,freq = FALSE时绘出频率条形图
boxplot()绘制样本数据的箱型图boxplot(X)
说明notch默认FALSE,改为TRUE则绘制矩形样本X的带刻槽的凹盒图。
plot()绘制线性二维图,折线图,散点图pltt(X,Y)
说明通过type指定绘制时图形的类型样式。“o”:散点,“l”:曲线,“b”:点线混合

缺失值处理(行删除/均值替换/回归插补/多重插补)

# 读取数据
inputfile = read.csv("/home/rf-backspace/文档/R Study/try/catering_sal.csv")
# 修改变量名
inputfile = data.frame(sales = inputfile$"sale",date = inputfile$"date")
# 数据截取
inputfile = inputfile[5:16,]
# 缺失数据识别
is.na(inputfile)
n = sum(is.na(inputfile))
# 异常值识别
par(mfrow=c(1,2))
dotchart(inputfile$sales)                #绘制单变量散点图
boxplot(inputfile$sales,horizontal=T)    #绘制箱形图
# 异常数据处理
inputfile$sales[5] = NA
fix(inputfile)
# 缺失值处理
inputfile$date = as.numeric(inputfile$date)
sub = which(is.na(inputfile$sales))
inputfile1 = inputfile[-sub,]
inputfile2 = inputfile[sub,]
# 行删除法
result1 = inputfile1
# 均值替换法
avg_sales = mean(inputfile1$sales)
inputfile2$sales = rep(avg_sales,n)
result2 = rbind(inputfile1, inputfile2)
# 回插补法
model = lm(sales~date, data = inputfile1)
inputfile2$sales = predict(model, inputfile2)
result3 = rbind(inputfile1, inputfile2)
# 多重插补法
library(lattice)
library(MASS)
library(nnet)
library(mice)

imp = mice(inputfile,m = 4)                #4重插补
fit = with(imp, lm(sales ~ date, data = inputfile))
pooled = pool(fit)
summary(pooled)
result4 = complete(imp,action =3)         #选择第三个插补数据集

规范化

最小 - 最大 (离差标准化)

x^{*} = \frac{x - min}{max - min}

零 - 均值 (标准差标准化)

x^{*} = \frac{x - \bar{x}}{sigma}

符号含义
\bar{x}原始数据的均值
sigma原始数据的标准差

 替换公式为:

x^{*} = \frac{x - M}{\sum_{i = 1}^{i = n} | x _{i} - W|}

符号含义
M均值
{\sum_{i = 1}^{i = n} | x _{i} - W|}

绝对标准差

W平均数或中位数

小数定标规范化

x^{*} = \frac{x}{10^{k}}

setwd("/home/rf-backspace/文档/R Study/try")
data = read.csv("/home/rf-backspace/文档/R Study/try/normalization_data.csv",he = F)

#最小-最大
b1 = (data[,1] - min(data[,1])) / (max(data[,1]) - min(data[,1]))
b2 = (data[,2] - min(data[,2])) / (max(data[,2]) - min(data[,2]))
b3 = (data[,3] - min(data[,3])) / (max(data[,3]) - min(data[,3]))
b4 = (data[,4] - min(data[,4])) / (max(data[,4]) - min(data[,4]))
data_scatter = cbind(b1,b2,b3,b4)

#零-均值
data_zscore = scale(data)

#小数定标
i1 = ceiling(log(max(abs(data[,1])),10))
c1 = data[,1]/10^i1
i2 = ceiling(log(max(abs(data[,2])),10))
c2 = data[,2]/10^i2
i3 = ceiling(log(max(abs(data[,3])),10))
c3 = data[,3]/10^i3
i4 = ceiling(log(max(abs(data[,4])),10))
c4 = data[,4]/10^i4
data_dot = cbind(c1,c2,c3,c4)

options(digits = 4)
data;data_scatter;data_zscore;data_dot

连续属性离散化 - 连续属性变成分类属性

过程

确定分类+如何将连续属性值映射到这些分类值(在数据的取值范围内设定若干离散划分点,将取值范围划分为一些离散化的去见,最后用不同的符号或整数值代表落在没个子区间中的数据值。)

常用方法

等宽将属性的值域分成具有相同宽度的去见,个数由数据本身的特点决定或用户指定
等频`相同数量的记录放进每个区间、

聚类

(一维)

先将连续属性的值用聚类算法(如K-Means)进行聚类,在将聚类得到的簇合并到一个簇的连续属性值并做统一标记。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值