将连续生产参数与四班三运转班次对应起来的算法
背景介绍:
我们采用5分钟为采样周期,记录生产过程参数,数据记录是连续的,但生产工人是四班三运转轮流工作的。要想按生产稳定性指标对三班人员进行绩效考评,就必须将数据记录按三班进行分组。
四班三运转运行规律
1、 三班运行顺序:1、穷尽法。2、规律算法。
2、 一轮班次为6*4个班次,即8天一个轮回。
3、 建立一个用来循环的数组。(甲乙丙、甲乙丙、丁甲乙、丁甲乙、丙丁甲、丙丁甲、乙丙丁、乙丙丁)或者(123、123、412、412、341、341、234、234)
4、 将分组标签替换为三班名。建一个表格完成转换上牌时标签数,下排用班次来对应。
5、 找到每个班次对应的标签数。
6、 完成替换。
四班三运转分组算法
1、 时间分为月、日、时、分。
2、 以八小时为单位分组。8*60/5=96,ID/96取整。
3、 为每组设立一个标签数顺排。
4、 每个组的标签数在除以24取余数。
5、 将余数与数组(123、123、412、412、341、341、234、234)或数组(123、412、412、341、341、234、234、123)对应起来,比如:1,4,8,11,15,18用1来替换,等等。
6、 将甲乙丙丁与1234对应起来。
7、 完成替换。
实践
坑:负值在导入之前需在三EXCEL中选择列------设置单元格格式------数值-----在下边的负数形式选择框内选择正常的负数表现形式。
坑: historian输出的列名前面带一个点,这个在后面处理的时候后有语法错误,需要在EXCEL中修改过来。
坑:数据导入时,导入选项里的NA可选项也要选择NA,不可选择默认,否则会有太多无效值。
另外变量名要在fix里面一个个看一遍才能用中文显现出来。
a1$shift<-c(1:nrow(a1))
a1$shift<-a1$shift%/%96
a1$shift<-a1$shift%%24
a1$shift<-(a1$shift+13)%%24——起始时间对应是13
删除停机时间的数据。
library(sqldf)
a2<-a1
a2<-sqldf("select * from a2 where speed>1")
坑:historian输出的列名前面带一个点,这个在后面处理的时候后有语法错误,可以用fix语句对其进行删除。
按班次分组:与预计不同的是计算起始数都用0比较合适,修改对应数字(1:24)为(0:23)。如上例第五条就改为:将余数与数组(甲乙丙、甲乙丙、丁甲乙、丁甲乙、丙丁甲、丙丁甲、乙丙丁、乙丙丁)对应起来,比如:0,3,7,10,14,17用甲来替换,等等。
jia<-sqldf("select
* from a2 where shift in (0,3,7,10,14,17)")
yi<-sqldf("select
* from a2 where shift in (1,4,8,11,18,21)")
bing<-sqldf("select
* from a2 where shift in (2,5,12,15,19,22)")
ding<-sqldf("select * from a2 where shift in
(6,9,13,16,20,23)")
完成三班数据分组。
导出分析,到项目所在文件夹
library(xlsx)
write.xlsx(jia, "甲班.xlsx")
write.xlsx(yi, "乙班.xlsx")
write.xlsx(bing, "丙班.xlsx")
write.xlsx(ding, "丁班.xlsx")
图像输出
>
par(mfrow=c(2,2))
> boxplot(jia$`1#主抽瞬时功率`, main="甲班", ylab="瞬时电耗", ylim=c(3000, 5000))
>
> boxplot(yi$`1#主抽瞬时功率`, main="乙班", ylab="瞬时电耗", ylim=c(3000, 5000))
>
> boxplot(bing$`1#主抽瞬时功率`, main="丙班", ylab="瞬时电耗", ylim=c(3000, 5000))
>
> boxplot(ding$`1#主抽瞬时功率`, main="丁班", ylab="瞬时电耗", ylim=c(3000, 5000))
描述性数据,生成自定义函数
mystats<-function(x){
m<-mean(x)
s<-sd(x)
return(c(mean=m,stdev=s))
}
重命名使用中文名
names(jia)<-c("时间","速度","上料量","1S-1","1S-2","CP-1","PD-1","频率3","频率4","功率3","功率4","南负压","北负压","南烟道温度","北烟道温度","南终点温度","北终点温度","相对成品率")
坑:英文名太长无法分列,但只在最后输出前改为中文名。
统计数据
sapply(jia[c(2,8:18)],mystats)
sapply(yi[c(2,8:18)],mystats)
sapply(bing[c(2,8:18)],mystats)
sapply(ding[c(2,8:18)],mystats)
统计结果输出到excel表的话是单列的,要变成分列的数据框。
选择包含数据的列,在菜单栏里选择“数据”,在“数据工具”里,选择“分列”,然后按提示框,一步步完成分列。
如何对变量进行分组替换
使用merge对两个表进行合并。
1、将shift数据对应表导入。
还是使用importdata
坑:数据导入时,文件名必须是英文字母打头,否者显示多字符1错误。
2、将无用的行列删除,一次性删除一行、一列。
SHIFT<-SHIFT[-25,-3]
3、将两个表进行左连接
a3<-a2
a3<-merge(a3,SHIFT,all.x = TRUE )
4、删除异常值
a3<-a3[a3$speed<2 & a3$speed>1,]
a3<-a3[a3$`yield rate`<1.3 &
a3$`yield rate`>0,]
5、显示3号主抽的功率的箱形图
ggplot(a3, aes(x=sh, y=a3$`power 3`)) +
+ geom_boxplot(fill="cornflowerblue",
+ color="black")
6、将几幅图组合起来
p1<-ggplot(data=a3, aes(y=a3$`pressure
south pipe`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p2<-ggplot(data=a3, aes(y=a3$`pressure
north pipe`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p3<-ggplot(data=a3, aes(y=a3$`temperature
south pipe`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p4<-ggplot(data=a3,
aes(y=a3$`temperature north pipe`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p5<-ggplot(data=a3,
aes(y=a3$`temperature south destination`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p6<-ggplot(data=a3,
aes(y=a3$`temperature north destination`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p7<-ggplot(data=a3, aes(y=a3$`power
3`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
p8<-ggplot(data=a3, aes(y=a3$`yield
rate`,total,x=sh)) +
geom_boxplot(fill="cornflowerblue")
library(gridExtra)
grid.arrange(p1,p2,p3,p4,p5,p6,p7,p8,
ncol=4,nrow=2)
输出如下图形: