열정, 근면, 성장
[클론 코딩] KOSPI 지수 데이터를 사용하여 분석하기 2 본문
[클론 코딩] KOSPI 지수 데이터를 사용하여 분석하기 1
https://dacon.io/competitions/official/235980/codeshare/6634 KOSPI 와 외국지수 상관관계 분석 및 CAPM 기반 포트폴리오 작성 월간 데이콘 KOSPI 기반 분석 시각화 경진대회 dacon.io 위 게시글의 코드를 따라 치면서
growing-sub.tistory.com
이전 게시물
클러스터링 결과 해석까지 했다.
1. matplotlib.pyplot 활용(산점도)
01. Matplotlib 기본 사용
 Matplotlib 라이브러리를 이용해서 그래프를 그리는 일반적인 방…
wikidocs.net
(출처: https://wikidocs.net/92071)
matplotlib는 그래프를 그릴 때 사용한다.
- plt.xlabel: 그래프의 x축 레이블
- plt.ylabel: 그래프의 y축 레이블
- plt.title: 그래프의 타이틀
- plt.scatter: 산점도 그리기
산점도는 두 변수의 상관 관계를 직교 좌표계의 평면에 점으로 표현하는 그래프다.
따라서 plt.scatter(cluster_total.std(), cluster_total.mean())은 x축은 군집의 표준편차, y축은 군집별의평균수익률을 나타내는 산점도를 만드는 코드다.
- plt.figure: 그래프 이미지에 관한 파라미터
figsize 인자로 이미지의 크기를 설정한다 figsize(8인치, 6인치)
- plt.rcParams: 그래프의 스타일 관련
여러 개의 그래프를 한 이미지에 넣고 각 그래프마다 스타일을 다르게 하고 싶을 때 사용한다.
['axes.unicode_minus'] = False는 마이너스(-) 기호 깨짐을 방지하기 위한 코드다.
# 군집별 수익률 대비 risk를 시각화
plt.figure(figsize=(8,6))
plt.scatter(cluster_total.std(), cluster_total.mean())
plt.xlabel('risk')
plt.ylabel('return')
rc('font', family= 'Batang')
plt.rcParams['axes.unicode_minus']=False
plt.title('평균수익률 및 표준편차')
- plt.annotate: 주석 달기
plt.annotate(
label | 주석 내용 |
xy=(x, y) | 주석 x좌표, y좌표 |
xytext=(30, -30) | xy에서 x축으로 30 더 가고 y축으로 30 내려가라 |
textcoords = 'offset points' | offset points 는 xy에서부터 xytext offset 위치(단위 point)에 출력 |
ha = 'right' | horizontal alignment 우 |
va = 'bottom' | vertical alignment 하단에 |
bbox | 텍스트 박스 |
arrowprops | 화살표 특성 |
)
for label, x, y in zip(cluster_total.columns, cluster_total.std(), cluster_total.mean()):
plt.annotate(label, xy=(x,y), xytext=(30, -30),
textcoords = 'offset points',
ha = 'right', va = 'bottom',
bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5),
arrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0'))
2. 상관관계 분석
히트맵&상관관계 산점도 그래프를 통해 KOSPI와 나머지 변수들의 상관관계를 확인한다.
2.1 히트맵
dataframe_name.corr()을 통해 변수별 상관계수를 쉽게 확인할 수 있다.
df2 = df1.corr() # df1은 result_data, 각 지수 데이터를 합친 데이터프레임이다.
df2
seaborn을 이용한 heatmap 그리기
- sns.heatmap 인자
result_data.corr() | 히트맵 만들고자 하는 데이터 |
annot = True | 각 셀에 숫자 표기 = True |
fmt = '.2f' | 해당 셀에 표기할 데이터 형식 = 소숫점 둘째 자리까지 |
linewidths = 5 | 셀 사이의 선 width |
cmap = 'Blues' | 히트맵 표현할 색깔 = 파란색 |
plt.figure(figsize=(10,10))
sns.heatmap(result_data.corr(), annot=True, fmt='.2f', linewidths=5, cmap='Blues')
2.2 상관관계 계수 확인하기
idx, vals = [], []
for ix, i in enumerate(result_data.columns.values):
for j in result_data.columns.values[ix + 1:]: # 중복 방지
idx.append((i,j))
vals.append(result_data.corr()[i][j])
*enumerate는 인덱스와 인수를 동시에 루프 돌리는 python 내장함수이다.
idx에 (i,j) 튜플 형식으로 append 했다.
pandas의 Series 자료구조를 사용하여 지수(혹은 자산)별 상관관계 출력
ser = pd.Series(data=vals, index=idx)
ser_ord = ser.sort_values(ascending=False)
ser_ord
*pandas Series 자료구조와 list의 차이
: list는 인덱싱을 숫자로 해야 하지만 [0], [3]... Series는 인덱스를 정의할 수 있다. ['2021-02-05']...
2.3 산점도 그래프
여러 개의 연속형의 변수들을 한눈에 확인하기 쉽게 산점도 그래프로 표시할 수 있다.
sns.set(font_scale=1.1) # 폰트 사이즈
sns.set_style('ticks') # 축 눈금 표시
data = result_data[["KOSPI", "NASDAQ", "S&P", "Dollar", "USA_TREASURY", "Nikkei"]]
sns.pairplot(data, diag_kind=None)
plt.show()
diag_kind=None는 산점도 그래프의 대각선(변수 그 자체만을 표현하는 칸)에 어떤 그래프 형식을 표시할 지 할당하는 인자이다. diag_kind의 default는 히스토그램이다.
클론코딩은 여기까지 하려고 한다.
그 뒤의 최적화를 위한 cvoxpt library는 접하지 못한 개념이 너무 많아서, 시간이 꽤 걸릴 것 같다.
이후로는 이 코드를 기반으로 약간의 변주를 주어 다시 분석해보려고 한다.
'코딩 > 데이터분석' 카테고리의 다른 글
KOSPI를 포함한 지수 및 자산 군집 분석 (1) | 2023.05.19 |
---|---|
[클론 코딩] KOSPI 지수 데이터를 사용하여 분석하기 1 (0) | 2023.03.16 |
공부 계획2 (0) | 2023.03.04 |
공부 목표 (0) | 2023.02.03 |