728x90

작업 환경은 주피터 노트북 환경에서 작업이 이루어 졌으며, 먼저 라이브러리를 import 시켜 줍니다.

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

 

라이브러리가 import 되었으면, 이제 사용할 시계열 데이터를 불러옵니다.

 

data_frame_TNT = pd.read_csv("ImsData_csv/TNT_csv/TNT_test_1.csv")
print(data_frame_TNT)

입력된 시계열 데이터

저의 경우는 많은 양의 데이터중 일부만 사용해서 작업을 진행하였고, 이 데이터는 700만에서 900만정도의 값이 왔다갔다 거리는 시계열 데이터입니다.

 

이제 사용할만큼의 시계열 데이터를 지정하고 peak를 찾는 과정을 진행해봅시다.

사용할 시계열 데이터가 양이 적다면 지정하는 과정은 생략하셔도 됩니다.

 

- 먼저 전체 시계열에 0.1이상의 값 중 피크들을 찾는 코드입니다.

graph_data_or = data_frame_TNT['test_1']

x = graph_data_or[0:13365]

peaks, properties = find_peaks(x, height=0.1)

#print(f'Index of each peaks : {peaks} ')
#print(f'Index of each peaks : {properties["peak_heights"]} ')

peaks_num = peaks
peaks_value = properties["peak_heights"]

print(peaks_num)
print(peaks_value)

plt.plot(x)
plt.plot(peaks, x[peaks], "x")

 

0.1이상의 피크결과

저의 경우는 시계열데이터의 잡음이 많아서 결과가 안좋게 나왔지만 원래대로라면 정상적으로 이쁘게 나옵니다.

 

- 이제 일정 이상의 값을 가질때의 피크를 출력해보겠습니다.

 

graph_data_or = data_frame_TNT['test_1']

x = graph_data_or[0:13365]

peaks, properties = find_peaks(x, height=8200000)

#print(f'Index of each peaks : {peaks} ')
#print(f'Index of each peaks : {properties["peak_heights"]} ')

peaks_num = peaks
peaks_value = properties["peak_heights"]

print(peaks_num)
print(peaks_value)

plt.plot(x)
plt.plot(peaks, x[peaks], "x")

저의 경우는 820만이상의 값만 잡게 해봤습니다.

 

 

820만 값 이상일 때

- 이제 일정 값 사이의 피크를 찾아내는 방법을 적용해 봅시다

저의 경우는 700만에서 760만 사이의 값중 피크를 찾아내는 것을 적용해서 사용했습니다.

graph_data_or = data_frame_TNT['test_1']

x = graph_data_or[0:13365]

peaks, properties = find_peaks(x, height=(7000000, 7600000))

#print(f'Index of each peaks : {peaks} ')
#print(f'Index of each peaks : {properties["peak_heights"]} ')

peaks_num = peaks
peaks_value = properties["peak_heights"]

print(peaks_num)
print(peaks_value)

plt.plot(x)
plt.plot(peaks, x[peaks], "x")

 

700만에서 760만 사이의 피크값

시계열 데이터의 피크를 scipy와 matplotlib을 이용하여 검출하는 방법을 알아보았습니다.

728x90

+ Recent posts