-
Python과 R을 이용한 주가분석 ① 가격데이터 수집기타 2023. 9. 19. 15:24
금융학회에 있을 때는 데이터가이드로 간편히 주가 데이터를 뽑을 수 있었다.
졸업을 하고 집에서 혼자하려니 데이터를 모두 알아서 구해야하는 상황에 직면했다.
하지만 항상 기억해야 할 것이 있으니...
누군가는 이미 이 상황을 겪었고
해결책을 마련해 두었다!역시나 방법은 존재했다!
종가데이터를 수집하기 위해 무료로 배포되고 있는 API인 FinanceDataReader를 사용할 것이다.
FinanceDataReader는 금융분석에 필요한 한국, 미국 증권 거래소에 상장된 기업의 주가 가격, 환율, 선물 등 다양한 금융데이터를 뽑을 수 있는 오픈소스 라이브러리다. 제공되는 데이터는 다음과 같다.
종목 코드
- 거래소별 전체 종목 리스트: 'KRX' ('KOSPI', 'KODAQ', 'KONEX'), 'NASDAQ', 'NYSE', 'AMEX' and 'S&P500'
- 한국거래소(KRX) 상장폐지종목 리스트: 'KRX-DELISTING'
가격 데이터
- 국내주식 가격 데이터: '005930'(삼성전자), '091990'(셀트리온헬스케어) 등
- 해외주식 가격 데이터: 'AAPL'(애플), 'AMZN'(아마존), 'GOOG'(구글) 등
- 국내 상장폐지 종목 과거 가격 데이터
- 시장별 종목 가격 데이터: 'KRX'(한국거래소), 'NASDAQ'(나스닥), 'NYSE'(뉴욕증권거래소), 'AMEX'(미국증권거래소),
'SSE'(상해), 'SZSE'(심천), 'HKEX'(홍콩), 'TSE'(도쿄)
- ETF 종목 리스트: 국가별('KR', 'US', 'JP' 등)
- 각종 지수: 'KS11'(코스피지수), 'KQ11'(코스닥지수), 'DJI'(다우지수), 'IXIC'(나스닥 지수), 'US500'(S&P 5000)
- 환율 데이터: 'USD/KRX' (원달러 환율), 'USD/EUR'(달러당 유로화 환율), 'CNY/KRW': 위엔화 환율
- 암호화폐 가격: 'BTC/USD' (비트코인 달러 가격, Bitfinex), 'BTC/KRW' (비트코인 원화 가격, 빗썸)해당 API에 대한 더욱 상세한 설명은 Github 사용자 메뉴얼에서 볼 수 있으니 참고하시라!
(링크)https://github.com/FinanceData/FinanceDataReader/wiki/
Home
Financial data reader. Contribute to FinanceData/FinanceDataReader development by creating an account on GitHub.
github.com
1. 패키지 설치하기
이제 해결책을 알았으니 이 라이브러리에 대해 대략 알아보자.
우선 해당 패키지를 설치해야한다. Python과 IDE로 주피터노트북을 사용했다.
해당코드로 먼저 FinancDataReader를 설치한다.
오류가 날 경우 IDE에서 제공하는 패키지 다운로드 목록에 검색하면 나오니 당황하지 않기를 바란다.
pip install -U finance-datareader설치를 했으니 해당 패키지를 임포트 해야한다. 명칭은 관례적으로 'fdr'을 사용한다.
import FinanceDataReader as fdr2. 종목 리스트 가져오기
데이터를 바로 뽑으면 재미가 없으니,
맛보기로 해당 패키지에서 제공하는 StockListing() 함수를 통해 한국거래소에 상장되어 있는 종목 전체 리스트를 뽑아보자
먼저 StockListing() 함수에 한국거래소를 뜻하는 'KRX'심볼을 넣으면 한국거래소에 상장된 전체 종목 리스트를 볼 수 있다.
df_krx = fdr.StockListing('KRX')dr_krx의 데이터 타입을 확인해보면 pandas라이브러리의 데이터프레임 형태인 것을 확인할 수 있다.
type(df_krx) >> pandas.core.frame.DataFrame이제 df_krx를 출력해보자
df_krx
데이터를 불러오면 단순히 거래소에 상장된 기업목록 뿐만 아니라 코드, 마켓, 종가, 시가, 저가, 변동률, 주식수 등 다양한 데이터들을 확인할 수 있다. 단순히 거래소뿐만 아니라 KOSPI, KOSDAQ 등 시장별로도 확인이 가능하고 S&P500, NASDAQ 등 미국거래소에 상장된 증권들도 다음과 같이 확인이 가능하다.
3. 가격데이터 뽑기
이제 불필요한 것을 뒤로하고 주가분석에 필요한 가격데이터를 뽑아보려 한다.
국민주식인 삼성전자의 주가를 동향을 알아볼 것이다.
삼성전자의 종목코드인 005930을 알아두면 데이터를 쉽게 뽑을 수 있다.
먼저 시험삼아 2022년의 주가 데이터를 뽑아보자.
데이터의 양이 많아 미리보기로 볼 수 없어 올림차순으로 10개의 데이터를 불러왔다.
상위 n개의 데이터는 head(n)으로 불러올 수 있다.
ss_df = fdr.DataReader('005930', '2022') ss_df.head(10)
2022년 거래된 내용의 날짜 기준 상위 10개의 데이터를 보면 시가(Open), 최고가(High), 최저가(Low), 종가(Close), 거래량(Volume), 전날대비 변동폭(Change)가 나와있는 것을 볼 수 있다.
데이터의 형태를 알았으니, 이제 2018년부터 현재(2023.09.18)까지의 약 5년간의 주가 데이터를 뽑아볼 것이다.
데이터의 크기가 커서 주피터 노트북 상에 미리보기가 나오지 않는다.
ss_df = fdr.DataReader('005930', '2018-01-01')2018년부터 현재까지는 '2018-01-01'만 입력하면 된다.
하지만 2018년 1월부터 2019년 5월까지의 데이터를 확인하고 싶다면 아래와 같이 날짜를 지정해주면 된다.
ss_df = fdr.DataReader('005930', '2018-01-01', '2019-05-31')4. 데이터분석을 위한 CSV파일 저장
파이썬으로도 데이터분석이 가능하지만 주로 R을 주로 사용한 관계로 CSV파일로 저장하여 R로 옮겨갈 생각이다.
CSV파일로의 저장은 to_csv를 활용한다. 실행 후, 컴퓨터 상에 ','로 분리된 CSV파일이 저장되어 있는 것을 볼 수 있다.
ss_df.to_csv('samsung_price.csv')
오늘은 FinanceDataReader을 통한 주식데이터 뽑는 방법을 알아봤다.
데이터를 확보했으니 다음 포스팅에는 해당 파일을 이용하여 R을 통해 주가분석을 해볼 예정이다. 그럼 이만👋
'기타' 카테고리의 다른 글
Python과 R을 이용한 주가분석 ② 시계열 데이터 다루기 (0) 2023.09.21