주가 데이터를 가져오기에 가장 좋은 라이브러리는 Financedatareader 같습니다. (+종목 코드 리스트만 가져오기 위해 Pykrx도 사용했습니다.)
https://github.com/financedata-org/FinanceDataReader
https://github.com/sharebook-kr/pykrx
국내 주식 데이터뿐만 아니라 경제지표, 해외 주식 데이터까지 편하게 읽어올 수 있습니다.
저는 이 라이브러리를 매번 서버에서 조회하는 것도 좋지만 제 개인적인 DB에 필요한 데이터를 매달 혹은 매주 간격으로 저장해 놓으면 라이
브러리를 더이상 사용할 수 없다고 하더라도 제 DB에서 꺼내 쓰면 되기 때문에 좀 정기적으로 데이터를 DB에 쌓는 자동화 프로그램을 개발하려 합니다.
Import
import pandas as pd #DataFrame 을 사용하기 위함.
from sqlalchemy import create_engine #db에 적재하기 위한 라이브러리
import time #api 호출을 연속적으로 하지않고 일정 시간(초) 단위로 호출하기 위함.
from datetime import datetime #날짜 계산을 위함.
import FinanceDataReader as fdr #금융데이터 로드
from pykrx import stock #상장 종목의 종목코드만을 가져오기 위한 라이브러리
Data Load
stnd_date = "2013-01-01" #시작날짜
end_date = datetime.today().strftime("%Y%m%d") #끝날짜, 오늘
stock_list = stock.get_market_ticker_list()
#stock_list = ['005930'.....]
stock_list_len = len(stock_list)
result_df = pd.DataFrame()
process_num = 0
#진행단계 파악을 위한 변수
fdr.DataReader("005930", stnd_date, end_date)
df = df.resample('1M').mean().reset_index()
#일별 데이터를 월별 평균 데이터로 합산 후 index 를 컬럼으로 뺀다.
이제 stock_list 를 loop 돌면서 만들어진 월별 주가 데이터 Dataframe을 result_df에 concat 시켜주면 됩니다.
import time
result_df = pd.DataFrame()
process_num = 0
stnd_date = "2013-01-01"
end_date = datetime.today().strftime("%Y%m%d")
stock_list = stock.get_market_ticker_list()
stock_list_len = len(stock_list)
for code in stock_list:
df = fdr.DataReader(code, stnd_date, end_date)
df = df.resample('1M').mean().reset_index()
df['code'] = code
result_df = pd.concat([result_df, df], axis=0)
process_num+=1
time.sleep(1)
print(str(process_num) + "/ " + str(stock_list_len))
Save
db_connection_str = 'mysql+pymysql://root:[비번]@localhost:3306/[db이름]'
db_connection = create_engine(db_connection_str)
conn = db_connection.connect()
result_df.to_sql(name='KOSPI_M', con=db_connection, if_exists='append', index=True )
이런식으로 Mysql DB에 들어온 걸 볼 수 있습니다.
월별 데이터이므로 매달 특정일에만 이 프로세스가 동작하는 프로그램을 만들어놓고 실행하면 됩니다.
728x90
'금융 및 데이터' 카테고리의 다른 글
[R] 데이터 분석 코딩 (0) | 2021.12.14 |
---|---|
Harry Markowitz의 포트폴리오 이론과 효율적 투자선 (0) | 2021.07.27 |
[Python] 뉴스 감성지수 분류 모델 (6) | 2021.06.17 |
Swap curve & Curve fitting (0) | 2021.06.14 |
[Python] Random Forest 모델 기반 변수 중요도 산출하기 (0) | 2021.06.13 |