일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- QGIS라벨링
- geopandas에러
- 에러
- API
- 오픈API
- 코로나
- Folium
- 라이엇
- geopandas설치
- map
- kepler.gl
- pipwin
- covid19
- geopnadas
- 인코등
- r
- matplotlib
- 파이썬
- 막대그래프
- riotapi
- kepler
- OSMnx
- Python
- covid
- 마커클러스터
- 라이엇api
- 시각화
- 지도
- 공공데이터포털
- 오류
- Today
- Total
Nerdy
KOSPI 지수 데이터를 활용한 시계열 분석 본문
시계열 분석이란?
어떤 현상에 대해서 시간의 변화에 따라 일정한 간격으로 현상의 변화를 기록한 시계열 데이터를 대상으로 미래의 변화에 대한 추세를 분석하는 방법
일반 분석과는 다르게 시간의 흐름을 고려한다는 특징이 있어 분석을 통해 향후 판매량 예측, 다음달 항공기 이용 승객 등 예상되는 변화를 예측할 수 있다는 장점이 있지만, 연구자가 만든 시계열 모형을 이용하여 예측하고자 할 때 천재지변, 정치, 경제, 사회, 문화 영역에서 일어나는 여러가지 변수들이 발생하여 일일이 고려하지 못하기 때문에 오차가 발생할 수 있다는 단점이 있다.
과거 10년간 일별 종가기준 KOSPI 지수 데이터를 대상으로 시계열 분석을 해본다.
1. 파일 불러오기
KOSPI <- read.csv('KOSPIDATA.csv', header = T) # 파일 읽기
str(KOSPI) # 2465 obs. of 10 variables
# 2011.04.08 ~ 2021.04.09 KOSPI 지수 데이터
'
$ 일자 : chr "2021/04/09" "2021/04/08" "2021/04/07" "2021/04/06" ...
$ 종가 : num 3132 3143 3137 3127 3121 ...
$ 대비 : num -11.38 5.85 10.33 6.25 8.03 ...
$ 등락률 : num -0.36 0.19 0.33 0.2 0.26 0.82 0.85 -0.28 1.12 -0.16 ...
$ 시가 : num 3147 3137 3129 3124 3121 ...
$ 고가 : num 3156 3146 3146 3139 3127 ...
$ 저가 : num 3125 3122 3125 3110 3102 ...
$ 거래량 : num 1781243 1357293 1984774 1279017 1084792 ...
$ 거래대금 : num 14566621 17080031 14490177 13676602 13010540 ...
'
KOSPIDATA.csv 파일을 KOSPI 변수에 담아 해당 데이터 구조를 확인한다.
일자부터 거래대금까지 컬럼들이 존재하며 종가 컬럼을 기준으로 시계열 분석을 할 예정이다.
igraph 패키지를 사용하여 시계열 자료를 생성한다.
2. igraph 패키지 로딩과 시계열 자료 생성
# install.packages('igraph')
library(igraph)
# 시계열 자료 생성
ts_kospi <- ts(KOSPI$종가, start = c(2011,04,08), end = c(2021,04,08), frequency = 365)
# 시작날짜 : 2011/04/08, 끝나는 날짜 : 2021/04/09, 주기 : 365일
ts_kospi
Time Series:
Start = c(2011, 4)
End = c(2021, 4)
Frequency = 365
[1] 3131.88 3143.26 3137.41 3127.08 3120.83 3112.80 3087.40 3061.42 3070.00 3036.04 3041.01
[12] 3008.33 2996.35 3004.74 3035.46 3039.53 3066.01 3047.50 3067.17 3045.71 3054.39 3013.70
[23] 2958.12 2976.12 2996.11 3026.26 3043.49 3082.99 3043.87 3012.95 3099.69 2994.98 3070.09
[34] 3079.75 3107.62 3086.66 3133.73 3163.25 3147.00 3100.58 3084.67 3091.24 3120.63 3087.55
[45] 3129.68 3096.81 3056.53 2976.21 3069.05 3122.56 3140.31 3208.99 3140.63 3160.84 3114.55
[56] 3092.66 3013.93 3085.90 3149.93 3148.29 3125.95 3148.45 3152.18 3031.68 2968.21 2990.57
[67] 2944.45 2873.47 2820.51 2808.60 2806.86 2759.82 2733.68 2778.65 2772.18 2770.43 2771.79
[78] 2756.82 2762.20 2770.06 2746.46 2755.47 2700.93 2745.44 2731.45 2696.22 2675.90 2634.25
[89] 2591.34 2633.45 2625.91 2601.54 2617.76 2602.59 2553.50 2547.42 2545.64 2539.15 2543.03
[100] 2493.87 2475.62 2485.87 2452.83 2447.20 2416.50 2413.79 2357.32 2343.31 2300.16 2267.15
# 생략
igraph 패키지에 있는 ts 함수를 사용하여 기준이 될 종가 컬럼을 '데이터$컬럼' 형식으로 넣고 시작과 끝, 그리고 주기를 넣을 start, end, frequency 옵션을 넣어 시작일과 종료일, 주기를 넣었다.
시작일 : 2011/04/08
종료일 : 2021/04/09
주기 : 365일(1년)
3. 추세선 확인하기
ts.plot(ts_kospi, main = '10년간 일별 KOSPI 지수 추세선',
xlab = '2011.04.08 ~ 2021.04.09',
ylab = 'KOSPI 지수',
col = 'blue')
igraph 패키지에 있는 ts.plot을 사용해 생성된 시계열 자료의 추세선을 확인한다.
xlab과 ylab이 어떤 대상을 나타내는지 보여주기 위해 xlab은 시작일과 종료일의 날짜, ylab은 KOSPI 지수 명칭을 넣었다.
ts.plot은 색깔 옵션을 안 넣을 시 default로 검정이 되어져 색의 구분감을 위해 col = blue를 넣었다.
추세선 결과로 변동폭이 크게 나타난 연도는 2011년도 후반기와 2018년도 라는 것을 알 수 있다.
4. 시계열 자료 변동요인 분해 후 시각화
시계열 자료 변동요인은 크게 4가지가 있다.
1) 추세변동(Trend) : 상승과 하락의 영향을 받아 시계열 자료에 영향을 주는 장기 변동요인
2) 순환변동(Cyclical) : 일정한 기간 없이 반복적인 요소를 가지는 중/장기 변동요인
3) 계절변동(Seasonal) : 일정기간에 의해서 1년 단위로 반복적인 요소를 가지는 단기 변동요인
4) 불규칙변동(Irregular) : 어떤 규칙 없이 예측 불가능한 변동요인으로 추세, 순환, 계절 요인으로 설명할 수 없는 요인. 실제 시계열 자료에서 추세, 순환, 계절 요인을 뺀 결과를 나타난다.
이를 분해살 수 있는 함수는 stl 함수와 decompose 함수가 있으며 stl 함수를 활용해 시계열 분해를 한다.
# 시계열 자료 변동요인 분해
result <- stl(ts_kospi, 'periodic') # parameter = periodic
# 분해 후 시각화
plot(result, main = '변동요인을 분해한 KOSPI')
# stl 함수를 사용한 이유는?
상대적으로 복잡하지만 좋은 R 함수가 존재하며 결과로 나오는 시계열 데이터는 기존의 시계열 원본 데이터와 같은 크기를 가지고 좋은 예측기로 아웃라이어에 강건하는 등 많은 장점들을 가지고 있어 사용을 한다.
'R' 카테고리의 다른 글
[R] 코로나 19 누적 데이터를 대상으로 막대 차트 만들기 (0) | 2022.06.23 |
---|---|
[R] 오픈 API를 활용한 코로나 19 사망자 수 그래프 그리기 (0) | 2022.06.23 |
[R] 메모리 부족 시 늘리는 방법 (0) | 2022.06.22 |
[R] Why data.table? (0) | 2022.06.22 |
주성분 분석(PCA) (0) | 2022.04.26 |