将连续生产参数与四班三运转班次对应起来的算法

将连续生产参数与四班三运转班次对应起来的算法

 

 

背景介绍:

 

我们采用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)

 

输出如下图形:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值