반응형
python에서 사용할 수 있는 시계열 데이터를 위한, 이상치 검출 라이브러리 패키지를 소개한다. 기본적인 통계적 이상치 검출을 포함한 이상치 검출을 위한 여러가지 함수들을 제공한다.
아래 예제는 전압 시계열 데이터에서 일정치 이상 전압의 감소율이 증가했던 구간을 찾는 코드이다.
이처럼 이미 정의된 이상치 검출 방법말고도, 사용자가 정의한 anomaly detection함수를 이용해서 이상치 구간을 찾을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# -*- coding: utf-8 -*-
"""
Created on Mon Apr 6 13:42:51 2020
@author: lgken
"""
import pandas as pd
from adtk.data import validate_series
from adtk.visualization import plot
from adtk.detector import ThresholdAD
from adtk.detector import CustomizedDetectorHD
import time
import numpy as np
#현재 시간 저장
currenttime = time.time()
#시계열 데이터 로드
df = pd.read_csv('./Voltage_timeseriesdata.csv', squeeze=True, encoding='euc-kr')
#anomaly detection plot의 x축으로 쓰일 date time시간 index데이터 계산
#dataframe index로 plot의 x축값이 설정되는데, 여기서는 코드 실행 시각을 시작시간으로 해서 x축 날짜 시간을 계산했다.
#현재 시간을 시계열 데이터
df['TotTime(sec)'] = df['TotTime(sec)'].astype('float64') + currenttime
#초 단위 datetime 설정
df['TotTime(sec)'] = pd.to_datetime(df["TotTime(sec)"], unit='s')
#시간 기준을 서울로 설정
df['TotTime(sec)'] = df['TotTime(sec)'].dt.tz_localize('UTC').dt.tz_convert('Asia/Seoul')
df=df.set_index('TotTime(sec)')
s2 = df[['Voltage(V)']]
#전압값 비교 타임 인터벌
dt=10
#사용자 정의 anomaly detection 함수
def myDetectionFunc(df):
df['dvdt'] = (df['Voltage(V)'] - df['Voltage(V)'].shift(dt))
print(df['dvdt'])
df['dvdt_prev'] = (df['Voltage(V)'].shift(dt) - df['Voltage(V)'].shift(2*dt))
print(df['dvdt_prev'])
df['dvdt2'] = (df['dvdt']-df['dvdt_prev'])
print(df['dvdt2'])
df['check'] = np.where((df['dvdt'] <= -0.01), 1, 0)
print(df['check'])
return (df['check'])
s2 = validate_series(s2)
#사용자 커스텀 detection함수를 detector로 설정
customized_detector = CustomizedDetectorHD(detect_func=myDetectionFunc)
anomalies = customized_detector.detect(s2)
#anomaly 위치 표시 plot설정
plot(s2, anomaly=anomalies, ts_linewidth=0.5, ts_markersize=0.7, anomaly_color='red', anomaly_alpha=0.3, curve_group=['Voltage(V)'], anomaly_tag='span');
|
cs |
https://www.arundo.com/arundo_tech_blog/adtk-open-source-time-series-anomaly-detection-in-python
매뉴얼
https://arundo-adtk.readthedocs-hosted.com/en/stable/
반응형
'Software coding skill(python, web등)' 카테고리의 다른 글
AWS로 가상 PC 서버 만들기 (0) | 2022.03.26 |
---|---|
[PyQt] 골든벨 게임 현황판 만들기 (1) | 2021.01.28 |
pyqt5 tutorial 참고 사이트 (0) | 2020.02.27 |
pyinstaller - exe 용량 줄이기 (0) | 2020.02.27 |
작업 스케줄러 - 관리자 권한 실행 (14) | 2020.02.27 |
Python 1 - 파일 복사 붙여넣기 / 파일 이름 카운트업 저장 (0) | 2020.02.19 |
pywinauto 11 - 열려있는 어플리케이션 확인 (0) | 2020.02.19 |
pywinauto 9 - popup menu 팝업메뉴 선택 (0) | 2020.02.17 |