Search

Class 02. 주가 데이터 수집

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가 하는 일을 적으시오