raw 데이터에서 사이클을 추출하기 위해 가장 먼저 해야할 일은 변곡점(Peak 값과 Valley 값)을 찾아내는 것이다.
reversals 함수가 해당 기능을 하고 있다.
전체 코드
def reversals(series):
series = iter(series)
# 첫번째, 두번째 데이터 지정
x_last, x = next(series, None), next(series, None)
if x_last is None or x is None:
return
# 첫번째 범위 설정
d_last = (x - x_last)
# 첫 데이터(시작점)을 저장한 후 순회 시작
yield 0, x_last
index = None
for index, x_next in enumerate(series, start=1):
if x_next == x:
continue
# d_last와 비교할 범위 지정
d_next = x_next - x
# 비교하는 두 범위의 기울기 부호가 반대라면,
# 기울기 역전 구간이므로 x를 변곡점으로 저장
if d_last * d_next < 0:
yield index, x
# 다음 비교 범위 지정
x_last, x = x, x_next
d_last = d_next
if index is not None:
yield index + 1, x_next
사용 변수
- x_last
- x
- x_next
- d_last ( = x - x_last )
- d_next (= x_next - x )
초기 데이터가 다음과 같을 때,
x_last, x = next(series, None), next(series, None)
if x_last is None or x is None:
return
d_last = (x - x_last)
이런식으로 한칸식 뒤로 밀면서 d_last 와 d_next를 계산한다고 생각하면 된다.
변곡점 찾기
yield 0, x_last
index = None
for index, x_next in enumerate(series, start=1):
if x_next == x:
continue
d_next = x_next - x
if d_last * d_next < 0:
yield index, x
x_last, x = x, x_next
d_last = d_next
if index is not None:
yield index + 1, x_next
우선 첫번째 데이터는 첫번째 변곡점이기 때문에 yield로 값을 넣어준 후 series 순환을 시작한다.
만약 d_last 와 d_next를 곱했을 때 그 값이 음수라면, 그 말은 두 구간의 기울기의 부호가 다르다는 말이므로 변곡점이 된다.
데이터를 한칸씩 이동하면서 d_next 와 d_last의 기울기 부호를 통해 index 와 value를 저장해준다.
결과 보기
# 함수 실행 결과 (index,value)
reversal_lst = list(rainflow.reversals(load_dt))
reversal_lst
시각화하여 보면,
# 시각화
dic = {x:y for x,y in reversal_lst }
plt.figure(figsize=(8,4))
plt.plot(load_idx,load_dt)
plt.plot(list(dic.keys()),list(dic.values()),'ob',)
plt.axhline(0, color='white', lw=1)
plt.xticks(load_idx)
for i in dic:
plt.text(i,dic[i],
f'{i}',
color='white',
horizontalalignment='center',
verticalalignment='bottom'
)
plt.show()
변곡점이 잘 저장된걸 확인할 수 있다.
+ )
사용한 예시 데이터가 너무 단순한 것 같아 임의로 데이터를 다시 만들어서 적용해봤다.
기울기가 변화하더라도, 기울기 부호가 변하지 않는 경우 변곡점으로 들어가지 않는 것을 확인할 수 있다.
'🏷️Workplace > ANALYSIS' 카테고리의 다른 글
[RainflowCounting] count_cycles( ) (0) | 2023.10.17 |
---|---|
[RainflowCounting] extract_cycles( ) (0) | 2023.10.17 |
네이버금융 기업 실적 분석 데이터 크롤링 (2) | 2023.02.04 |
[크롤링&SQL] 할리스 매장 정보 크롤링 후 DB 저장 (0) | 2023.01.24 |
[크롤링] 할리스 커피 매장 정보 크롤링 (2) | 2023.01.24 |