FinanceDataReader를 사용해 주가 데이터를 수집합니다.
2-1. FinanceDataReader
•
FinanceDataReder
◦
파이썬에서 주식 데이터 수집을 쉽게 해주는 공개 모듈(라이브러리)
◦
https://github.com/FinanceData/FinanceDataReader
◦
깃허브에 다양한 사용법이 있으니 확인해보세요.
◦
2024년 1월 26일 기준으로 본 문서의 내용은 정상 작동합니다.
◦
혹시라도 해당 모듈이 더 이상 서비스되지 않거나, 모듈이 변경된다면 본 문서의 내용이 정상 작동 안 할 수 있습니다.
•
현재 StartUP QUANT는 FinanceDataReader에 많은 부분이 의존적인 강의입니다.
2-2. 가상 환경에 FinanceDataReader 모듈 설치하기
지난 시간에 만든 아나콘다의 venv_StartUPQuant 가상환경에 필요한 모듈들을 추가 설치합니다.
•
Anaconda Prompt를 실행
◦
설치된 프로그램 중에 anaconda prompt를 찾아서 실행
•
venv_StartUPQuant 가상 환경에 진입
◦
activate venv_StartUPQuant
•
pip로 아래의 필요한 모듈을 차례대로 설치
◦
pip install finance-datareader
◦
pip install bs4
◦
pip install plotly
2-3. PyCharm에서 fdrStockList.py 새파일 추가
PyCharm을 실행해 myStartUPQuant 프로젝트에 Class02 Directory와 새 Python file 추가하기
•
myStartUPQuant 폴더에서 마우스 우클릭
◦
New > Directory > Class02 입력 후 엔터
•
Class02 폴더에서 마우스 우클릭
◦
New > Python File > fdrStockList 입력 후 엔터
2-4. 종목 마스터 수집하기(fdrStockList.py 코드 작성)
# Class02\fdrStockList.py
# https://github.com/FinanceData/FinanceDataReader 참고
import FinanceDataReader as fdr # 주식, 가상화폐 등 금융 데이터를 쉽게 가져올 수 있는 파이썬 라이브러리
import pandas as pd # Pandas는 파이썬의 데이터 분석 및 조작을 위한 핵심 라이브러리
# df(Dataframe)이란? DataFrame은 Pandas에서 테이블 형식의 데이터를 다루기 위한 기본적인 2차원 데이터 구조
pd.set_option('display.max_columns', None) # df(Dataframe) 출력시 모든 컬럼 출력하도록 처리
pd.set_option('display.width', 1000) # df(Dataframe) 출력시, 한 로우가 따로 출력되지 않도록 충분한 길이 설정
def StockList(market):
# fdr의 모듈을 사용해 market에 해당하는 종목 리스트를 가져와 df(dataframe)에 담아둠
df = fdr.StockListing(market)
return df
df_krx = StockList('KOSPI') # KOSPI 종목 리스트 가져와서 df_krx(Dataframe)에 담기
print(df_krx)
# 깃허브를 참고해, 나스닥과 뉴욕증권거래소의 종목 리스트도 조회해보자.
Python
복사
2-5. 일별 주가 수집하기(fdrPriceHistory.py 코드 작성)
일별 주가를 수집해 엑셀로 저장하는 코드를 작성해봅니다. 여기서는 삼성전자의 일별 주가를 수집합니다.
•
아나콘다 가상환경에 openpyxl 모듈을 추가 설치합니다.
◦
pip install openpyxl
▪
수집한 주가 정보를 엑셀로 저장하기 위한 모듈
◦
[2-2. 가상 환경에 FinanceDataReader 모듈 설치하기] 부분 참고
•
myStartUPQuant 프로젝트에 Class02 Directory에 fdrPriceHistory.py 추가하기
◦
[2-3. PyCharm에서 fdrStockList.py 새파일 추가] 부분 참고
•
아래 코드를 fdrStockList.py에 작성
◦
아래 코드를 작성후 실행해 보면, Closs 02 Directory에 엑셀로 삼성전자의 주가 정보가 수집되어 있다.
# Class02\fdrPriceHistory.py
# https://github.com/FinanceData/FinanceDataReader 참고
import FinanceDataReader as fdr # 주식, 가상화폐 등 금융 데이터를 쉽게 가져올 수 있는 파이썬 라이브러리
import pandas as pd # Pandas는 파이썬의 데이터 분석 및 조작을 위한 핵심 라이브러리
from datetime import datetime, timedelta # 시간, 일자 관련 처리하기 위한 라이브러리
# df(Dataframe)이란? DataFrame은 Pandas에서 테이블 형식의 데이터를 다루기 위한 기본적인 2차원 데이터 구조
pd.set_option('display.max_columns', None) # df(Dataframe) 출력시 모든 컬럼 출력하도록 처리
pd.set_option('display.width', 1000) # df(Dataframe) 출력시, 한 로우가 따로 출력되지 않도록 충분한 길이 설정
def StockPriceHistory(ticker):
# fdr의 모듈을 사용해 ticker에 해당하는 종목의 일별 주가 정보 가져오기
end_date = datetime.today() # 현재 날짜와 10년 전 날짜 계산
start_date = end_date - timedelta(days=3650)
df_history = fdr.DataReader(ticker, start=start_date, end=end_date) # FinanceDataReader를 사용하여 주식 가격 데이터 가져오기
return df_history
ticker = "005930"
current_time = datetime.now().strftime("%Y%m%d%H%M%S") # 현재 날짜와 시간을 얻습니다.
df_history = StockPriceHistory('005930') # 삼성전자 가격 정보 가져오기
file_name = f"{ticker}_{current_time}.xlsx" # 파일 이름을 설정
df_history.to_excel(file_name, index=True) # DataFrame을 Excel 파일로 저장합니다.
print(df_history) # 파이참 실행결과창에 출력
Python
복사
2-6. 일별 주가 차트로 그리기(fdrPriceHistoryPlot.py 코드 작성)
일별 주가를 시각화하는 코드를 작성합니다. matplotlib이라는 대표적인 시각화 모듈을 추가해서 처리합니다.
•
아나콘다 가상환경에 matplotlib 모듈을 추가 설치합니다.
◦
pip install matplotlib
▪
데이터를 시각화하기 위한 대표적인 모
◦
[2-2. 가상 환경에 FinanceDataReader 모듈 설치하기] 부분 참고
•
myStartUPQuant 프로젝트에 Class02 Directory에 fdrPriceHistoryPlot.py 추가하기
◦
[2-3. PyCharm에서 fdrStockList.py 새파일 추가] 부분 참고
•
아래 코드를 fdrPriceHistoryPlot.py에 작성
# Class02\fdrPriceHistoryPlot.py
# https://github.com/FinanceData/FinanceDataReader 참고
import FinanceDataReader as fdr # 주식, 가상화폐 등 금융 데이터를 쉽게 가져올 수 있는 파이썬 라이브러리
import pandas as pd # Pandas는 파이썬의 데이터 분석 및 조작을 위한 핵심 라이브러리
from datetime import datetime, timedelta # 시간, 일자 관련 처리하기 위한 라이브러리
import matplotlib.pyplot as plt # 파이썬의 데이터 시각화를 위한 핵심 라이브러리
# df(Dataframe)이란? DataFrame은 Pandas에서 테이블 형식의 데이터를 다루기 위한 기본적인 2차원 데이터 구조
pd.set_option('display.max_columns', None) # df(Dataframe) 출력시 모든 컬럼 출력하도록 처리
pd.set_option('display.width', 1000) # df(Dataframe) 출력시, 한 로우가 따로 출력되지 않도록 충분한 길이 설정
def StockPriceHistory(ticker, end_date, days):
# 마지막일자와, 일수를 매개변수로 받아, 필요한만큼만 데이터 가져오기
end = datetime.strptime(end_date, '%Y-%m-%d') # 문자열 형식의 시작 일자를 datetime 객체로 변환
start = end - timedelta(days=days) # 종료 일자 계산
print(start,end)
df_history = fdr.DataReader(ticker, start=start, end=end) # FinanceDataReader를 사용하여 주식 가격 데이터 가져오기
return df_history
def DrawChart(df,ticker):
fig, ax1 = plt.subplots()
# 'Close' 가격을 선 그래프로 표시
ax1.plot(df.index, df['Close'], color='tab:red')
ax1.set_xlabel('Date')
ax1.set_ylabel('Close', color='tab:red')
ax1.tick_params(axis='y', labelcolor='tab:red')
# 'Volume'을 막대 그래프로 표시하기 위한 설정
ax2 = ax1.twinx()
ax2.bar(df.index, df['Volume'], color='tab:blue', alpha=0.4)
ax2.set_ylabel('Volume', color='tab:blue')
ax2.tick_params(axis='y', labelcolor='tab:blue')
# Volume 축의 지수 표기 비활성화
ax2.get_yaxis().get_major_formatter().set_scientific(False)
# 차트 타이틀 설정 및 표시
plt.title(f"Stock Price and Volume for {ticker}")
fig.tight_layout()
plt.show()
ticker = "005930"
df_history = StockPriceHistory(ticker,'2023-12-15',100) # 삼성전자 가격 정보 가져오기
print(df_history) # 파이참 실행결과창에 출력
DrawChart(df_history,ticker)
Python
복사
HomeWork
•
파이썬 코드 중 def 란 무엇인지 조사(GPT, Copilot, Google 등) 해서 정리하시오.
•
파이썬 코드 중 import 가 무엇인지 조사해서 정리하시오.
•
fdrStockList.py가 하는 일을 적으시오
•
fdrPriceHistory.py가 하는 일을 적으시오
•
fdrPriceHistoryPlot.py가 하는 일을 적으시오