지난 강의에 이어서 seaborn으로 시각화를 진행하였다.

sns.boxplot(data=df, x="신장(5Cm단위)", y="체중(5Kg 단위)", hue='음주여부')         
sns.violinplot(data = df, x="신장(5Cm단위)", y="체중(5Kg 단위)", hue="음주여부", split =True)                          
sns.swarmplot(data=df_sample, x = "신장(5Cm단위)", y = "체중(5Kg 단위)", hue='음주여부')                                                                   
sns.lmplot(data = df_sample, x="연령대코드 (5세 단위)", y='혈색소', hue = "음주여부", col="성별코드")       
sns.lmplot(data=df_sample, x="(혈청지오티)AST", y="(혈청지오티)ALT", hue = "음주여부", robust = True)
sns.scatterplot(data=df_sample, x="(혈청지오치)AST", y="(혈청지오티)ALT", hue="음주여부")               
  • boxplot: 25%, 75%를 기준으로 박스(막대) 그래프와 오차막대를 나타낸다.
  • violinplot: 바이올린 현과 같은 그래프
  • swarmplot: 범주형 데이터를 산점도로 나타내기
  • lmplot: 회귀선 그리기. col을 사용해 여러 개의 컬럼을 나누어서 그릴 수 있고, robust를 사용해 이상치를 제거할 수도 있다.
  • scatterplot: 산점도로 나타내기

이어서 distplot, axvline, kdeplot을 살펴보았다.

df_chol = df[df["총콜레스테롤"].notnull(), "총콜레스테롤"]
sns.distplot(df_chol, bins=100)        
plt.axvline(df_sample["총콜레스테롤"].mean(), linestyle = ":")
sns.distplot(df.loc[df["총콜레스테롤"].notnull() & (df["음주여부"] == 1)])       
sns.kdeplot(df.loc[df["총콜레스테롤"].notnull() & (df["음주여부"] == 1)])       
  • distplot: 히스토그램과 곡선을 동시에 나타낸다. 시리즈 형태가 들어가야 한다.
  • axvline: 그래프에 특정 값을 기준으로 직선을 그어 그 값을 기준으로 구분이 쉽도록 해준다. 위 예시에서는 평균에 선을 그었다 linestyle로 직선의 모양을 지정할 수 있다.
  • kdeplot: distplot에서 히스토그램이 사라진 버전.


상관관계 파악

앞선 모든 과정은 이걸 하기 위한 준비단계였다고 봐도 무방하다. 컬럼들이 실제로 상관관계가 있는지(인과관계가 아니다) 파악한다면 새로운 인사이트를 얻을 수 있을 것이다.

columns = ["연령대코드 (5세 단위)", "체중(5Kg 단위)", "신장(5Cm단위)", "허리둘레",
            "시력(좌)", "시력(우)", "청력(좌)", "청력(우)", "수축기혈압",
            "이완기혈압", "식전혈당(공복혈당)", "총콜레스테롤", "트리글리세리드",
            "HDL콜레스테롤", "LDL콜레스테롤", "혈색소", "요단백", "혈청크레아티닌",
            "(혈청지오티)AST", "(혈청지오티)ALT", "감마지피티", "흡연상태", "음주여부"]

df_small = df_sample[columns]
df_corr = df.small.corr()             # pearson 상관 계수 테이블 구하기

df_corr["신장(5Cm단위)"].sort_values()

df_corr.loc[df_corr["신장(5Cm단위)"] > 0.3, "신장(5Cm단위)"]

분석을 원하는 컬럼을 columns에 담고 .corr()을 이용해서 상관 계수를 구하였다. 여기서는 Pearson의 상관계수를 기본적으로 사용한다. 그리고 상관 계수는 특정 값 이상이어야만 의미가 있으므로(‘특정 값’은 구글링해보자) 그 값들만 추출한다.

heatmap을 사용하면 상관 계수를 시각적으로 나타낼 수 있다. 마치 모자이크 처리를 하듯이 상관 계수가 큰 경우에는 진한 색으로, 아닌 경우에는 점점 연하게 표시한다.

sns.heatmap(df_corr, annot = True, fmt = ".2f", cmap = "Blues")

annot으로 숫자 표시 여부를 지정하고, fmt로 소수점을 조절, cmap으로 색상을 설정할 수 있다.

여기서 배운 다양한 전처리, 통계, 시각화, 상관 관계 파악 기법을 활용하면 임의의 데이터에 대해 가설을 설정하고 이를 검증할 수 있다. 다만, 상관 관계는 인과 관계가 아니므로, 인과 관계를 밝히기 위해서는 추가적인 검증을 진행해야 한다.

관련 코드 보러가기

댓글남기기