////
Search
3️⃣

시계열의 탐색적 자료 분석

3.1 시계열 사용되는 자료 분석

일반적 데이터 응용 기법
히스토그램 데이터의 분포를 시각화하여서 데이터의 중심 경향과 분산을 확인
도표 그리기 시계열 데이터를 선 그래프, 산점도, 막대 그래프 등의 다양한 도표로 시각화하여 데이터의 패턴을 확인
그룹화 연산 데이터를 그룹으로 나누어 각 그룹에 대한 특성을 비교하고 분석 (예; 특정 기간에 대한 데이터를 그룹으로 나누어 각 그룹의 평을 비교하는 등의 분석을 수행)
시간 기법
데이터가 서로 시간 관계가 있는 상황에서 의미 있음

3.1 친숙한 방법

시계열 데이터와 비시계열 데이터에 적용하는 과정 탐색은 동일함
새로운 데이터를 다룰 때 기존의 질문
1.
긴밀한 상관관계를 가지는 열이 있나요?
2.
관심 대상 변수의 전체 평균과 분산은 무엇인가요?
⇒ 도표 그리기, 요약 통계 내기, 히스토그램 적용, 산점도 사용으로 해결 가능
시간 고려한 질문
1.
분석값의 범위가 무엇인지?
2.
다른 논리적 단위나 기간에 따라 값이 달라지는가?
3.
데이터가 일관성을 갖고 균등하게 측정 되었는가?
4.
아니면 시간이 흐르면서 측정이나 동작 방식에 변화가 있었는가?
⇒ 히스토그램이나 산점도, 요약통계 + 시간축 고려
<그룹화 연산>

3.1.1 도표 그리기

R이 제공하는 EuStockMarkets 시계열 데이터셋(입회일business day만 포함)
head ()함수
데이터 프레임이나 배열의 처음 몇 개의 행을 반환하는 함수
기본적으로 처음 6개의 행을 반환(사용자가 원하는 개수를 지정할 수도)
head 함수
plot() 함수
데이터를 서로 다른 시계열 그래프로 자동 분할할 수 있음
mts 객체 사용(다양한 시계열 동시에 다룸/ 단일 시계열 ts 객체 사용)
plot 함수
class함수
R 객체의 클래스(class)를 반환하는 함수
frequency 함수
데이터의 연간 빈도를 알아냄
start와 end함수
일련의 데이터에서 처음과 마지막을 알아냄
frequency 함수
class 함수
start 와 end 함수
window 함수
데이터에서 시간의 한 부분 범위를 얻을 수 있음

3.1.2 히스토그램

히스토그램(Histogram)
도수분포표를 그래프로 나타낸 것
가로축 : 계급
세로축 : 도수(횟수나 개수 등)
히스토그램 + 시간축
시간상 인접한 데이터간의 차이를 구할 수 있음
차이에 대한 히스토그램을 측정할 수 있음
예상치 못한 관점에서 데이터를 바라볼 수 있음
hist()와 hist(diff())함수
히스토그램 생성 함수, 주어진 데이터 차분을 계산하는 함수
숨기기
NOT DIFF 데이터의 내제된 추세 반영한 결과 ⇒넓게 퍼져 있고 정규분포를 따르지 않음
DIFF 추세를 제거하고 시간상 인접데이터 차이를 구함 ⇒정규분포를 따르는 형태
추세를 제거하기 위해 시간상 인접한 데이터의 차이 구하면, 정규 분포를 따르는 형태로 변화함
데이터 샘플링 및 통계 요약을 하거나 질문을 던질 때 시간 규모에 관심을 가져야 함
장기 도표나 차분 히스토그램 시간 규모에 따라 달라짐

3.1.3 산점도

산점도(Scatter plot)
비시계열 , 시계열 데이터 모두 유용함
두 변수의 상관관계를 점으로 나타낸것
가로축 : 계급
세로축 : 도수( 횟수나 개수 등)
산점도 + 시간축
특정 시간에 대한 두 변수의 관계를 결정할 수 있음
두 변수의 시간에 따른 각각의 변수 값 변동이 갖는 연관성을 결정할 수 있음
두 주가 지수에 대한 산점도 예시
plot 함수 시간에 따른 서로 다른 두 주식의 가치 매우 강한 상관 관계가 있어 보임
diff() 함수로 구한 두 주식의 일일 가치 변동 실제 보이는 만큼 상관관계가 강하지 않음
lag 함수
시간을 미루는 함수
lag 함수를 적용한 산점도
시간 상 먼저 알게 된 주가의 변동으로 나중의 다른 주가의 변동을 예측해야 함
산점도 확인하기 전 두 주가 중 하나를 1만큼 시간 상 앞으로 당겨야 함(lag 함수)
두 축의 상관 관계 사라진 것 확인 가능
즉, 한 변수로 다른 변수를 예측하지 못함
시간에 따른 변화나 서로 다른 시점의 데이터 사이의 관계가 데이터 동작 방식을 이해하는데 유익한 정보인 경우가 많음

3.2 시계열에 특화된 탐색법

- 시계열 분석시 주요 개념
정상성stationarity
자체상관self correlation
허위상관spurious correlation
위 개념을
롤링윈도와 확장 윈도 함수
자체상관함수self correlation function
자기상관함수autocorrelation function
편자기함수partial autocorrelation function 의 기법에 적용함

3.2.1 정상성 이해하기

직관적인 정의
정상 시계열에서 측정된 시계열은 시스템의 안정된 상태를 반영함
정상 시계열은 시간이 경과해도 안정적인 통계적 속성을 가짐
평균, 분산이 시간에 따라 일정
정상이 아님을 보여주는 특징(예:AirPassengers 데이터)
평균값이 일정하게 유지되기 보다는 시간에 따라 증가함
연간 최고점과 최저점 사이의 간격이 증가하므로 분산이 시간에 따라 증가함
강한 계절성이 보임
AirPassengers 데이터셋에 대한 도표
정상성의 정의와 증강된 디키-풀러 검정(augmented Dickey-Fuller Test)
정상 과정 : 모든 시차 k에 대해 yt,yt+1,...,yt+ky_t,y_{t+1},...,y_{t+k}의 분포가 t에 의존적이지 않은 것
단위근unit root
확률보행random walk
yt=ϕyt1+ety_t=ϕ*y_{t-1}+e_t
yty_t는 현재시간 t의 시계열 값
ϕϕ는 이전 시간 t-1의 값에 곱해지는 변화율
yt1y_{t-1}는 이전시간 t-1의 시계열 값
ete_t는 현재 시간 t의 무작위 오차항을 나타냄
ϕ=1, 현재시간 값은 이전 시간 값에 변화 없이 무작위한 오차항이 더해진 것으로 나타남 이 경우 시계열 데이터에는 단위근이 존재하게 됨 데이터의 평균 주위로 계속해서 무작위하게 움직이게 되고 시계열 데이터가 추세를 따르지 않고 무작위하게 움직인다는 것을 확인할 수 있음
ADF 검정(augmented Dickey-Fuller Test)
디키-풀러 검정 Δyt=ytyt1=(ϕ1)yt1+etΔy_t=y_t-y_{t-1}=(ϕ-1)*y_{t-1}+e_t ΔytΔy_t는 시계열 데이터의 차분 ϕ 는 추정된 파라미터 값 ϕ 값이 1인지에 대한 검정은 yt1y_{t-1}에서의 파라미터가 0인지에 대한 t-검정으로 볼 수 있음
이러한 검정들이 정상성 문제를 완벽히 판별할 수 없음
이 검정들은 단위근과 준 단위근을 구분하기 어려움
거짓 양성이 발생할 수 있음
검정이 특정한 한계점을 가지고 있으며, 모든 종류의 비정상 시계열 문제를 검정하지 않음
<NOTE > 귀무가설의 대안 설정 : KPSS 검정
ADF 검정 Augmented Dickey-Fuller Test은 단위근의 귀무가설을 상정함
KPSS 검정 Kwiatkowski-Phillips-Schmidt-Shin Test은 정상과정의 귀무가설을 상정함
실전
비정상성과 모델 평가
정상성이 아닌 시계열 모델은 시계열의 평가 지표가 달라짐에 따라 정확도가 달라짐
모델의 평균을 추정하는 데 비정상 평균과 분산을 사용하면 시간이 지날 수록 모델의 편향과 오차가 달라지며, 모델의 신뢰도가 저하될 수 있음
시계열의 정상화 위한 변환
분산이 변화하는 경우에 로그와 제곱근 사용함
추세는 차분을 구해 제거함(단 3회 이상 차분 계산 시 정상성 문제 해결 힘듦)
정규성normality 가정
데이터가 정규 분포를 따른다는 것의 의미
예측 모델링을 위해 사용되는 많은 통계 기법들은 종속 변수가 정규 분포를 따른다고 가정함 박스-콕스Box-Cox 변환은 종속의 변수 분포를 정규 분포에 가깝게 만들기 위해 사용됨
변환의 필요성 검토
데이터 변환 전 원본 데이터 간의 거리와 패턴을 고려
변환 후에도 중요 정보가 유지되는지 검토

3.2.2 윈도우 함수 적용

롤링 윈도
시계열에 일반적으로 특화되어 사용되는 함수
데이터 압축하거나 평활화하기 위해 사용되며 데이터를 취합함
시계열 데이터의 특징을 잘 이해하고 시각화함
R의 filter() 함수
주어진 시계열 데이터에 대해 주어진 필터(가중치)를 적용하여 필터링 된 결과를 반환
이동 평균 및 계열의 선형함수와 관련된 다른 계산을 할 수 있음
## rnorm 함수로 정규분포를 따르는 난수를 100개 추출합니다 x <- rnorm(n=100, mean=0, sd=10) + 1:100 ## rep 함수로 1/n 값을 n번 반복하는 배열을 만드는 함수를 만듭니다 ## mn에 rep함수를 지정 mn <- function(n) rep(1/n, n) plot(x, type = 'l', lwd = 1) ## 기본 R의 filter 함수로 롤링 평균을 계산합니다. 각각 5개, 50개 단위로 롤링 합니다 ## mn(5) : 윈도우 수가 5개 간격으로 평균계산 ## mn(50) : 윈도우 수가 50개 간격으로 평균 계산 ## lty = 2 : 빨강 , lty = 3 : 녹색 lines(filter(x, mn( 5)), col = 2, lwd = 3, lty = 2) lines(filter(x, mn(50)), col = 3, lwd = 3, lty = 3)
R
복사
롤링 평균 평활화로 탐색적 곡선 두개를 만듬
이 곡선 이용하여 노이즈가 많은 데이터의 추세를 찾음
선형동작의 어떤 종류의 편차가 단순한 노이즈인지 조사해볼 수 있음
filter함수는 일차변환에 기반하므로 일차결합하지 않은 함수에서는 사용할 수 없음
zoo 패키지의 rollapply함수를 사용하는 것이 유용함
## 기능을 좀 더 '사용자 정의'하여 사용할 수도 있습니다. install.packages("zoo") require(zoo) ## x를 zoo 객체로 만들어 각 데이터를 인덱싱 해 줍니다 ## rollapply 함수는 데이터, 윈도우크기, 적용함수, 롤링적용 정렬 방향, ## 윈도우크기만큼 데이터가 없어도 적용할 것인가? 등의 인자 값을 지정합니다 ## rollapply 함수는 이동평균이나 합계(sum()) 함수같은 연속연산이 가능 ## align left 미래에서 과거 방향으로 이동 평균 / align right는 과거에서 미래 방향으로 이동평균 ## 미래데이터를 사용할때는 사전관찰 문제가 발생할 수 있음 ## partial = True 윈도우가 20일때, 널값이 있어 19개의 데이터포인트만 있어도 계산한다 f1 <- rollapply(zoo(x), 20, function(w) min(w), align = "left", partial = TRUE) f2 <- rollapply(zoo(x), 20, function(w) min(w), align = "right", partial = TRUE) plot(x, lwd=1, type='l') lines(f1, col=2, lwd=3, lty=2) lines(f2, col=3, lwd=3, lty=3)
R
복사
<시계열을 위한 R의 다양한 옵션>
ts 객체
균등한 간격의 완전한 시계열을 가정
시계열의 시작, 끝, 빈도만을 저장함
연도와 월같이 반복되는 주기 지원
zoo 객체
타임스탬프를 색인 속성으로 저장(균등한 주기적인 시계열을 요구하지 않음)
수직이나 수평으로 출력
벡터나 행렬
확장 윈도expanding window
시계열 분석에서 사용되는 윈도(window) 기법중 하나
롤링윈도rolling window와 달리, 일정한 크기의 윈도를 유지하는 대신 데이터를 확장하여 시계열 전체 데이터를 포함할 때까지 윈도를 확장함
안정적인 요약통계를 추정시 의미있음
시간에 따른 검정 통계량test statistic의 추정치 확실
시스템이 정상일 때 가장 잘 동작함
더 많은 정보 수집:실시간으로 요약통계를 추정할 때, 온라인online 상태로 유지하는데 유용함
# 확장 윈도우 plot(x, type = 'l', lwd = 1) lines(cummax(x), col = 2, lwd = 3, lty = 2) # 최대값 lines(cumsum(x)/1:length(x), col = 3, lwd = 3, lty = 3) # 평균
R
복사
빨강색 선: 최대값, 연두색점선: 평균
데이터의 특정 패턴을 나타내는데 사용
확장 윈도를 사용하여 계산한 최대값은 시계열 데이터의 전체적인 추세를 고려하여 증가하므로 확장윈도를 단조함수로 볼 수 있음
단조함수: 함수값이 증가하거나 감소하는 특성을 가지는 함수
확장 윈도의 장기적인 기억 때문에 근본적인 추세가 덜 두드러지고, 보다 부드러운 패턴을 나타냄, 롤링 평균보다 더 낮음
cummax()cummin() 함수는 각각 누적 최대값과 누적 최소값을 계산하는 함수
cumsum() 함수를 활용하여 누적 합계를 구할 수도 있음
시계열 데이터 x를 선 그래프로 그린후 cummax()함수 사용해 x의 누적 최대값 계산(시계열 데이터에서 각 지점까지의 최대값을 누적하여 계산한 것)
cumsum() 함수를 사용해 x의 누적 합계를 계산하고 이를 각 데이터 포인트까지의 평균으로 나누어 평균을 구함
첫번째 인수 x는 롤링 통계량을 계산할 데이터 자체
두번째 인수seq_along(x)는 데이터 x의 길이에 따라 순차적인 정수를 생성, 해당 데이터의 길이에 따라 윈도의 크기를 동적으로 조정하는 인자로 사용
function(w) max(w)는 각 이동 창에 대해 최대값을 계산하는 함수를 정의
function(w) mean(w)는 각 이동 창에 대해 평균을 계산하는 함수를 정의
사용자 정의 롤링 함수
적용 가능한 상황에서만 고려해야 함
특정 도메인 지식이 유용한 상황에서 특히 유용하게 사용될 수 있음
도메인 지식 활용
주식 시장 데이터에서는 이동 평균 이상의 지표를 사용하여 특정 패턴을 탐지
노이즈 제거
데이터에서 출렁이는 장치의 노이즈와 같은 추세가 없는 패턴을 제거하기 위해
시계열 데이터의 신호와 노이즈를 분리하고 깨끗한 신호를 추출
패턴 탐지
혈당 증가와 같은 단조로운 패턴을 탐지하여 건강 상태를 모니터링하는 데 사용

3.2.3 자체상관의 파악과 이해

‘자체상관’: 특정 시점의 값이 다른 시점의 값과 상관관계가 있다
ex) case1: 5월15일의 온도가 높아질때 8월15일의 온도도 같이 높아지는 상관관계(상관관계 有)
case2: 5월15일의 온도 정보만으로는 8월15일의 온도 범위의 어떤 정보도 알 수 없음(상관관계 無)
‘자기상관’: 특정 시점에 고정되지 않으며 자체상관을 일반화한 것, 특정 시점에 고정거리를 갖는 두 시점에 상관관계가 존재하는지와 같은 좀 더 일반적인 질문을 던져 볼 수 있음
시계열 데이터의 성질을 분석하는데 있어서 중요하게 활용되고 있는 것이 상관도표(Correlogram) 상관도표는 Auto Correlation Function(ACF)과 Partial Auto Correlation Function(PACF) 중 하나를 그래프로 표현한 것. 상관도표를 활용하여 현 시점의 자료와 시점의 차이(lag)를 가지는 자료를 비교하여 어떤 관계를 가지고 있는지를 분석할 수 있음. 즉, 상관도표를 활용하여 시점의 차이의 영향력을 알아볼 수 있음.
자기상관(Auto Correlation) 기능
‘계열 상관’이라고도 알려져 있음
어떤 신호와 자신을 지연함수로 시간상 지연 이동한 신호 간의 상관관계
상관값이 두 변수 사이의 선형 관계의 크기를 측정하는 것처럼 자기상관은 시계열의 시차 값(Lagged Values) 사이의 관계를 측정
시간의 흐름에 따라 독립적이지 않고 과거의 데이터의 영향을 받는 상관관계
ex) 오늘 주식의 가격이 어제 가격에 영향을 받고 내일의 가격에 영향을 줌 → 이러한 경우 시계열 자료는 자기상관관계를 갖는다
시간에 따른 상관 정도를 나타내기 위해 사용하는 통계량 → 자기 상관 함수
자기 상관 함수(Auto Correlation Func, ACF) 특징
시간에 따른 상관 정도를 나타내기 위해 사용하는 함수
ACF의 주기성 = 원래 과정 주기성
주기 함수들의 합의 자기 상관 = 각 개별 함수에 대한 자기 상관의 합
시차 = 0 인경우, 모든 시계열의 자기 상관 계수 = 1
ACF는 양과 음의 시차에 관해서 대칭
0이 아닌 유효한 ACF 추정을 결정하는 통계적 규칙은 +/-1.96 x sqrt(n)의 임계영역 사용하는 것
편자기 상관 함수(Partial Auto Correlation Func, PACF) = 부분 자기 상관 함수
어떤 것들에 대한 상관관계를 보려고 할 때, 그에 영향을 주는 요소들을 제외하고 상관관계를 볼 때 PACF 를 이용
자신에 대한 그 시차의 편상관
두 시점 사이에 존재하는 모든 정보 고려
편자기 상관 함수(PACF) 특징
시간에 따른 시차의 편상관정도를 나타내기 위해 사용하는 함수
어떤 데이터가 유용한 정보를 가지고, 어떤 데이터가 단기간의 고조파인지 보여줄 수 있음

자기 상관 함수(ACF) VS 편자기 상관 함수(PACF) - 노이즈가 없는 경우

두 사인 함수와 각 함수에 대한 ACF, PACF 도표

정상 데이터의 ACF는 0으로 빠르게 떨어져야함. 비정상 데이터의 경우, 시차가 1일 때의 값은 큰 양수

자기 상관 함수(ACF) VS 편자기 상관 함수(PACF) - 노이즈가 있는 경우

노이즈가 많은 두 사인 곡선과 이 둘의 합. ACF, PACF 도표

결론
어느 시점까지의 데이터가 현재 시점에 영향을 주는지 연산하는 함수
AR, MR 모델 적합성을 설정할때 필요한 함수(절단값으로 설정됨)
절단값: 아래 그림 중 값이 파란색 부분으로 들어오기 직전의 값

AR/MA 모형과 ACF/PACF 의 관계

AR(p)
MA(q)
ACF
점차적으로 감소
시차 q 이후에 0
PACF
시차 p 이후에 0
점차적으로 감소
참고

AR (Autoregression / 자기회귀)

이전 관측값의 오차항이 이후 관측값에 영향을 주는 모형 P 시점 전의 값이 현재 값에 영향을 줌 ex) ar(1)은 1시점 전에 의해 현재시점이 영향을 받는 모형, ar(2)는 2시점 전까지에 의해 현재 시점에 영향을 주는 모형

MA(Moving Average / 이동평균 모형)

관측값이 이전의 연속적인 오차항의 영향을 받는다는 모형 데이터의 평균값 자체가 시간에 따라 변화하는 경향을 시계열 모형으로 구성 한 것 ex) ACF는 3시점 이후 절단점을 보이고 PACF가 빠르게 감소하면 MA(2) 모형이라고 볼 수 있음
참고사이트

3.2.4 허위상관

허위 상관(Spurious Correlation)을 나타내는 시계열의 특징
엄청나게 강한 상관관계를 가지고 있는 것처럼 보이지만, 그 결과를 설명하는 어떤한 원인가설도 없는 경우(인과 관계를 설명할 수 없는 경우)를  허위 상관관계라고 말함
근본적인 추세를 가진 데이터 → 정상 시계열보다 정보가 더 많기 때문에 여러 데이터가 함께 움직일 가능성이 높음
계절성을 가진 데이터 → 핫도그 소비와 익사(여름) 사이의 허위 상관관계
시간이 지나면서 변한 데이터의 수준이나 경사의 이동 → 무의미하게 높은 상관관계를 가진, 아령처럼 생긴 분포도를 생성
누적 합계 → 상관관계를 실제보다 더 좋아 보이게 만들기 위한 속임수로 사용

수영장에 빠져 익사한 사람 수와 니콜라스 케이지가 출연한 영화 수의 허위 상관

일부 허위상관은 놀라울 정도로 설득력이 있어 보임(출처: https://perma.cc/6UYH-FPBX)
공적분(Cointegration)과의 관계
두 시계열 사이의 진짜 관계
공적분허위 상관 모두 높은 상관관계가 관측되어 이를 구별하는 것은 어려움
허위 상관은 어떤 관계도 없어도 되지만, 공적분 시계열은 서로 밀접한 관련성을 가짐
ex) ‘술 취한 사람과 그의 강아지’

3.3 유용한 시각화

데이터 시각화 : 데이터 분석 결과를 시각적으로 명확하게 표현하고 의사소통하는 것
데이터를 한 눈에 이해할 수 있도록 함.
→ 시계열의 완벽한 탐색적 분석의 핵심은 그래프이다.
데이터 시각화의 효과
분석할 때, 방대한 데이터에서 이상치, 패턴 등 주요 정보를 발견할 때 용이함.
공유할 때, 사용자의 흥미 유발 및 몰입도를 제고시킬 수 있음.
따라서, 일반적인 질문의 해답을 구할 수 있는 방향의 시각화가 필요함.
복잡도에 따라 활용할 수 있는 다양한 시각화 기법
종합적인 시간 분포도를 이해하기 위한 1차원 시각화
시간에 따른 여러 측정치의 전형적인 궤적을 이해하기 위한 2차원 히스토그램
두 개의 차원을 차지하는 시간, 또는 차원을 전혀 차지하지 않지만 내재된 시간에 대한 3차원 시각화

+ 데이터

3.3.1 1차원 시각화

여러 측정의 구성 단위가 있는 경우 시계열을 동시에 고려해야 함.
시각적으로 누적하여 시간에 따른 개별 분석 단위 강조하기
전체 회원을 대상으로 ‘붐비는’ 시기를 나타내거나 특정 회원의 ‘전체 활동 기간’ 중 활발했던 기간의 분포를 감각적으로 얻을 수 있음.
간트 차트 : 프로젝트 일정관리를 위한 바(bar) 형태의 도구
# install.packages("timevis") # Gantt Chart require(timevis) library("data.table") donations <- fread("donations.csv") d <- donations[, .(min(timestamp), max(timestamp)), user] names(d) <- c("content", "start", "end") d <- d[start != end] timevis(d[sample(1:nrow(d), 20)])
R
복사
timevis(d[sample(1:nrow(d), 20)])
R
복사
‘timevis’ 함수는 d 데이터 프레임에 포함된 임의의 20개 행을 샘플링한 다음 시각화함. → 시간에 따라 데이터를 표시할 수 있는 대화형 시각화 도구를 사용하여 이루어짐.(간트 차트)
(프로젝트 관리에 유용한 차트임. 하나 이상 측정된 과정을 위한 시계열 분석에도 유용하게 사용됨.)
장점
1.
작업을 시간 및 수량적으로 일목요연하게 표시
2.
작업계획과 실적의 계속적 파악 용이
3.
작업자별, 부문별 업무성과의 객관적 상호 비교 가능
단점
1.
계획변화 및 변경 어려움.
2.
복잡하고 정밀한 일정계획 수립 어려움.
3.
작업상호간의 유기적인 관련성 파악 어려움.
4.
사전 예측 및 사후 통제 곤란

3.3.2 2차원 시각화

python으로 재구성
시간이 한 개 이상의 축에서 나타나는 특별한 경우
→ 매일, 매년 앞으로 나아가는 시간축과 시간, 요일 등에 따라서 시간을 펼쳐보는 경우
AirPassengers 데이터를 활용하여 계절성과 추세를 살펴보기
월의 진행을 반영하는 축에 기반하여 각 연도의 도표 그리기
t(matrix(AirPassengers, nrow = 12, ncol = 12))
R
복사
colors<-c("green","red", "pink", "blue", "yellow","lightsalmon", "black", "gray", "cyan", "lightblue", "maroon", "purple") matplot(matrix(AirPassengers, nrow = 12, ncol = 12), type = 'l', col = colors, lty = 1, lwd = 2.5, xaxt = "n", ylab = "Passenger Count") legend("topleft", legend = 1949:1960, lty = 1, lwd = 2.5, col = colors) axis(1, at = 1:12, labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
R
복사
오류가 발생하여 진행안됨. → Python으로 진행
Pass_mat = Pass_val.reshape([12,12])
Python
복사
Date_lab = ["Jan", "Fab", "Mar", "Apr", "May","Jun", "Jul","Aug", "Sep", "Oct", "Nov", "Dec"] plt.rcParams['font.family'] = 'TImes New Roman' plt.rcParams['font.size'] = 13 fig = plt.figure(figsize=(16, 8)) ax = fig.add_subplot(1, 1, 1) ax.grid(True) for i in range(Pass_Trans.shape[0]): ax.plot(Pass_Trans[:,i], color = Color_map[i]) ax.xaxis.set_major_locator(plt.MaxNLocator(12)) ax.set_xticks(np.arange(0, len(Pass_Trans)+1)) ax.set_xticklabels(Date_lab) ax.set_ylabel("Passenger Count", Fontsize = 13) ax.legend(np.arange(1949, 1961,1), loc='upper left')
Python
복사
모든 연도가 공유하는 month에 대해 정의한 그래프
항공 여객 수의 최고치는 7월 또는 8월에 기록됨.
대부분 연도의 3월은 국소적 최고치를 보임.
연도별 월별 곡선 도표
각 month에 대해 1949~1960년도에 대한 그래프 그리기
월 별 탑승객 수와 연도 별 탑승객 증가 추세를 한 번에 확인
→ monthplot() 함수를 활용함 : 시계열 데이터의 월별 패턴 시각화
계절성이나 월별 변동성을 이해하는 데 도움이 됨.
1월과 7월 사이에 감소하는 추세를 볼 수 있음.
시계열 문맥에서 한 축은 시간, 다른 한 축은 관심 분야 단위로 구성된 2차원 히스토그램 그리기
데이터의 구간을 나누어 구간화된 히트맵을 생성함.
다중 시계열 데이터를 한 눈에 확인할 수 있음. / 계절성을 파악하는 데 활용함.
Ex. 기준 [0, 10, 20, 30] / 데이터 [2, 13, 8, 27, 11]
→ 출력 값 [1, 2, 1, 3, 2]
np.searchsorted()
충분한 데이터가 없는 경우 해당 도표는 유용하게 사용되지 않음.
heatmap의 다양한 표현
hexbin 메서드는 육각형의 그리드형태로 값을 반환하는 그래프이다.
w1<- words[V1== 1] names(w1)<- c("type", 1:270)w1<- melt(w1,id.vars= "type") w1<- w1[,-1]names(w1)<- c("Time point", "Value") plot(hexbin(w1))
R
복사
plt.hexbin(f, df.values, gridsize = 30, cmap = "Blues") plt.xlabel("Year") plt.ylabel("Count") plt.colorbar(label = 'Frequency')
Python
복사

3.3.3 3차원 시각화

python으로 재구성
3차원 시각화 : 전체적인 윤곽을 이해하는 데 도움이 됨.
소량의 데이터는 3차원으로 확장된 산점도로 표현하는 것이 2차원 히스토그램으로 표현하는 것보다 데이터의 윤곽을 이해하는 데 도움을 줄 수 있음.
차원이 한 개 더 있는 만큼 다양한 시각에서 데이터의 분포를 확인할 수 있음.
require(plotly) require(data.table) months = 1:12 ap = data.table(matrix(AirPassengers, nrow = 12, ncol = 12)) names(ap) = as.character(1949:1960) ap[, month := months] ap = melt(ap, id.vars = 'month') names(ap) = c("month", "year", "count") p <- plot_ly(ap, x = ~month, y = ~year, z = ~count, color = ~as.factor(month)) %>% add_markers()%>% layout(scene=list(xaxis = list(title = 'Month'), yaxis = list(title = 'Year'), zaxis = list(title = 'PassengerCount')))
JavaScript
복사
melt() 함수를 사용하여 데이터를 재구성합니다. 이를 통해 연도와 월에 따른 항공 여객 수를 담은 데이터 프레임을 만듦.
Python 사용한 3D 산점도 생성 및 데이터 시각화 예시
import plotly.graph_objects as go import pandas as pd import plotly.express as px # Assuming AirPassengers data is already available in Python # Create a DataFrame months = list(range(1, 13)) ap = df # Melt the DataFrame ap_melted = pd.melt(ap.reset_index(), id_vars='month', var_name='year', value_name='count') ap_melted.columns = ['month', 'year', 'count'] # Convert month and year to categorical variables ap_melted['month'] = ap_melted['month'].astype('category') ap_melted['year'] = ap_melted['year'].astype('category') # Create 3D scatter plot fig = go.Figure(data=[go.Scatter3d( x=ap_melted['month'], y=ap_melted['year'], z=ap_melted['count'], mode='markers', marker=dict( size=5, # color=ap_melted['month'], # Color by month colorscale='Viridis', # You can change the colorscale if needed opacity=0.8 ) )]) # Update layout fig.update_layout(scene=dict( xaxis_title='Month', yaxis_title='Year', zaxis_title='Passenger Count' )) fig.show()
Python
복사
시계열 데이터가 아닌 경우, 데이터 분류를 위한 분포 확인 예시 → Matlab

시계열의 탐색적 자료 분석 [참고]

자기상관(autocorrelation 또는 series correlation)
어떤 신호(시계열)와 그 신호를 지연 이동한(time-lagged) 신호간의 상관관계
피어슨 상관 계수(link)
교차상관(cross-correlation)
교차상관 분석 예
팔당댐 방류량청담대교 수위간의 CCF(Cross-Correlation Function) 결과
15시간 전 방류량(tototf)이 청담대교 수위와 상관성이 가장 높았음
자기상관함수(ACF: autocorrelation function) (link)
편자기상관함수(PACF: partial autocorrelation function) : 시간 효과(추세, 계절성)를 제거하는 방식의 자기상관함수
공적분(cointegration): 허위상관성이 아닌 두 시계열의 연관성(또는 인과관계)을 보여주는 통계적 지표
비유: 산책하는 집주인과 강아지의 이동 경로