본문 바로가기

경제, 부동산 데이터 분석/3. 주식

[데이터 분석] 코스피 섹터별 수익률 그리기(feat. python plotly)

finviz 섹터별 주가 Heatmap을 Python으로 직접 그려봅니다.

2022.3.31 finviz S&P 500 Map

https://finviz.com/map.ashx

 

S&P 500 Map

× Ever heard of Finviz*Elite? Our premium service offers you real-time quotes, advanced visualizations, technical studies, and much more. Become Elite and make informed financial decisions. Find out more --> Upgrade your FINVIZ experience Join thousands o

finviz.com

 

1. 데이터 수집

KRX 한국증권거래소 정보데이터시스템 데이터 다운로드

http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020101 

 

KRX 정보데이터시스템

증권·파생상품의 시장정보(Marketdata), 공매도정보, 투자분석정보(SMILE) 등 한국거래소의 정보데이터를 통합하여 제공 서비스

data.krx.co.kr

 

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()

KOSPI treemap by python

반응형
LIST