箱形图异常值检测
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参数取值
name | value | 说明 |
method | pearson | 皮尔森相关系数,默认选项 |
kendall | 肯德尔系数 | |
spearman | 斯皮尔曼系数 | |
use | everything | 全部数据,有空值的计算出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) #选择第三个插补数据集
规范化
最小 - 最大 (离差标准化)
零 - 均值 (标准差标准化)
符号 | 含义 |
原始数据的均值 | |
sigma | 原始数据的标准差 |
替换公式为:
符号 | 含义 |
M | 均值 |
绝对标准差 | |
W | 平均数或中位数 |
小数定标规范化
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)进行聚类,在将聚类得到的簇合并到一个簇的连续属性值并做统一标记。 |