본문 바로가기
비정형데이터분석

[비정형 데이터 분석] Peak로 특징 찾기

by rubyda 2021. 3. 24.
728x90
Introduction

 

비정형데이터분석 과목을 수강하며 공부한 내용을 정리하는 포스팅입니다. 해당글은 순천향대학교 빅데이터공학과 우지영 교수님이 진행하시는 "비정형데이터분석" 강의를 기반으로 작성되었습니다.

 

피크(Peak) 분석

다른 값들과 다르게 높게 발생하는 피크를 찾아 파형을 특징 짓는 분석을 말합니다. 그렇기 때문에 우리는 파형 데이터에서 가장 높은 피크를 추출해야 합니다. 

 

그렇다면 피크로 우리는 어떠한 이점을 얻을 수 있을까요??

 

첫번째로 피크 간의 거리 측정을 통해 신호의 주기성을 파악할 수 있습니다. 피크가 있던 구간마다 거리를 측정하면 발생하는 주기를 알 수 있는것입니다. 예를 들어서 환자의 심박수 데이터가 있다면 환자가 어떠한 주기로 심장이 빨리 뛰는지 등을 분석해볼 수 있겠습니다.

 

두번째로 피크 값 자체를 통해서 우리는 신호의 극단성을 파악할 수 있습니다. 피크라는 것이 파형 데이터에서 극하게 높은 값을 의미하게 때문에 그 값 자체로 우리는 극단성을 파악할 수 있는 것이지요.

 

한번 실습을 통해서 직접 피크(Peak)를 찾아보도록 하겠습니다. R에서 제공하는 "pracma" 패키지를 통해서 우리는 피크값을 찾을 수 있습니다.

 

먼저 신호 데이터를 직접 만들어 보도록 하겠습니다.

x<- seq(0, 1, len = 1024)
pos<- c(0.1, 0.13, 0.15, 0.23, 0.25, 0.40, 0.65, 0.76, 0.78, 0.81)
hgt<- c(4, 5, 4, 5, 6, 4.2, 2.1, 4.3, 3.1, 5.1, 4.2)
wdt<-c(0.005, 0.005, 0.006, 0.01, 0.01, 0.03, 0.01, 0.01, 0.005, 0.008, 0.005)
pSignal<- numeric(length(x))
for (i in seq(along=pos)){
  pSignal<-pSignal+hgt[i]/(1+abs((x-pos[i])/wdt[i]))^4
}

만든 데이터를 라인 형태로 그려주도록 하겠습니다.

plot(pSignal, type="l", col="navy")

다음 데이터를 봤을때 어떠한 부분이 피크라고 생각이 드나요?? 유독 높은 값들을 가지는 부분들이 보이지 않나요?? 그럼 우리가 피크라고 생각하는 값들을 R 함수를 통해서 구해보도록 하겠습니다.

 

findpeaks(pSignal, npeaks = 3, threshold = 4, sortstr = TRUE)

findpeaks 함수를 통해서 우리는 피크값들을 구할 수 있습니다. 우리는 피크값을 구하기 위해서 기준을 정해야 하는데 그때 사용되는 파라미터들이 npeakstherehold 입니다. npeaks는 출력할 상위 피크 갯수를 의미하고, thereshold는 피그 값을 몇 이상으로 할지를 의미합니다. 따라서 위코드를 설명하자면 피크 값이 4 이상인 값을 상위 3개를 피크로 설정하겠다라는 의미입니다. 

    [,1] [,2] [,3] [,4]
[1,] 5.510718  257  246  308
[2,] 4.975087  134  118  144
[3,] 4.544635  236  185  246

다음과 같이 출력했을때 첫번째 열의 값은 피크의 크기를 의미합니다. 값들을 보면 모두 4이상인 값들이 출력이 되었습니다. 두번째 열은 피크값들의 위치를 의미합니다. 

 

한번 시각화를 통해 피크 값들을 확인해보도록 하겠습니다.

x<- findpeaks(pSignal, npeaks = 3, threshold = 4, sortstr = TRUE)
points(x[,2], x[,1], pch=20, col='maroon')

x축은 피크의 위치로, y축은 피크의 값들로 그래프를 그립니다.

 

 

다음과 같이 피크값들이 그래프에 잘 찍힌것을 확인하였습니다.