Chapter 3 API를 이용한 데이터 수집
API는 주소를 갖고 있는 사람이라면 누구나 이용할 수 있고 접근 속도가 빠르며 데이터 가공이 수월하다는 장점이 있음
대부분의 해외 금융 기업은 데이터를 API로 제공하기 때문에 퀀트 투자에 API의 이해는 필수!
3.1 API를 이용한 Quandl 데이터 다운로드
Quandl은 API로 데이터를 무료로 제공하는 업체
R에서 바로 애플의 주가 데이터 다운로드하는 것이 효율적
url.aapl = "https://www.quandl.com/api/v3/datasets/WIKI/AAPL/data.csv?api_key=xw3NU3xLUZ7vZgrz5QnG"
data.aapl = read.csv(url.aapl)
head(data.appl)
Date Open High Low
1 2018-03-27 173.68 175.15 166.92
2 2018-03-26 168.07 173.10 166.44
3 2018-03-23 168.39 169.92 164.94
4 2018-03-22 170.00 172.68 168.60
5 2018-03-21 175.04 175.09 171.26
6 2018-03-20 175.24 176.80 174.94
Close Volume Ex.Dividend
1 168.340 38962839 0
2 172.770 36272617 0
3 164.940 40248954 0
4 168.845 41051076 0
5 171.270 35247358 0
6 175.240 19314039 0
Split.Ratio Adj..Open Adj..High
1 1 173.68 175.15
2 1 168.07 173.10
3 1 168.39 169.92
4 1 170.00 172.68
5 1 175.04 175.09
6 1 175.24 176.80
Adj..Low Adj..Close Adj..Volume
1 166.92 168.340 38962839
2 166.44 172.770 36272617
3 164.94 164.940 40248954
4 168.60 168.845 41051076
5 171.26 171.270 35247358
6 174.94 175.240 19314039
3.2 getSymbols() 함수를 이용한 API 다운로드
API 주소를 이용한 데이터 수집은 간편하지만 모든 항목에 대한 개별적 API를 일일이 얻기 힘들며 가용한 다운로드 양에 제한이 있다는 한계
야후 파이낸스 주가 데이터를 quantmod 패키지의 getSymbols() 함수로 다운로드 가능
3.2.1 주가 다운로드
require(quantmod)
getSymbols('AAPL')
head(AAPL)
AAPL.Open AAPL.High
2007-01-03 12.32714 12.36857
2007-01-04 12.00714 12.27857
2007-01-05 12.25286 12.31428
2007-01-08 12.28000 12.36143
2007-01-09 12.35000 13.28286
2007-01-10 13.53571 13.97143
AAPL.Low AAPL.Close
2007-01-03 11.70000 11.97143
2007-01-04 11.97429 12.23714
2007-01-05 12.05714 12.15000
2007-01-08 12.18286 12.21000
2007-01-09 12.16429 13.22429
2007-01-10 13.35000 13.85714
AAPL.Volume AAPL.Adjusted
2007-01-03 309579900 10.34498
2007-01-04 211815100 10.57460
2007-01-05 208685400 10.49929
2007-01-08 199276700 10.55114
2007-01-09 837324600 11.42763
2007-01-10 738220000 11.97450
함수 내에 티커를 입력하면 해당 티커의 주가 데이터가 xts 형태로 입력됨시가, 고가, 저가, 종가, 거래량, 수정주가가 표시 (Adjusted 데이터가 가장 많이 사용됨)
이후 chart_Series() 함수로 시계열 데이터 시각화 가능
원하는 기간을 입력변수로 입력해서 선택적으로 시각화할 수도 있음
data = getSymbols('AAPL", from = '2000-01-01', to = '2018-12-31', auto.assign = FALSE)
head(data)
AAPL.Open AAPL.High
2000-01-03 3.745536 4.017857
2000-01-04 3.866071 3.950893
2000-01-05 3.705357 3.948661
2000-01-06 3.790179 3.821429
2000-01-07 3.446429 3.607143
2000-01-10 3.642857 3.651786
AAPL.Low AAPL.Close
2000-01-03 3.631696 3.997768
2000-01-04 3.613839 3.660714
2000-01-05 3.678571 3.714286
2000-01-06 3.392857 3.392857
2000-01-07 3.410714 3.553571
2000-01-10 3.383929 3.491071
AAPL.Volume AAPL.Adjusted
2000-01-03 133949200 3.454628
2000-01-04 128094400 3.163368
2000-01-05 194580400 3.209661
2000-01-06 191993200 2.931901
2000-01-07 115183600 3.070781
2000-01-10 126266000 3.016772
▶ 아래 코드처럼 from 에 시작점을, to에 종료 시점을 입력변수로 넣어 원하는 기간의 데이터만 다운로드
▶ auto.assign을 FALSE로 설정해두면 데이터를 자동으로 동일한 티커를 찾아 저장하도록하지 않고 원하는 변수명에 저장 가능
ticker = c('FB', 'NVDA')
getSymbols(ticker)
head(FB)
FB.Open FB.High FB.Low
2012-05-18 42.05 45.00 38.00
2012-05-21 36.53 36.66 33.00
2012-05-22 32.61 33.59 30.94
2012-05-23 31.37 32.50 31.36
2012-05-24 32.95 33.21 31.77
2012-05-25 32.90 32.95 31.11
FB.Close FB.Volume
2012-05-18 38.23 573576400
2012-05-21 34.03 168192700
2012-05-22 31.00 101786600
2012-05-23 32.00 73600000
2012-05-24 33.03 50237200
2012-05-25 31.91 37149800
FB.Adjusted
2012-05-18 38.23
2012-05-21 34.03
2012-05-22 31.00
2012-05-23 32.00
2012-05-24 33.03
2012-05-25 31.91
head(NVDA)
NVDA.Open NVDA.High
2007-01-03 24.71333 25.01333
2007-01-04 23.96667 24.05333
2007-01-05 23.37333 23.46667
2007-01-08 22.52000 23.04000
2007-01-09 22.64000 22.79333
2007-01-10 21.93333 23.46667
NVDA.Low NVDA.Close
2007-01-03 23.19333 24.05333
2007-01-04 23.35333 23.94000
2007-01-05 22.28000 22.44000
2007-01-08 22.13333 22.60667
2007-01-09 22.14000 22.16667
2007-01-10 21.60000 23.26000
NVDA.Volume NVDA.Adjusted
2007-01-03 28870500 22.12810
2007-01-04 19932400 22.02383
2007-01-05 31083600 20.64389
2007-01-08 16431700 20.79722
2007-01-09 19104100 20.39244
2007-01-10 27718600 21.39825
위 코드와 같이 한 번에 여러 종목의 데이터를 불러올 수 있음
3.2.2 국내 종목 주가 다운로드
국내 종목의 경우 6자리의 티커로 구성되어 있고 코스피 상장 종목은 .KS, 코스닥은 .KQ 형태로 입력
getSymbols('005930.KS', from = '2000-01-01', to = '2018-12-31')
tail(Ad(`005930.KS`))
005930.KS.Adjusted
2018-12-20 38293.23
2018-12-21 38293.23
2018-12-24 38441.84
2018-12-26 37996.00
2018-12-27 38250.00
2018-12-28 38700.00
tail(Ad(`005930.KS`))
005930.KS.Close
2018-12-20 38650
2018-12-21 38650
2018-12-24 38800
2018-12-26 38350
2018-12-27 38250
2018-12-28 38700
위 코드는 코스피에 상장된 삼성전자의 주가 데이터를 getSymbols() 함수를 통해 불러온 것
이때, 변수명에 '.'이 포함되므로 수정주가 확인 시 작은 따옴표(') 대신 억음 부호(`) 사용
tail(Cl(`005930.KS`))
005930.KS.Close
## 2018-12-20 38650
## 2018-12-21 38650
## 2018-12-24 38800
## 2018-12-26 38350
## 2018-12-27 38250
## 2018-12-28 38700
위 코드는 Cl() 함수를 사용해 종가(Close)만 다운로드
getSymbols("068760.KQ", from = '2000-01-01', to = '2018-12-31')
tail(Cl(`068760.KQ`))
068760.KQ.Close
2018-12-20 NA
2018-12-21 NA
2018-12-24 NA
2018-12-26 NA
2018-12-27 NA
2018-12-28 NA
068760의 티커를 갖는 종목은 코스닥에 상장된 셀트리온으로, 해당 기간 종가만을 불러왔는데 NA 값이 뜸 (?)
3.2.3 FRED 데이터 다운로드
FRED는 Federal Reserve Economic Data의 약자로 미 연방준비은행에서 관리하는 기관
여기에서 미 국채 10년물 금리 다운로드 해보겠음
getSymbols('DGS10', src = 'FRED')
chart_Series(DGS10)
FRED에서는 티커명이 DGS10 이런 식인가봄 (DGS10은 미 국채 10년물 금리)
src 항목에는 데이터 출처인 FRED를 입력해주면 됨
최종적으로 getSymbols() 함수로 FRED의 API를 이용해 데이터를 받을 수 있고 마찬가지로 chart_Series() 함수로 시계열 데이터의 시각화
금리가 1980년대 피크 찍고 계속 내려가는 모습
※ 이때, 항목 별 티커명은 FRED 사이트에서 검색창에 입력 후 페이지 주소에서 /series/ 다음의 항목을 찾으면 됨
DGS10 말고 원/달러 환율에 대한 추이를 보고 싶다면 해당 항목 검색 후 티커명 찾고 똑같이 실행해주면 됨
(원/달러 환율의 티커는 'DEXKOUS')
getSymbols('DEXKOUS', src = 'FRED')
tail(DEXKOUS)
DEXKOUS
2020-08-07 1189.25
2020-08-10 1186.28
2020-08-11 1184.84
2020-08-12 1184.09
2020-08-13 1183.25
2020-08-14 1186.53
▶ 원/ 달러 환율은 이렇게 변해왔다고 함
▶ 지금은 1800대에서 왔다갔다
본 게시글은 다음 강의를 참고하여 공부한 내용을 기록한 것입니다.
https://www.fastcampus.co.kr/courses/202382/clips/
I'm a Senior Student in Data Science !
데이터 사이언스를 공부하고 있는 4학년 학부생의 TIL 블로그입니다. 게시글이 도움 되셨다면 구독과 좋아요 :)
'Data Scraping > #Quant Portfolio' 카테고리의 다른 글
[퀀트] R을 활용한 퀀트 투자 포트폴리오 만들기 (6) (0) | 2020.08.26 |
---|---|
[퀀트] R을 활용한 퀀트 투자 포트폴리오 만들기 (5) (0) | 2020.08.25 |
[퀀트] R을 활용한 퀀트 투자 포트폴리오 만들기 (4) (0) | 2020.08.06 |
[퀀트] R을 활용한 퀀트 투자 포트폴리오 만들기 (2) (0) | 2020.07.30 |
[퀀트] R을 활용한 퀀트 투자 포트폴리오 만들기 (1) (0) | 2020.07.29 |