시계열 데이터 전처리 | 시계열 데이터 분석 기초 Part.1 #Python #파이썬 상위 263개 베스트 답변

당신은 주제를 찾고 있습니까 “시계열 데이터 전처리 – 시계열 데이터 분석 기초 Part.1 #Python #파이썬“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://th.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 데이터 스테이션 이(가) 작성한 기사에는 조회수 6,539회 및 좋아요 77개 개의 좋아요가 있습니다.

시계열 데이터 전처리 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 시계열 데이터 분석 기초 Part.1 #Python #파이썬 – 시계열 데이터 전처리 주제에 대한 세부정보를 참조하세요

안녕하세요. 데이터 스테이션입니다.
매일 10분 데이터 분석은 금주 월/화/목/토요일 진행됩니다.
Q \u0026 A 는 댓글남겨주시면 취합 후, 토요일에 답변드리겠습니다.
감사합니다.
예제 데이터 다운로드 : https://blog.naver.com/data_station/222493262626 클래스101에서 Python 데이터 분석 강좌가 오픈되었습니다!
* Python 데이터 분석에 관한 자세한 강의를 더 들으시려면, 아래 클래스101 강의를 확인해보세요.
* 클래스 101 데이터 분석강의
Python활용 데이터 분석 기초 : https://class101.page.link/zX5T
Python Pandas 활용 실무 데이터 전처리 : https://class101.page.link/e5hQ
Python활용 실무 통계 분석 : https://class101.page.link/5cvM
Python을 이용한 실무 머신러닝 : https://class101.page.link/18c9
Python으로 제조/공정 데이터 분석 하기 : https://class101.page.link/CTgL
* 비즈니스 및 기업 강의 문의
[email protected]

시계열 데이터 전처리 주제에 대한 자세한 내용은 여기를 참조하세요.

3. 데이터 전처리 — PseudoLab Tutorial Book

시계열 데이터를 지도학습 문제로 변환 하기 위해서는 예측 대상이 되는 타겟 변수와 예측할 때 사용하는 입력 변수 쌍으로 데이터를 가공해야 합니다. 또한 딥러닝 모델을 …

+ 여기에 자세히 보기

Source: pseudo-lab.github.io

Date Published: 10/6/2022

View: 1131

시계열 데이터에서 전처리하는 방법 – ok-lab

시계열(Time-Series) 데이터에서 전처리 과정에서 수행하는 일은 결측치를 제거하는 것과 노이즈(Noise)를 제거하는 것이다.

+ 여기에 자세히 보기

Source: ok-lab.tistory.com

Date Published: 2/13/2022

View: 9150

[시계열분석] 시계열 데이터 전처리 실습(Python)(1)

[시계열분석] 시계열 데이터 전처리 실습(Python)(1) – 시간현실반영 및 Scaling. YSY^ 2021. 3. 8. 15:45. 320×100. 반응형. [시계열분석] 시계열 데이터 전처리 방향 …

+ 여기에 표시

Source: ysyblog.tistory.com

Date Published: 4/28/2022

View: 5799

시계열 데이터 전처리 – velog

시간의 흐름에 따라 관측치가 변하는 시계열(Time Series) 데이터의 전처리.

+ 여기를 클릭

Source: velog.io

Date Published: 4/27/2021

View: 8325

시계열 데이터 패턴 추출 (Feature Engineering) 1

에서 다운받을 수 있다. 데이터 전처리 과정. String to DateTime; Frequency 설정; 시계열 데이터 요소 추출 (Count_trend, Count_seasonal); rolling …

+ 더 읽기

Source: dsbook.tistory.com

Date Published: 3/6/2022

View: 871

AI를 위한 시계열 데이터 전처리 Video – MATLAB

시계열 데이터를 활용한 추세 분석, 장비의 이상 감지 등과 같은 AI 애플리케이션으로의 적용이 증가하고 있습니다. 이러한 시계열 데이터를 AI에 잘 접목시키기 …

+ 여기에 표시

Source: www.mathworks.com

Date Published: 8/2/2022

View: 3687

시계열 데이터 전처리 결과 확인 : pandas Series – coffee4m

API를 이용하거나, 직접 수집해 온 시계열 데이터에서 새로운 정보를 얻기 위해 파이썬 데이터 분석을 따라해 보고 있는 중입니다.

+ 여기에 표시

Source: coffee4m.com

Date Published: 10/29/2021

View: 5914

Lecture 8. 시계열 데이터 전처리 – 5 O L E

시계열 데이터 전처리. 5ole 2021. 3. 18. 18:51. Condition Number. Condition number가 클수록 변수들간의 scaling이 필요하거나 다중공선성이 나타남을 의미함 …

+ 여기를 클릭

Source: 5ohyun.tistory.com

Date Published: 6/12/2022

View: 439

주제와 관련된 이미지 시계열 데이터 전처리

주제와 관련된 더 많은 사진을 참조하십시오 시계열 데이터 분석 기초 Part.1 #Python #파이썬. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

시계열 데이터 분석 기초 Part.1 #Python #파이썬
시계열 데이터 분석 기초 Part.1 #Python #파이썬

주제에 대한 기사 평가 시계열 데이터 전처리

  • Author: 데이터 스테이션
  • Views: 조회수 6,539회
  • Likes: 좋아요 77개
  • Date Published: 2021. 3. 9.
  • Video Url link: https://www.youtube.com/watch?v=0ErbtpR9HQA

3. 데이터 전처리 — PseudoLab Tutorial Book

Cloning into ‘Tutorial-Book-Utils’… remote: Enumerating objects: 24, done. remote: Counting objects: 100% (24/24), done. remote: Compressing objects: 100% (20/20), done. remote: Total 24 (delta 6), reused 14 (delta 3), pack-reused 0 Unpacking objects: 100% (24/24), done. COVIDTimeSeries.zip is done!

시계열 데이터에서 전처리하는 방법

728×90

반응형

Contents

시계열(Time-Series) 데이터에서 전처리 과정에서 수행하는 일은 결측치를 제거하는 것과 노이즈(Noise)를 제거하는 것이다. 결측치와 노이즈는 예측 성능을 떨어뜨리는 녀석들 중 하나이기에 사전에 전처리 과정을 수행하여 처리한 후 작업을 수행하는 것이 옳다.

결측치 (Missing Values)

결측치는 말 그대로 값이 존재하지 않는 값을 의미한다. 예를 들어, 식당의 매출을 예측하는 경우 식당의 휴무일에는 매출이 존재하지 않을 것이다. 이와 같은 경우 이를 제거하고 예측하는 형태로 진행할 수 있을 것이다. 실제 데이터를 다룰 때 휴무일과 같은 경우로 데이터가 없을 수도 있고, 단순히 누락되었을 수도 있다.

일반적인 데이터의 구성에서는 큰 문제가 되지 않는다면 결측치를 제거하면 된다. 그러나, 시계열 데이터에서 결측치를 제거하게 되는 경우 그 시점의 평균과 분산의 왜곡을 가져오게 되고 이는 분석 결과에 치명적인 영향을 미칠 수 있다. 휴무일과 같은 데이터는 제거하면 되지만, 누락된 값인 경우 대체함으로써 평균과 분산에 왜곡을 가져오기 때문이다.

그러나 현실에서 접하는 대부분의 데이터는 항상 결측치가 발생한다. 특히 시계열은 시간의 흐름에 따라 그 시기에 데이터를 직접 수집하는 것이기 때문에 그 시기에 네트워크 이슈 혹은 센서 에러 등의 이유로 수집이 불가하면 결측치가 발생하게 되는 것이다.

시계열 데이터가 아닌 경우에는 일반적으로 평균이나 분산으로 대체하거나 결측치를 제거하면 그만이다. 그러나 시계열 데이터는 그렇게 처리할 경우 문제가 발생한다. 그렇다면 시계열 데이터에서의 결측치는 어떻게 처리할 수 있을까? 시계열 데이터는 시간의 흐름에 따라 데이터의 평균과 분산이 변하기에 이러한 특징을 잘 반영하는 방법론을 활용해야 성공적으로 결측치를 대체할 수 있다. 대체하는 방법은 다음과 같다.

Last observation carried Forward (LOCF): 직전에 관측된 값으로 결측치를 대체

직전에 관측된 값으로 결측치를 대체 Next observation carried backwrd (NOCB): 직후에 관측된 값으로 결측치를 대체

직후에 관측된 값으로 결측치를 대체 Moving Average / Median: 직전 N의 time window의 평균치/중앙값으로 결측치를 대체

그러나 결측치 전후의 패턴이 변화하는 구간인 경우에는 이와 같은 방식으로 처리할 경우 문제가 발생한다. 예를 들어, 주가를 예측하는 경우 상승 구간이거나 하락 구간에 결측치가 존재할 때는 이전 값의 평균으로 대체하게 되면 실제 값과 차이가 발생하게 된다. 이런 경우에는 선형 보간법(Linear interpolation)을 통해 해당 값을 찾을 수 있다.

선형 보간법(Linear interpolation)

선형 보간법은 통계적으로 이미 구해진 데이터들로부터 t시점과 t+1시점 사이의 값을 유추하는 형태를 의미힌다. 예를 들어 끝점 $(x_0, y_0)$와 $(x_1, y_1)$가 주어졌을 때, 그 사이에 위치한 $(x,y)$의 값을 추정하기 위해 다음과 같은 수식을 세울 수 있다.

\[ \frac{y-y_0}{x-x_0} = \frac{y_1 – y_0}{x_1 – x_0} \]

\[ y= y_0 + (y_1 – y_0) \cdot \frac{x-x_0}{x_1 – x_0} \]

위 경우에는 선형 보간법에 대해서만 다루었으나, 선형 보간법 외에도 비선형, 스플라인 보간법 등 다양한 보간법이 존재한다. 필요에 따라 다양한 형태로 사잇값을 보간할 수 있다. 비선형 보간법은 선형 함수가 아닌 비선형 함수를 근사 함수로 사용하는 것을 의미하고, 스플라인(Spline) 보간법은 전체 구간을 근사하는 것이 아닌, 소구간으로 분할하여 보간하는 방법을 의미한다.

좌: Linear interpolation, 우: Linear Polinomial

만약 누락된 값이 너무 많은 경우에는 위와 같은 방법으로 처리를 할 수 없다. 이때는 모델링을 통해 해당 부분을 예측하는 형태로 진행하여야 한다. 일반적인 데이터라면 기존에 수집된 데이터로 결측치를 잘 설명할 수 있으나, 시계열 데이터는 시간에 따라 변화하기에 이를 모델링하는 것은 어렵다. 그러나 최근에는 GAN에 기반한 시계열 생성 알고리즘으로 이 부분을 채우고자 하는 연구가 많이 진행되고 있다.

노이즈(Noise)

노이즈는 잡음을 의미하며, 의도하지 않은 데이터의 왜곡을 불러오는 모든 것들을 칭한다. 예를 들어, 음성 처리의 경우 주변의 소음으로 인해 음성 인식이 제대로 되지 않는다면 이때 소음을 노이즈로 판단한다. 시계열 데이터에서는 원래 분포를 왜곡하는 모든 요인을 칭한다.

최근 주식 시장에서는 코로나 사태로 인해 주가가 엄청나게 하락을 하게 되었다. 이 때 해당 부분을 노이즈로 볼 것인지, 아닌지를 판단함에 따라 제거할수도, 제거하지 않을수도 있다. 시계열 데이터에서 노이즈를 제거하는 방법을 Denosing이라고 한다.

가장 간단한 Denosing 방법으로는 Moving Average가 있다. Moving Average는 평균값으로 관측치를 대체하는 방식이며, 이를 통해 이상하게 튀는 값을 평할화(Smoothing)할 수 있다. 노이즈가 정말 많은 환경에서는 노이즈 자체가 평균이 되어버리는 경우가 있으나, 노이즈가 간혹 발생하는 경우에는 매우 효과적이다. 그렇다면 노이즈가 많은 환경에는 어떻게 처리를 해야할까?

노이즈가 많은 환경에서는 노이즈를 Smoothing 혹은 Filtering 하는 법이 있다. 현재 시계열에 발생하는 노이즈가 어떤 특정한 분포를 따른다고 가정하고 해당 분포의 값을 시계열에서 제거하는 형태로 진행한다.

\[ x_{n+1} + \xi = Ax_{n}\]

여기서 $\xi$가 어떤 특정한 분포를 따른다고 가정하고, 이를 근사한 값을 제거함으로써 원래 값을 복원할 수 있다. 따라서, $Ax_n$를 구한다음 $\xi$를 빼서 원래 시계열 구조를 찾는 것이다. 특정한 분포는 일반적으로 가우시안(Gaussian) 분포를 많이 사용한다.

필터링(Filtering)

노이즈를 제거하는 대표적인 필터링 방법은 가우시안 필터링(Gaussian Filtering), 쌍방 필터(Bilateral Filter), 칼만 필터(Kalman Filter)가 있다. 가우시안 필터링은 노이즈가 정규분포를 따른다고 가정하는 것을 의미하고, 쌍방 필터는 변곡점이 큰 지점을 뭉개버리는 특징을 갖는 가우시안 필터링의 단점을 보완해 데이터의 원 분포에 따라 발생하는 엣지(Edge)들을 더 잘 보존하는 방법이다.

가우시안 필터링(Gaussian Filtering)

가우시안 필터링은 시계열 데이터 뿐만 아니라 이미지 처리에서도 많이 사용하는 Filter 중 하나이며, 수식은 다음과 같다.

\[ G(x,y) = \frac{1}{2 \pi \sigma^2} \exp(-\frac{x^2 + y^2}{2 \sigma^2}) \]

위 수식을 살펴보면 가우시안 필터에서 결정해야할 파라미터는 $\sigma$이다. 일반적으로 $1\sigma$는 68%, $2\sigma$는 95%, $3\sigma$는 99.7%를 설명한다고 알려져있기 때문에 $3\sigma$까지 고려할 때 정확도가 가장 높다고 한다.

경제학에서는 기본적으로 세상의 모든 현상을 가우시안 분포로 설명한다. 그러나 이러한 분포는 주식과 같은 경제 분야에서는 전혀 들어맞지 않는 상황이 발생할 수 있다. 일반적으로 주식 시장에서는 극단적인 경우가 많이 발생하기에 이러한 경우를 팻 테일(Fat Tail)이라 부른다. 이는 정규분포의 양 끝 모양이 더 뚱뚱한 것을 의미한다.

쌍방 필터(Bilateral Filter)

가우시안 필터링은 노이즈를 제거하는데 있어 효과적이지만, 경계성이 뭉개지는 현상이 있다. 이러한 문제점을 보완한 필터링이 바로 쌍방 필터링이며, 수식은 다음과 같다.

\[ \text{BF}[I]_p = \frac{1}{W_p} \sum_{q\in S} G_{\sigma_s} (||p-q||) \cdot G_{\sigma_r} (||I_p – I_q||) I_q \]

칼만 필터(Kalmal Filter)

칼만 필터는 잡음이 포함된 과거 측정값에서 현재 상태의 결합분포를 추정하는 알고리즘이다. 어떠한 정보가 있을 때 해당 데이터는 mixture 모델임(GMM과 같이)을 가정한다. 즉, 다른 분포들의 결합이라는 것을 가정한다. 일반화된 분포를 가정하는 것이 아닌 데이터의 특정에 맞는 분포를 모델링할 수 있어 상당히 많이 사용되며 특히 이미지 트래킹 분야에서 많이 사용되는 필터링 중 하나이다. 수식은 다음과 같다.

\[ \mu_{\text{new}} = \frac{\mu_2 \sigma^2_1 + \mu_1 \sigma^2_2}{\sigma^2_1 + \sigma^2_2} \]

\[ \sigma^2_{\text{new}} = \frac{\sigma^2_1 \sigma^2_2}{\sigma^2_1 + \sigma^2_2} \]

728×90

[시계열분석] 시계열 데이터 전처리 실습(Python)(1)

728×90

반응형

[시계열분석] 시계열 데이터 전처리 방향 – 시간현실 반영, Scaling, 다중공선성 처리 : ysyblog.tistory.com/217

해당 포스팅은 위 포스팅에 이어 진행되는 실습입니다.

데이터 코딩은 아래 포스팅에 이어 진행됩니다.

[시계열분석] 시계열 변수 추출 실습(Python)(1) – 시계열 분해 (bike-sharing-demand dataset) :ysyblog.tistory.com/209

[시계열분석] 시계열 변수 추출 실습(Python)(2) – 이동평균/지연값/증감폭/그룹화 (bike-sharing-demand dataset) :ysyblog.tistory.com/210

[시계열분석] 시계열 변수 추출 실습(Python)(3) – 종속변수들과 독립변수들과의 관계를 파악하기 위한 시각화 (bike-sharing-demand dataset) :ysyblog.tistory.com/211

[시계열분석] 시계열 변수 추출 실습(Python)(4) – 시계열 데이터 준비(train/test set 분리) (bike-sharing-demand dataset) :ysyblog.tistory.com/212

[시계열분석] 기본 모델링 실습(Python) – 모델링 및 분석 성능 평가(bike-sharing-demand dataset) : ysyblog.tistory.com/215

시간현실반영

Trend 처리

Test 기간의 FE데이터를 알 수 있을까?

1) 과거 패턴이 반복될 것이다

2) 하나씩 예측하며 업데이트

raw_fe[‘count_trend’].plot() #1년마다 늘어났다가 줄어드는 패턴을 보임, 이를 활용해서 예측

len(raw_fe.loc[‘2012-01-01′:’2012-12-31’, ‘count_trend’]) #8784 len(raw_fe.loc[‘2011-01-01′:’2011-12-31’, ‘count_trend’]) #8760 raw_fe.loc[‘2011-02-29’, ‘count_trend’] #2/29일 데이터가 없음(윤달)

# 2012년 데이터에 2011년데이터를 넣음 # date duplicattion by rules raw_fe.loc[‘2012-01-01′:’2012-02-28’, ‘count_trend’] = raw_fe.loc[‘2011-01-01′:’2011-02-28’, ‘count_trend’].values raw_fe.loc[‘2012-03-01′:’2012-12-31’, ‘count_trend’] = raw_fe.loc[‘2011-03-01′:’2011-12-31’, ‘count_trend’].values #2012-02-29 데이터 만들기 step = (raw_fe.loc[‘2011-03-01 00:00:00’, ‘count_trend’] – raw_fe.loc[‘2011-02-28 23:00:00’, ‘count_trend’])/25 #일정한 스텝을 만든다음 step_value = np.arange(raw_fe.loc[‘2011-02-28 23:00:00’, ‘count_trend’]+step, #더함 raw_fe.loc[‘2011-03-01 00:00:00’, ‘count_trend’], step) step_value = step_value[:24] raw_fe.loc[‘2012-02-29’, ‘count_trend’] = step_value

# result of duplication raw_fe[‘count_trend’].plot() # 2011년과 2012년이 같아짐

# result of duplication raw_fe[‘count_diff’].plot()

지연값 처리

train에서 지연된 값은 test로 들어가면 안된다.(미래시점을 안다고 하고 반영한꼴이기 때문)

따라서 train_lag의 끝값들을(test셋의 영역에 들어간 값들)을 test의 값들로 채워야함

# calculation of lag data from Y 따라서 test셋을 따로 만든다. X_test_fe[‘count_lag1’] = Y_test_fe.shift(1).values X_test_fe[‘count_lag1′].fillna(method=’bfill’, inplace=True) X_test_fe[‘count_lag2’] = Y_test_fe.shift(2).values X_test_fe[‘count_lag2′].fillna(method=’bfill’, inplace=True) X_train_fe[‘count_lag2’].plot()

코드요약

### Functionalize ### duplicate previous year values to next one def feature_engineering_year_duplicated(raw, target): raw_fe = raw.copy() for col in target: raw_fe.loc[‘2012-01-01′:’2012-02-28’, col] = raw.loc[‘2011-01-01′:’2011-02-28’, col].values raw_fe.loc[‘2012-03-01′:’2012-12-31’, col] = raw.loc[‘2011-03-01′:’2011-12-31’, col].values step = (raw.loc[‘2011-03-01 00:00:00’, col] – raw.loc[‘2011-02-28 23:00:00’, col])/25 step_value = np.arange(raw.loc[‘2011-02-28 23:00:00’, col]+step, raw.loc[‘2011-03-01 00:00:00’, col], step) step_value = step_value[:24] raw_fe.loc[‘2012-02-29’, col] = step_value return raw_fe # target = [‘count_trend’, ‘count_seasonal’, ‘count_Day’, ‘count_Week’, ‘count_diff’] # raw_fe = feature_engineering_year_duplicated(raw_fe, target) ### modify lagged values of X_test def feature_engineering_lag_modified(Y_test, X_test, target): X_test_lm = X_test.copy() for col in target: X_test_lm[col] = Y_test.shift(1).values X_test_lm[col].fillna(method=’bfill’, inplace=True) X_test_lm[col] = Y_test.shift(2).values X_test_lm[col].fillna(method=’bfill’, inplace=True) return X_test_lm

결과분석

raw_all = pd.read_csv(location) # Feature Engineering raw_rd = non_feature_engineering(raw_all) # Data Split # Confirm of input and output Y_colname = [‘count’] X_remove = [‘datetime’, ‘DateTime’, ‘temp_group’, ‘casual’, ‘registered’] X_colname = [x for x in raw_rd.columns if x not in Y_colname+X_remove] X_train_rd, X_test_rd, Y_train_rd, Y_test_rd = datasplit_ts(raw_rd, Y_colname, X_colname, ‘2012-07-01’) # Applying Base Model fit_reg1_rd = sm.OLS(Y_train_rd, X_train_rd).fit() display(fit_reg1_rd.summary()) pred_tr_reg1_rd = fit_reg1_rd.predict(X_train_rd).values pred_te_reg1_rd = fit_reg1_rd.predict(X_test_rd).values # Evaluation Score_reg1_rd, Resid_tr_reg1_rd, Resid_te_reg1_rd = evaluation_trte(Y_train_rd, pred_tr_reg1_rd, Y_test_rd, pred_te_reg1_rd, graph_on=True) display(Score_reg1_rd) # Error Analysis error_analysis(Resid_tr_reg1_rd, [‘Error’], X_train_rd, graph_on=True)

처음 모델링했던 것보다 결정계수는 소폭 줄었지만, 변수들의 p-value도 많이 유의해졌고, 에러율도 많이 낮아졌다.

Scaling

scaler = preprocessing.MinMaxScaler() scaler_fit = scaler.fit(X_train_feR) X_train_feRS = pd.DataFrame(scaler_fit.transform(X_train_feR), index=X_train_feR.index, columns=X_train_feR.columns) X_test_feRS = pd.DataFrame(scaler_fit.transform(X_test_feR), index=X_test_feR.index, columns=X_test_feR.columns) X_test_feRS.describe().T

코드요약

### Functionalize ### scaling of X_train and X_test by X_train_scaler def feature_engineering_scaling(scaler, X_train, X_test): # preprocessing.MinMaxScaler() # preprocessing.StandardScaler() # preprocessing.RobustScaler() # preprocessing.Normalizer() scaler = scaler scaler_fit = scaler.fit(X_train) X_train_scaling = pd.DataFrame(scaler_fit.transform(X_train), index=X_train.index, columns=X_train.columns) X_test_scaling = pd.DataFrame(scaler_fit.transform(X_test), index=X_test.index, columns=X_test.columns) return X_train_scaling, X_test_scaling

결과분석

raw_all = pd.read_csv(location) # Feature Engineering raw_fe = feature_engineering(raw_all) ### Reality ### target = [‘count_trend’, ‘count_seasonal’, ‘count_Day’, ‘count_Week’, ‘count_diff’] raw_feR = feature_engineering_year_duplicated(raw_fe, target) ############### # Data Split # Confirm of input and output Y_colname = [‘count’] X_remove = [‘datetime’, ‘DateTime’, ‘temp_group’, ‘casual’, ‘registered’] X_colname = [x for x in raw_fe.columns if x not in Y_colname+X_remove] X_train_feR, X_test_feR, Y_train_feR, Y_test_feR = datasplit_ts(raw_feR, Y_colname, X_colname, ‘2012-07-01’) ### Reality ### target = [‘count_lag1’, ‘count_lag2’] X_test_feR = feature_engineering_lag_modified(Y_test_feR, X_test_feR, target) ############### ### Scaling ### X_train_feRS, X_test_feRS = feature_engineering_scaling(preprocessing.Normalizer(), X_train_feR, X_test_feR) ############### # Applying Base Model fit_reg1_feRS = sm.OLS(Y_train_feR, X_train_feRS).fit() display(fit_reg1_feRS.summary()) pred_tr_reg1_feRS = fit_reg1_feRS.predict(X_train_feRS).values pred_te_reg1_feRS = fit_reg1_feRS.predict(X_test_feRS).values # Evaluation Score_reg1_feRS, Resid_tr_reg1_feRS, Resid_te_reg1_feRS = evaluation_trte(Y_train_feR, pred_tr_reg1_feRS, Y_test_feR, pred_te_reg1_feRS, graph_on=True) display(Score_reg1_feRS) # Error Analysis error_analysis(Resid_tr_reg1_feRS, [‘Error’], X_train_feRS, graph_on=True)

처음 모델링했던 것보다 결정계수는 소폭 줄었지만, 변수들의 p-value도 많이 유의해졌고, 에러율도 많이 낮아졌다.

해당 포스팅은 패스트캠퍼스의 <파이썬을 활용한 시계열 데이터 분석 A-Z 올인원 패키지> 강의를 듣고 정리한 내용입니다

728×90

반응형

시계열 데이터 패턴 추출 (Feature Engineering) 1

시계열 데이터 분석을 위해서 사용하는 데이터는

https://github.com/cheonbi/OnlineTSA/tree/master/Data/BikeSharingDemand에서 다운받을 수 있다.

원본 데이터는 Kaggle에서 가져온 것으로

https://www.kaggle.com/c/bike-sharing-demand/overview

에서 다운받을 수 있다.

데이터 전처리 과정

String to DateTime Frequency 설정 시계열 데이터 요소 추출 (Count_trend, Count_seasonal) rolling() (Count_Day, Count_Week) 그룹화(temp_group) + 더미 변수(pd.get_dummies) 지연값 추출(count_lag1,2)

데이터에 관한 설명을 간단하게 하자면, 일단 X의 값을 가지고 자전거 수요량을 예측하기 위해서 만든 데이터 값이다.

Y와 관련된 값으로는 casual, registered, count가 있다.

casual : 자전거 서비스에 등록하지 않은 사람들의 자전거 사용량을 의미한다.

: 자전거 서비스에 등록하지 않은 사람들의 자전거 사용량을 의미한다. registered : 자전거 서비스에 등록한 사람들의 자전거 사용량을 의미한다.

: 자전거 서비스에 등록한 사람들의 자전거 사용량을 의미한다. count : 위의 두가지 수치를 더한 값으로, 총 자전거 사용량을 의미한다.

데이터 확인

1. String to Datetime

데이터를 불러오고 나서 확인하기 위해서 DataFrame을 출력한 결과이다.

가장 첫번째 Column인 datetime이 string형태로 되어있다.

시계열 데이터에서는 datetime에 입력된 형식의 datetime이라는 자료형이 있는데, 시계열 데이터 분석을 하기 위해서는 string으로 되어있는 datetime column의 데이터 형태를 datetime으로 변환해야 한다. 이때, pd.to_datetime() 함수를 이용한다.

# string to datetime if ‘datetime’ in raw_all.columns: raw_all[‘datetime’] = pd.to_datetime(raw_all[‘datetime’]) raw_all[‘DateTime’] = pd.to_datetime(raw_all[‘datetime’]) raw_all.info()

함수를 사용하고 난 뒤의 데이터 형식을 보면

(if문을 사용한 이유는 셀을 중복으로 실행하는 경우 Column이 너무 많아지거나 중복된 Column 이름으로 인해서 에러가 발생하는 것을 방지하기 위해서이다.)

.info()를 통해서 확인했을 때 가장 첫번째 Column의 데이터 형식이 datetime64[ns]인 것을 확인할 수 있다.

# set index as datetime column if raw_all.index.dtype == ‘int64’: raw_all.set_index(‘DateTime’, inplace=True) raw_all

이후에는 set_index() 함수를 통해서 datetime 형식으로 되어있는 데이터를 인덱스로 설정한다.

(inplace는 True일 경우에는 해당 변수에 저장되어 있는 내용을 변경한 값으로 저장하는 것,

False인 경우에는 변경된 내용은 별도로 두고 해당 변수는 상태를 그대로 유지하는 것)

인덱스 자체가 datetime의 값으로 표현되어 있는 것을 확인할 수 있다.

2. Frequency 설정

빈도(Frequency)란 사전적으로 “얼마나 자주”의 뜻을 가진 단어이지만, 시계열 데이터 분석에서 빈도는 분석에 주로 사용되는 시간의 단위라고 보면된다.

빈도를 설정하게 되면 위에서 우리가 인덱스로 설정한 datetime 데이터 형이 자동으로 맞춰준다.

이 기능을 하는 함수는 .asfreq(‘시간단위’)이다. 여기에서는 시간(Hour) 단위로 설정을 해주었다.

raw_all.asfreq(‘H’)

(시간은 ‘H’, 일(day)은 ‘D’, 주(Week)는 ‘W’ 등 한글자 알파벳을 통해서 시간의 빈도를 표현해준다. )

frequency를 시간으로 설정해 주고 DataFrame을 출력했을 때 확인할 수 있다.

.asfreq()를 통해서 빈도를 설정한다면 단순히 의미적으로만 시간의 단위를 설정해주고 끝나는 것인가?

그렇다면 굳이 컴퓨터가 그것을 알아야 할 이유는 무엇일까?

.asfreq()를 통해서 시간의 빈도를 설정하면 단순히 데이터 분석에서 주로 사용하는 시간의 단위를 설정해주는 것 뿐만 아니라,

데이터에 존재하지 않았던, 혹은 누락되었던 시간도 빠짐없이 새로 생긴다.

(다만, 이 때 새로 생성된 행에 대한 나머지 데이터들은 NaN값으로 채워진다. )

(다만, 이 때 새로 생성된 행에 대한 나머지 데이터들은 NaN값으로 채워진다. ) 새롭게 생성된 행들에서 NaN값을 채우기 위해서는 .asfreq()안의 method라는 인자를 통해서 채워줄 수 있다. method = ‘bfill’ : 뒤에 있는 데이터의 값을 그대로 가져와 NaN 값을 채우는 방식 method = ‘ffill’ : 앞에 있는 데이터의 값을 그대로 가져와 NaN 값을 채우는 방식

( .asfreq()의 method parameter 이외에도, .fillna() 등을 통해서 NaN 값들을 채울 수 있다. )

3. 시계열 데이터 요소 추출(Trend, Seasonal, Residual)

Seasonal Decompose

statsmodels.api(sm)을 이용해서

sm.tsa.seasonal_decompose() 함수를 이용하면 데이터 값을 Trend(경향), Seasonal(주기성), Residual(잔차)로 분리할 수 있다.

일단 기본적으로 Y값이 ‘count’ 특성이 어떤 형식으로 되어있는지 시각화를 통해서 확인한다.

# line plot of Y raw_all[[‘count’]].plot(kind=’line’, figsize=(20,6), linewidth=3, fontsize=20, xlim=(‘2012-01-01’, ‘2012-03-01’), ylim=(0,1000)) plt.title(‘Time Series of Target’, fontsize=20) plt.xlabel(‘Index’, fontsize=15) plt.ylabel(‘Demand’, fontsize=15) plt.show()

Y와 관련이 있는 데이터(casual, registered)들의 데이터와 count를 함께 시각화하여 확인해보자.

raw_all[[‘count’,’registered’,’casual’]].plot(kind=’line’, figsize=(20,6), linewidth=3, fontsize=20, xlim=(‘2012-01-01’, ‘2012-06-01’), ylim=(0,1000)) plt.title(‘Time Series of Target’, fontsize=20) plt.xlabel(‘Index’, fontsize=15) plt.ylabel(‘Demand’, fontsize=15) plt.show()

Model Parameter

seasonal_decompose() 에서 model parameter는 additive와 multiplicative 두가지를 입력으로 받는다.

additive : Trend + Seasonal + Residual로 데이터가 구성 되어있다고 가정을 하고 세가지 요소로 분리한다.

: Trend + Seasonal + Residual로 데이터가 구성 되어있다고 가정을 하고 세가지 요소로 분리한다. multiplicative : Trend X Seasonal X Residual로 데이터가 구성 되어있다고 가정을 하고 세가지 요소로 분리한다.

일반적으로 additive가 많이 쓰이고, multiplicative 방식으로 시계열 요소를 분리하는 것은 분리하는 데이터가 백분율 등의 비율을 나타내는 경우에 사용된다고 한다 .

(하지만, 둘 중 어느 방식을 택하는 것은 두가지를 모두 시행하고 시각화를 하여 더욱 적절한 데이터 분리 방식을 선정해야 한다.)

raw_all[‘count’] – seasonal_decompose(model = ‘additive’)

# split data as trend + seasonal + residual plt.rcParams[‘figure.figsize’] = (14, 9) sm.tsa.seasonal_decompose(raw_all[‘count’], model=’additive’).plot() plt.show()

(plt.rcParams[‘figure.figsize’] = (14,9)는 시각화 그래프 설정이므로 시계열 데이터 분석과는 무관한 부분이다. )

위에서부터 기존의 count 데이터, Trend, Seasonal, Residual을 나타내는 그래프이다.

raw_all[‘ count’] – seasonal_decompose(model = ‘multiplicative’)

# split data as trend * seasonal * residual sm.tsa.seasonal_decompose(raw_all[‘count’], model=’multiplicative’).plot() plt.show()

model = ‘additive’에서 반환된 그래프와 비교를 해보았을 때,

Trend, Seasonal에 대한 그래프는 어느정도 유사하지만, Residual에 관해서는 확실히 multiplicative보다는 additive가 더 적절한 그래프를 보여주고 있다는 것을 볼 수 있다.

Reference :

패스트 캠퍼스 파이썬을 활용한 시계열 분석 A-Z

AI를 위한 시계열 데이터 전처리 Video

시계열 데이터를 통한 분석과 이를 활용한 AI 모델링에 대한 수요가 계속해서 증가하고 있습니다. MATLAB®은 이런 시계열 데이터에 대해 AI 모델링을 위한 데이터 분석과 전처리에 좋은 툴이며, 다양한 분야의 고객들께서 시계열 데이터를 활용한 AI 모델링을 통해 예측 모형을 개발 및 활용하고 계십니다. 본 세션에서는 이런 시계열 데이터를 활용하여 AI 모델링에 적용하기 위한 시계열 데이터의 전처리에 대해 소개드리고자 합니다. 구체적으로, 시계열 데이터에 대한 분석 및 AI모델링을 위한 레이블링, AI를 위한 데이터 전처리에서 생길 수 있는 여러가지 어려움을 해결한 MATLAB의 방식을 소개 드리고자 합니다.

시계열 데이터를 가지고 처음 AI모델링을 시작하시는 초보자 분들부터 이미 잘 사용하고 계신 숙련자까지 MATLAB 기반으로 AI 모델링을 위한 데이터 전처리에 대해 그 과정과 내용에 대해 상세히 전달드릴 예정입니다.

시계열 데이터 전처리 결과 확인 : pandas Series

시계열 데이터 전처리 결과 확인 : pandas Series

API를 이용하거나, 직접 수집해 온 시계열 데이터에서 새로운 정보를 얻기 위해 파이썬 데이터 분석을 따라해 보고 있는 중입니다. 이번 포스팅에서는 파이썬 데이터 분석에서 빼놓을 수 없는 판다스 라이브러리를 이해해 보겠습니다. 데이터 분석에 필요한 데이터만 남기고 나머지를 날려버리는 데이터 전처리 과정을 간략하게 정리해본 후 그 결과로 나온 리스트 형태의 데이터를 pandas를 이용하여 표로 만들어보는 것이 목표입니다.

글의 순서

판다스 라이브러리 (pandas library)

업비트 API로 받아온 비트코인 데이터 전처리 과정과 결과

pandas 라이브러리로 시간에 따른 비트코인 가격 표 만들기

판다스 라이브러리 (pandas library)

판다스 라이브러리는 파이썬 데이터 분석에서 빼놓을 수 없는 유용한 분석 도구입니다. 데이터를 이해하기 위해서 주로 어떤 방법을 쓰고 계시나요? 대부분 그래프로 그려보거나, 표로 정리해보는 것일 겁니다. 표를 영어로는 테이블(table)이라고 합니다. 그래프나 테이블을 담당하는 대표적인 파이썬 패키지는 matplotlib와 pandas입니다. matplotlib 패키지를 이용하여 그래프를 그릴 수 있듯, 판다스(pandas) 패키지로는 테이블을 만들 수 있습니다. 그것도 눈에 잘 들어오는 형태로 말입니다. 여러차례 말씀드렸지만 파이썬에서 쓰는 패키지라는 용어는 다른 프로그래밍 언어의 라이브러리와 같은 의미입니다.

panads는 panel datas의 줄임말이며, 파이썬 데이터 분석에서 무척 많이 사용되는 라이브러리입니다. 판다스에서 제공하는 데이터 구조는 한 줄로 길게 줄지어놓은 1차원 배열 형태와 테이블 모양의 2차원 배열 행태의 2가지입니다. 1차원 배열 형태를 Series, 2차원 배열 형태를 DataFrame 이라고 부릅니다. 1차원 배열 형태는 리스트라는 파이썬 자료구조와 잘 대응됩니다.

판다스 라이브러리도 matplotlib 패키지처럼 기능이 방대합니다. 판다스만 전문적으로 다루는 책이 있을 정도입니다. 여기서는 데이터 분석에 유용한 기능 위주로 연습해 보겠습니다. 판다스의 Series는 리스트라는 자료구조와 대응된다는 사실을 기억해 주시기 바랍니다. 지난 포스팅에서 API로 받아온 데이터를 전처리 하고 난 결과가 바로 리스트 형태였습니다.

업비트 API로 받아온 시계열 데이터 전처리 과정과 결과

업비트 API를 이용하여 비트코인 가격 데이터를 수집한 후 전처리 과정을 알아봤는데요. 판다스 라이브러리를 사용하면 그래프가 아니라 테이블로 데이터를 확인할 수 있습니다. 일단 비트코인 가격 데이터가 파이썬 자료구조 중 리스트 모양으로 나오는 과정을 정리해보겠습니다.

(1) 업비트 API 분석하기

이 포스팅에서 원하는 시계열 데이터는 지난 20일간의 코인 시세입니다. 시계열 데이터 그래프에서 데이터를 비교하기 위하여 비트코인과 이더리움의 가격을 가져올 예정입니다. 아래의 API에서 market과, count를 바꾸면 코인 종류와 기간이 바뀝니다.

https://api.upbit.com/v1/candles/days?market=KRW-BTC&count=2

(2) 업비트 API를 포함하는 파이썬 함수 만들기

함수는 프로그램을 확장하고, 코드를 깔끔하게 만드는데 아주 중요한 요소입니다. 시계열 데이터를 수집하기 위해 API가 포함된 파이썬 함수를 만듭니다. 이때 함수에 넘겨주는 파라미터는 코인의 종류와 가격을 수집하는 기간입니다.

(3) 업비트 API로 가져온 데이터 확인

업비트 API를 이용하여 받아온 코인가격 데이터는 리스트 안에 딕셔너리가 들어있는 [ { }, { }, … { } ] 형태입니다. 각 딕셔너리 { }에는 시간 데이터와 코인 가격 데이터 등이 들어있습니다.

(4) 업비트 API로 가져온 데이터 전처리

시간에 따른 코인 가격이라는 시계열 데이터를 추출하기 위해서는 딕셔너리로부터 데이터를 추출해내야 합니다. 빈 리스트를 만들어 놓고 for 반복문으로 리스트 안에 있는 딕셔너리를 하나씩 훑으면서, 미리 정해놓은 key를 만날 경우, key에 대응되는 값을 리스트에 덧붙이는 방법을 사용합니다. 이 방법으로 시간을 담아놓은 리스트와 코인 가격을 담아놓은 리스트를 만들 수 있습니다.

(5) 데이터 전처리 결과 확인

데이터 전처리 결과는 시간 리스트와 코인 가격 리스트입니다.

데이터전처리01은 (1)~(5) 까지의 과정을 구현한 파이썬 코드입니다. 코드 실행결과도 연달아 나타내었습니다. 코드의 print() 부분을 유심히 봐 주시기 바랍니다.

실습코드 : 시계열 데이터 추출01 import requests import json import matplotlib.pyplot as plt #(1) UPbit API 분석하기 #(2) UPbit API를 포함하는 파이썬 함수 만들기 def get_coin_price(ticker,n_candle): url = (“https://api.upbit.com/v1/candles/days?market=%s&count=%d” %(ticker, n_candle)) print(url) raw_resp = requests.get(url) response = raw_resp.json() return response #(3) UPbit API로 데이터 가져온 후 확인 coin_price = get_coin_price(“KRW-BTC”,2) print(coin_price) #(4) UPbit API로 가져온 데이터 전처리 date = [] price = [] for i in range(0,len(coin_price)): date.append(coin_price[len(coin_price)-1-i][“candle_date_time_kst”]) price.append(coin_price[len(coin_price)-1-i][“trade_price”]) #(5) 데이터 전처리 결과 print(“— Data 전처리 결과 —“) print(date) print(price) 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 import requests import json import matplotlib . pyplot as plt #(1) UPbit API 분석하기 #(2) UPbit API를 포함하는 파이썬 함수 만들기 def get_coin_price ( ticker , n_candle ) : url = ( “https://api.upbit.com/v1/candles/days?market=%s&count=%d” % ( ticker , n_candle ) ) print ( url ) raw_resp = requests . get ( url ) response = raw_resp . json ( ) return response #(3) UPbit API로 데이터 가져온 후 확인 coin_price = get_coin_price ( “KRW-BTC” , 2 ) print ( coin_price ) #(4) UPbit API로 가져온 데이터 전처리 date = [ ] price = [ ] for i in range ( 0 , len ( coin_price ) ) : date . append ( coin_price [ len ( coin_price ) – 1 – i ] [ “candle_date_time_kst” ] ) price . append ( coin_price [ len ( coin_price ) – 1 – i ] [ “trade_price” ] ) #(5) 데이터 전처리 결과 print ( “— Data 전처리 결과 —” ) print ( date ) print ( price )

pandas 라이브러리로 시간에 따른 비트코인 가격 표 만들기

데이터 전처리 결과로 2개의 리스트가 나왔습니다. pandas 라이브러리를 사용해서 얼마나 가독성 좋게 데이터를 보여주는지 확인해보겠습니다. pandas 라이브러리를 사용하기 위해서는 먼저 pandas 라이브러리를 설치해야 합니다. 지금까지 계속 사용해오고 있는 replit 이라는 온라인 프로그래밍 환경에서는 패키지를 검색한 후 install 하면 되고, 윈도우나 맥 환경에서는 아래와 같이 설치합니다. 이 부분은 지난 포스팅 ‘업비트 REST API를 이용한 비트코인 가격 추출 파이썬 프로그래밍’을 참고하시기 바랍니다.

pip install panas

많은 데이터 전문가들은 pandas 라이브러리를 pd라는 별명을 써서 짧게 부릅니다. pandas의 Series 라는 클래스는 1차원 배열 형태의 데이터를 사용하는데, 1차원 배열의 각 값(values)에 인덱스(index)를 부여합니다. 아래는 srs라는 변수에 pandas의 Series를 이용하여 값을 담아두는 방법이며, 인덱스를 date로 부여한 경우입니다. srs의 값과 인덱스는 각각 print(srs.values), print(srs.index)로 확인할 수 있습니다.

pandas에 있는 Series를 사용하는 방법은 pandas.Series인데, 아래의 pd.Series는 pandas를 pd라는 별명으로 쓴다는 import pandas as pd를 코드 시작부분에 선언해놨을 경우 사용할 수 있습니다.

srs1 = pd.Series(price, date)

srs가 어떤 모양의 테이블인지를 확인하려면 늘 쓰던 print(srs)가 좋은 방법입니다. 인덱스를 부여하지 않았을 때는 0, 1, 2, 3 과 같은 숫자가 자동으로 부여됩니다. pandas.Series를 이용하면서 별도로 인덱스를 부여하지 않고, 자동으로 인덱를 부여하려면 아래처럼 pd.Series(price,date) 대신 pd.Series(price)를 사용하시면 됩니다.

srs2 = pd.Series(price)

여기까지 pandas 자료구조 중 Series를 이용하는 방법을 알아보았습니다. 데이터전처리02 코드를 실행하면 실행결과에서처럼 pandas를 이용한 전처리 결과를 확인하실 수 있습니다. 데이터전처리02 코드에 있는 print문 내부의 “

”는 빈 줄을 하나 삽입하라는 의미입니다. 출력된 결과물의 가독성을 높이기 위해 빈 줄을 추가해보았습니다. 덱스를 부여하지 않고, 자동으로 인덱를 부여하려면 아래처럼 pd.Series(price,date) 대신 pd.Series(price)를 사용하시면 됩니다.

실습코드 : 시계열 데이터 추출01 import requests import json import pandas as pd import matplotlib.pyplot as plt #(1) UPbit API 분석하기 #(2) UPbit API를 포함하는 파이썬 함수 만들기 def get_coin_price(ticker,n_candle): url = (“https://api.upbit.com/v1/candles/days?market=%s&count=%d” %(ticker, n_candle)) raw_resp = requests.get(url) response = raw_resp.json() return response #(3) UPbit API로 데이터 가져온 후 확인 coin_price = get_coin_price(“KRW-BTC”,2) #(4) UPbit API로 가져온 데이터 전처리 date = [] price = [] for i in range(0,len(coin_price)): date.append(coin_price[len(coin_price)-1-i][“candle_date_time_kst”]) price.append(coin_price[len(coin_price)-1-i][“trade_price”]) #(5) 데이터 전처리 결과 print(“– Data 전처리 결과 –“) print(date) print(price) #(6) pandas를 이용한 전처리 결과 확인 srs1 = pd.Series(price,date) srs1 = pd.Series(price) print(”

” + “– pandas를 이용한 전처리 결과 확인 –“) print(“index를 date로 부여할 경우 “) print(srs1) print(”

” + “index를 자동으로 부여할 경우 “) print(srs2) 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 import requests import json import pandas as pd import matplotlib . pyplot as plt #(1) UPbit API 분석하기 #(2) UPbit API를 포함하는 파이썬 함수 만들기 def get_coin_price ( ticker , n_candle ) : url = ( “https://api.upbit.com/v1/candles/days?market=%s&count=%d” % ( ticker , n_candle ) ) raw_resp = requests . get ( url ) response = raw_resp . json ( ) return response #(3) UPbit API로 데이터 가져온 후 확인 coin_price = get_coin_price ( “KRW-BTC” , 2 ) #(4) UPbit API로 가져온 데이터 전처리 date = [ ] price = [ ] for i in range ( 0 , len ( coin_price ) ) : date . append ( coin_price [ len ( coin_price ) – 1 – i ] [ “candle_date_time_kst” ] ) price . append ( coin_price [ len ( coin_price ) – 1 – i ] [ “trade_price” ] ) #(5) 데이터 전처리 결과 print ( “– Data 전처리 결과 –” ) print ( date ) print ( price ) #(6) pandas를 이용한 전처리 결과 확인 srs1 = pd . Series ( price , date ) srs1 = pd . Series ( price ) print ( ”

” + “– pandas를 이용한 전처리 결과 확인 –” ) print ( “index를 date로 부여할 경우 ” ) print ( srs1 ) print ( ”

” + “index를 자동으로 부여할 경우 ” ) print ( srs2 )

데이터전처리02 실행결과

— Data 전처리 결과 —

[‘2022-06-25T09:00:00’, ‘2022-06-26T09:00:00’] [27832000.0, 27697000.0]

— pandas를 이용한 전처리 결과 확인 —

index를 date로 부여할 경우

2022-06-25T09:00:00 27832000.0

2022-06-26T09:00:00 27697000.0

dtype: float64

index를 자동으로 부여할 경우

0 27832000.0

1 27697000.0

dtype: float64

마치며 …

API를 이용하거나, 직접 수집해 온 데이터에서 새로운 정보를 얻기 위해 파이썬 데이터 분석을 따라해 보고 있는 중입니다. 이번 포스팅에서는 파이썬 데이터 분석에서 빼놓을 수 없는 pandas 라이브러리를 활용해 보았습니다.

panads는 panel datas의 줄임말이며, 파이썬 데이터 분석에서 무척 많이 사용되는 라이브러리입니다. matplotlib 라이브러리를 이용하여 그래프를 그릴 수 있듯, 판다스(pandas) 라이브러리로는 테이블을 만들 수 있습니다.

판다스에서 제공하는 데이터 구조는 한 줄로 길게 줄지어놓은 1차원 배열 형태와 테이블 모양의 2차원 배열 행태의 2가지입니다. 1차원 배열 형태를 Series, 2차원 배열 형태를 DataFrame 이라고 부릅니다. 1차원 배열 형태는 리스트라는 파이썬 자료구조와 잘 대응됩니다. 이번 포스팅에서는 pandas의 Series를 이용하여 전처리 결과를 확인하였습니다. 다음 포스팅에서는 pandas의 DataFrame에 대해 알아보겠습니다.

함께 참고하면 더 좋은 글 :

1. 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 replit

2. 업비트 API로 이해해보는 REST API

3. 업비트 REST API를 이용한 비트코인 가격 추출 파이썬 프로그래밍

4. 업비트 시계열 데이터 가시화를 위한 전처리

5. 시계열 데이터 가시화 (2) 보고서용 파이썬 그래프 만들기

6. 파이썬 데이터 분석! 데이터 분석을 위한 코딩언어 파이썬

7. 알아두면 좋을 컴퓨터 작동원리. 폰 노이만 아키텍처

참고자료

UPbit(2020),일(Day) 캔들

Lecture 8. 시계열 데이터 전처리

Condition Number

Condition number가 클수록 변수들간의 scaling이 필요하거나 다중공선성이 나타남을 의미함

Condition number를 감소시켜야 함

1. Scaling

2. 다중공선성 제거 – VIF, PCA를 통해 변수 선택

3. 의존성이 높은 변수들에 패널티를 주는 정규화

Scaling

스케일링을 통해 변수간의 범위 설정

1. StandardScaler()

각 feature가 정규분포를 따른다는 가정

sklearn.preprocessing.StandardScaler().fit() sklearn.preprocessing.StandardScaler().transform() sklearn.preprocessing.StandardScaler().fit_transform()

2. minmaxScaler()

가장 많이 활용되는 알고리즘

0~1 / -1~1 사이의 값으로 변환

각 feature이 정규분포가 아니거나 표준편차가 매우 작을 때 사용

sklearn.preprocessing.MinMaxScaler().fit() sklearn.preprocessing.MinMaxScaler().transform() sklearn.preprocessing.MinMaxScaler().fit_transform()

3. RobustScaler()

minmax와 유사하지만 IQR을 사용해 25%, 75%값을 사용해 변환

outlier 영향을 최소화하며 적은 데이터에도 효과적임

sklearn.preprocessing.RobustScaler().fit() sklearn.preprocessing.RobustScaler().transform() sklearn.preprocessing.RobustScaler().fit_transform()

4. Normalizer()

각 feature를 전체 변수들의 크기로 나눠 변환

각 feature값은 원점으로부터 반지름 1만큼 떨어진 범위내로 변환

sklearn.preprocessing.Normalizer().fit() sklearn.preprocessing.Normalizer().transform() sklearn.preprocessing.Normalizer().fit_transform()

다중공선성 제거

독립변수들간의 상관관계 존재

1. X와 Y 상관관계 확인

2. X 변수들간의 상관관계 확인

3. Variance Inflation Factor (VIF)

독립변수를 다른 독립변수들의 선형회귀로 나타내, 가장 상호의존적인 변수 제거

특정 변수를 눈으로 보고 삭제 가능

+ Principal Component Analysis (PCA)

다차원인 독립변수행렬을 소차원으로 바꿔 상호의존적인 변수를 제거

특정한 변수를 제거하는 것이 아니라 눈으로 확인 힘듦

vif = pd.DataFrame() vif[‘VIF_Factor’] = [variance_inflation_factor(X_train_feRS.values, i) for i in range(X_train_feRS.shape[1])] vif[‘Feature’] = X_train_feRS.columns vif.sort_values(by=’VIF_Factor’, ascending=True)

VIF 작은 순으로 정렬시 몇 개까지가 효과적인지 분석

train : 12, 13 index test : 12, 13 index

+ 참고 자료 및 출처

김경원 < 파이썬을 활용한 시계열 데이터 분석 A-Z 강의 > ( 패스트캠퍼스 강의 )

키워드에 대한 정보 시계열 데이터 전처리

다음은 Bing에서 시계열 데이터 전처리 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 시계열 데이터 분석 기초 Part.1 #Python #파이썬

  • 데이터 분석
  • 데이터분석
  • 주피터
  • 주피터노트북
  • jupyter
  • jupyter notebook
  • python
  • 파이썬
  • 파이선
  • data
  • 데이터
  • 인공지능
  • 분식이
  • 분석
  • 데이터 투데이
  • 매일 10분 데이터
  • 데이터 전처리
  • 데이터전처리
  • 데이터가공
  • 데이터 가공
  • 엑셀
  • 파이썬 데이터
  • 파이썬 데이터 불러오기
  • 파이썬 설치
  • 아나콘다 설치
  • 아나콘다3
  • 아나콘다
  • python 아나콘다
  • 빅데이터
  • 데이터 교육
  • ainbd
  • 텐서
  • 판다스
  • pandas
  • 넘피
  • numpy
  • sklearn
  • 사이킷 런
  • 라이브러리
  • 패키지
  • 자료 구조
  • 데이터 시각화
  • 시각화
  • 그래프 출력
  • 시각화 분석
  • seaborn
  • 데이터 스테이션
  • 파이썬 데이터분석
  • 파이썬 판다스
  • python pandas
  • pandas 강좌
  • 파이썬 엑셀
  • pandas 데이터 분석
  • 판다스 데이터 분석
  • 파이썬 머신러닝
  • python pandas tutorial
  • 시계열
  • time series
  • ARIMA
  • prophet

시계열 #데이터 #분석 #기초 #Part.1 ##Python ##파이썬


YouTube에서 시계열 데이터 전처리 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 시계열 데이터 분석 기초 Part.1 #Python #파이썬 | 시계열 데이터 전처리, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  메이플 나로 스킬 트리 | [메이플환타] 리마스터 나로를 키우고 있다면 한번쯤!!! 봐야 할 영상 여기있습니다!!(극딜 버프 순서, 코강, 어빌리티, 하이퍼스탯, 하이퍼스킬, 유니온셋팅, 키셋팅+농장까지!) 상위 110개 답변

Leave a Comment