데이터 파일 설명
일별 데이터:
- 데이터 파일: stock.{테이블이름}.csv
- 데이터 기간: 2018-01-02 ~ 2021-07-30, 약 3년 7개월, 비영업일 제외
- 종목 수: 2,396 개
- 단위 (테이블 이름, 설명)
- 원 단위: adj_close 주가 (adjusted close : 조정 종가)
- 백만원 단위 : mc 시가총액(market capitalization), sales_ttm 매출액(sales trailing 12 months), op_ttm 영업이익(operating profit), ni_ttm 순이익(net income), liab 부채(liability), eq 자본, asset_cur 유동자산(current asset)
색인 데이터:
- stockinfo.itemname.csv : 종목 코드와 종목 명
- stockinfo.sector.csv : 종목 코드와 해당하는 섹터
1. 데이터 파일 다운로드
import wget
urls = [
"<https://gist.githubusercontent.com/solaris33/19a66481d20b9a4341be9cf624c74c14/raw/93429bb192c6a24b46a336f0877d51cfc2ca853f/stock.adj_close.csv>",
"<https://gist.githubusercontent.com/solaris33/5efcf103311b011fc5f4ffc589bf9408/raw/29ce53d1949684794f58af91cc749ce120cd864e/stock.sales_ttm.csv>",
"<https://gist.githubusercontent.com/solaris33/3a12f79ae814f2198dbe263f09ff4365/raw/df5ba51fac00e2a3f3ebfb7d6ef99f7147c425ef/stock.op_ttm.csv>",
"<https://gist.githubusercontent.com/solaris33/62506befa4255988910ea8bb37be7ee5/raw/0996b4118398cc4a4a51047e49af971718d89bb0/stock.ni_ttm.csv>",
"<https://gist.githubusercontent.com/solaris33/51380a44d820ef8441557624e9bc8e01/raw/00b38b56450972bd79dc3143784153b3b9e6db3f/stock.mc.csv>",
"<https://gist.githubusercontent.com/solaris33/5f6adeb82ed9055e5bb8636ae772afec/raw/fd33f6fa5cf7e40c6975688656b5dfdfe8704da5/stock.asset_cur.csv>",
"<https://gist.githubusercontent.com/solaris33/f0c4c969f2b67ce01d9f5607be28cf71/raw/e810b51b910218ee9b97e54687abe1261c4968d5/stock.liab.csv>",
"<https://gist.githubusercontent.com/solaris33/11bed00db025a74d4536d5e9947d3131/raw/672ca99b8b17ee11f748524e7a8946f821f3a0ff/stock.eq.csv>",
"<https://gist.githubusercontent.com/solaris33/22803c36480ed2ff23f441318db8b07b/raw/82e8db933246530a11f1db0aea066f0dc1b929ed/stockinfo.itemname.csv>",
"<https://gist.githubusercontent.com/solaris33/e55f2b24086f8c73d8c9aca4f8043b45/raw/0a11dbc036b46ce567c6a399d2a18a0e7dbe3e1f/stockinfo.sector.csv>"
]
for url in urls:
wget.download(url)
- vscode 터미널에서 pip install wget 으로 인스톨 후 임포트하기
- wget.download()
2. 필요 라이브러리 설치 및 폰트 설정
from matplotlib import font_manager, rc
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
# seaborn 환경세팅
sns.set()
# matplotlib에서 그래프 한글폰트 설정
font_path = 'C:\Windows\Fonts\malgunsl.ttf'
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
- vscode 터미널에서 pip install pandas / seaborn / matplotlib 설치 후 임포트
- sns.set()
- c드라이브에서 windows폴더 Fonts폴더 에서 원하는 폰트 우클릭해서 경로 가져오기
3. 데이터 파일을 읽어서 딕셔너리에 넣어두기
d = {}
# For문 이용하여 읽기- 주가, 시가총액, 매출액, 영업익, 순이익, 부채, 유동자산, 자본
for data_name in ['adj_close', 'mc', 'sales_ttm', 'op_ttm', 'ni_ttm', 'liab', 'asset_cur', 'eq']:
print(f"read csv {data_name} ...")
d[data_name] = pd.read_csv(f"stock.{data_name}.csv", index_col=0, encoding='cp949', parse_dates=True)
print(f"done! {d[data_name].shape}")
itemname = pd.read_csv('stockinfo.itemname.csv', index_col=0)
sector = pd.read_csv('stockinfo.sector.csv', index_col=0)
stock_info = pd.concat([itemname, sector], axis=1)
- 딕셔너리에 { 데이터이름 : 파일 } 형태로 저장
- pd.read_csv() 옵션
- index_col=0 : 생성되는 index column 제거, 컬럼명을 넣을 수도 있다.
- encoding=’cp949’ : 파일에 한글이 있을 경우 인코딩
- parse_dates=True : column에 있는 날짜 데이터를 datetime 형태로 변환한다.
- pd.concat() 으로 데이터 병합
- axis=1 가로축(행)으로 병합
4. 필요한 데이터 뽑기
# 쿼리를 사용하여 원하는 종목이름을 넣어서 종목 코드 알아내기
stock_info.query('itemname == "메리츠화재"')
# 알아낸 종목 코드를 변수로 저장
code = "A000060"
codename = stock_info.loc[code, 'itemname']
- .query(’컬럼이름 == “찾는데이터”’)
- 변수화 함으로써 code만 바꿔주면 그래프를 생성할 때 일일이 수정할 필요가 없어진다.
5. 그래프 생성하기
d['adj_close'].loc[code, :].plot(figsize=(12,4), title=f'{code} {codename} - 주가');
plt.show()
d['sales_ttm'].loc[code, :].plot(figsize=(12,4), title=f'{code} {codename} - 1년 매출액');
plt.show()
6. 이동평균선 그리기
d['adj_close'].loc[code, :].plot(figsize=(16,6), label='종가')
d['adj_close'].loc[code, :].rolling(20).mean().plot(label='20일 이동평균선')
d['adj_close'].loc[code, :].rolling(90).mean().plot(label='90일 이동평균선')
d['adj_close'].loc[code, :].rolling(120).mean().plot(label='120일 이동평균선')
d['adj_close'].loc[code, :].rolling(240).mean().plot(label='240일 이동평균선')
plt.title(f'{code} {codename} - 종목 차트')
plt.legend()
plt.show()
- .rolling(n) 은 직전 n개에 대해 Aggregation 준비를 해주는 함수이다.
- 인자로는 axis= , windows= (직전 n개 숫자 지정) 등이 있다.
- 실제 Aggregation은 .mean()이 수행
- plot()을 한번에 여러 개 실행함으로써, 같은 figure에 그림을 그린다.
'퀀트' 카테고리의 다른 글
11. 최근 수익률이 높았던 종목 보기 (0) | 2023.01.03 |
---|---|
10. 주식 시장에서 산업 별로 차지하는 비중을 그래프로 보기 (0) | 2022.12.30 |
08. 데이터 분석 : EDA (1) | 2022.12.26 |
07. Seaborn (0) | 2022.12.05 |
06. Matplotlib / Pandas 에서 plot 생성하기 (0) | 2022.12.01 |