2021년 5월 13일 목요일

Python - Dendrogram

Factor analysis 이후 PCA 분석방법이나 Dendrogram 을 적용해 어떤 항목끼리 묶어서 생각할수 있는지 확인하는 방법

1.데이터 준비
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
df_kospi_total = pd.read_csv("./kospi_total.csv")
df_kospi_total = df_kospi_total.drop(['Unnamed: 0'],axis=1)
df_kospi_total = df_kospi_total.fillna(0)
df_kospi_total = df_kospi_total.iloc[-20:,:8] #day , item count
df_kospi_total = df_kospi_total.astype(int)
df_trans_kospi_total = df_kospi_total.T


2.데이터 확인
df_trans_kospi_total
df_kospi_total
**모든 data는 8개 종목 20개 날짜별 가격으로 되어있음**

2.5정방향과 Transpose 데이터의 형상에 따른 Dendrogram
***"가격"을 기준으로 묶여있다***
***"종목"을 기준으로 묶여있다***

즉 Dendrogram 에서 사용하기 위해서는 data의 형태가
"좌측에 type , 우측에 attribute 가 들어가야 정상적 출력이 가능하다



3.create Dendrogram x-axis label

위의 그림처럼 label을 지정하지 않으면 1,2,3등의 숫자로 표시되어 다시 dataframe 을 확인해서 해당 숫자와 항목을 비교하는 작업을 거쳐야 한다
이를 위해 dendrogram 속성에 labels를 만들어준다
labels 에 들어갈수 있는 data type 을 확인하면 다음과 같다 링크



ndarry 타입의 데이터만 label로 사용이 가능한것을 확인가능하다

labeling = df_kospi_total.columns.tolist()

를 사용해 dataframe 의 column 이름을 list로 받아서 label 에 사용한다


4.dendrogram 생성
import scipy.cluster.hierarchy as shc
labeling = df_kospi_total.columns.tolist()
plt.figure(figsize=(10, 7))
plt.title("Customer Dendograms")
mergings = shc.linkage(df_trans_kospi_total, method='ward')
dend = shc.dendrogram(mergings,labels=labeling,
leaf_rotation=90,leaf_font_size=20) 
plt.savefig('dendrogram.png')


댓글 없음:

댓글 쓰기