설비를 교체를 검토 할 때, 항상 필요한 것이 있다. 최근에 어떤 부위에 얼마만큼 고장 났고, 생산에 문제가 있는지 분석 해야 한다.
이 때 필요한 것은 문자열 분석이다. 설비 전체를 교체 할 경우에는 전체적인 고장의 경향을 보면 되는데, 부분 교체 건은 보전 반장이 입력한 보전작업일보의 텍스트로 분석해야 한다.
문자열 데이터를 분석 하기 위해 stringr 패키지를 사용하였다. 이것도 해들리 위컴이 만든 tidyvers 안에 포함된 패키지이다.
# 라이브러리 로딩
library(stringr)
library(dplyr)
library(ggplot2)
라이브러리 로딩 할때는 데이터 프레임과 그래프를 보기 위해, dplyr과 ggplot2를 사용하였다.
아래의 보전오더는 17년 동안 사용한 주판라인의 용접장치에 쓰이는 용접기였고, 최근에 문제가 거의 없다가, 수명이 거의 다 되어, 분석한 내용이다.
아래의 데이터는 영문으로 정리한 데이터이다. 현장에서 입력된 데이터는 아주 많은 데이터 정제가 필요하다. 물론 용접기와 같은 전기 장치는 전조 현상을 보이지 않고, 급짝스럽게 고장나는 특성을 가지고 있다. 그래서 최근 1년에 일어난 오더 내역만 정리 한 것이다.
# Sentence 넣기
sentence <- c("AC A2A6 welding machine PCB replacement and inspection test",
"AC welding machine PCB replacement and inspection",
"Arc off during AC welding Replace welding machine PCB",
"AC welding machine welding machine PCB replacement and line check",
"DC Feeder Welding Machine PCB Replacement",
"DC communication error check and reset",
"DC welding machine A2A6 MAIN welding machine PCB replacement",
"DC welding machine replacement",
"dc welding machine body replacement",
"DC communication cable installation",
"diode replacement",
"HOIST maintenance",
"deep tracking pc repair",
"Deep tracking device PC not booting",
"Welder replacement due to arc failure",
"Arc Off Welding Arc Off Welding",
"Repair with Weld Head Collision Breakage",
"Welder communication failure Arc off Reset",
"Welder communication failure error occurrence check, reset",
"Welder communication failure check, reset",
"Welder communication failure cable connector cleaning work",
"AC welding off cleaning work during welding",
"Arc off during welding",
"Arc off during welding communication cable installation",
"communication failure check and reset",
"Trolley upper/lower guide B/R replacement")
아래는 데이터 파싱 할때 사용하는 함수인데, 데이터 파싱 할때는 vector의 Array 요소별로 문자를 나누어 데이터 프레임을 쌓는다. 아래는 vector 1개 sentence의 문자를 나누는 코드이다.
#sentence 당 문자열 파싱 하고 데이터 프레임 만들기
pasing_fun <-function(text, t_count){
# 홀수 인지 짝수 인지 구분
divide <- length(text) %% 2
if(divide == 1){
k = length(text) -1
} else {
k = length(text)
}
result <- c()
# i 인지 확인
i = 1
for(i in 1:k){
tv <-text[i:(i+t_count)]
pasing <- c()
w= 1
for(w in 1:t_count){
pasing <- paste(pasing,tv[w])
pasing <- gsub("and", "", pasing)
}
result <-c(result, pasing)
}
result <- data.frame( result) %>%
filter(!str_detect(result,"NA"))
return(result)
}
각 sentence별로 문자 열이 나누어 졌으면, 나누어진 문자열을 가지고 sentence를 2개로 나눌 것인가 아니면 여러개를 나눌 것인가를 정해주어야 한다.
아래코드 예제는 아래의 상황과 같다.
"나는 고요한 아침의 나라 대한민국에 살고 있습니다."
result_fun(1)을 사용하면, "나는", "고요한 "...... 으로 데이터가 나누어지고,
result_fun(2)을 사용하면 "나는 고요한", 고요한 아침의"... 으로 데이터가 나누어지고,
result_fun(3)를 사용하면, "나는 고요한 아침의". "고요한 아침의 나라"로 데이터가 나누어지는 것이다.
# sentence 갯수를 받아 데이터 정리 하기
result_fun <- function(x){
result = data.frame(result= "") %>%
filter(is.na(result))
for (i in 1:length(sentence)){
text <- str_split(sentence[i], " ", simplify = TRUE )
temp <- pasing_fun(text, x)
result <- rbind(result, temp)
}
return(result)
}
위와 같이 sentence의 갯수를 2개를 선택 하거나, 3개를 선택 하거나, 그 이상을 선택하여 분석 하였을때, 설비의 문제점을 쉽게 볼수 있다. graph_fun <- function(x){
p <- result_fun(x) %>%
group_by(result) %>%
count() %>%
arrange(desc(n)) %>%
filter(n > 2) %>%
ggplot(aes(result, n, fill=result))+
geom_bar(stat='identity')+coord_flip()
return(p)
}
graph_fun(2)
graph_fun(3)
graph_fun(4)
댓글 없음:
댓글 쓰기