finviz 섹터별 주가 Heatmap을 Python으로 직접 그려봅니다.
1. 데이터 수집
KRX 한국증권거래소 정보데이터시스템 데이터 다운로드
http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020101
2. 데이터 불러오기
판다스 데이터 프레임. encoding = 'cp949'
df = pd.read_csv("/content/drive/MyDrive/dataset/data_2020_20220331.csv", encoding='cp949')
df.head()
3. 데이터 슬라이싱
시장구분에서 코스피에 해당하는 종목만 가져오기
종목코드, 종목명, 시장구분, 등락률, 시가총액만 남기고 삭제(drop)
kospi = df[df['시장구분'] =='KOSPI']
not_use_columns = ["소속부","종가","대비","시가","고가","저가","거래량","거래대금","상장주식수"]
kospi = kospi.drop(not_use_columns, axis=1)
kospi.head()
4. 코스피 주식 리스트 수집(API by FinanceDataReader)
Finance Data Reader 패키지를 사용
stocks = fdr.StockListing('KOSPI')
stocks.head()
5. 종목코드에 섹터를 매핑
stock 코스피 리스트에서 Symbol과 Sector 칼럼만 가져오기
Kospi 데이터 프레임에 Sector를 매핑
Kospi['code'] 와 sector['Symbol']이 같으면, sector['Sector']를 반환
반환한 sector['Sector'] 값을 kospi["섹터"] 에 할당
sector = stocks[["Symbol","Sector"]]
sector = sector.to_numpy()
def make_sector(code):
for i in range(len(sector)):
if code == sector[i][0]:
return sector[i][1]
return 'No'
kospi["섹터"] = kospi["종목코드"].map(make_sector)
kospi.head()
7. plotly 트리맵 시각화
plotly 패키지를 사용(import plotly as px)
섹터, 종목명 박스 구성. 박스크기는 시가총액. 색상은 등락률로 설정
fig = px.treemap(kospi, path=['시장구분','섹터','종목명'], values='시가총액',
color='등락률', hover_data=['등락률','종목코드'],
range_color=(-0.3,0.3),color_continuous_scale='balance')
fig.update_traces(textposition='middle center',text = kospi['등락률'])
fig.update_traces(textfont_color='white',textfont_size=25)
fig.update_layout(height=800)
fig.show()