【Python】seaborn의 그래프를 활용한 데이터 분석의 수법 메모

소개



Kaggle 등에서 데이터 분석을 할 때의 탐색적 데이터 분석(EDA) 단계에서,
자신이 자주 사용하는 데이터의 비주얼화, 그래프화에 관한 수법을 정리했습니다.

이번에는 matplotlib의 래퍼, seaborn을 메인으로 활용하겠습니다.
참고 : h tps : // 세아보 rn. py였다. rg / 어서 x. HTML

각 그래프 구현



■ 설치/라이브러리 로드


#未インストールの方は
pip install seaborn
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set() 
%matplotlib inline

■ 데이터 로드



데이터는 Kaggle의 HousePrice의 Train 데이터를 사용합니다.
htps //w w. 꺄gぇ. 코 m / c / 호세 - p 리세 s - d d
df = pd.read_csv('House Price/train.csv')
df.head()



81열의 데이터로 여기에서는 확인할 수 없지만 최종 열의 SalePrice가 목적 변수 데이터입니다.

■ 막대 그래프 활용



항목별 데이터 수량을 파악할 때 사용합니다.
  • sns.countplot (x = '열 이름', data = 데이터 이름)
  • sns.countplot(x='YrSold', data = df);
    



    ■히스토그램 활용



    데이터의 분포를 파악하고 싶을 때에 이용합니다.
  • sns.distplot (데이터 이름, 열 이름);
  • sns.distplot(df.YearBuilt);
    



    커널 밀도 추정(KDE)도 더해 출력해 줍니다.
     

    ■ 산포도의 활용



    산점도를 활용하여 두 변수 간의 상관 관계를 시각화합니다.
  • 데이터 이름 .plot (kind = 'scatter', x = '열 이름 1', y = '열 이름 2')
  • df.plot(kind='scatter', x='LotFrontage', y='SalePrice');
    


     
  • sns.regplot (x = 데이터 이름, 열 이름 1, y = 데이터 이름, 열 이름 2)

  • 이쪽은 선형 회귀 직선을 포함한 타입입니다.
    sns.regplot(x=df.LotFrontage, y=df.SalePrice);
    



    양의 상관 관계가 있고 LotFrontage가 올라가면 SalePrice도 올라가는 것을 알 수 있습니다.
     

    ■ 산포도의 응용



    여러 산포도를 함께 표시

    목적 변수(SalePrice)와 다른 숫자 데이터의 상관 관계를 함께 표시합니다.
    최대 표시 가능 수는 30이므로 변수가 30을 넘는 경우는 모두 표시할 수 없습니다.
    #数値データの列のみに絞る
    df_n = df.select_dtypes(include=[np.number])
    
    #グラフを作る
    fig = plt.figure(figsize=(14,9))
    for i in np.arange(30):  #30が最大
        ax = fig.add_subplot(5,6,i+1)
        sns.regplot(x=df_n.iloc[:,i], y=df_n.SalePrice)
    
    #グラフを整えて表示
    plt.tight_layout()
    plt.show()
    



    ■ 박스 플롯 (박스 수염도)의 활용



    상자 플롯을 사용하여 객체 데이터와 다른 변수의 관계를 시각화합니다.

    sns.boxplot(x="열 이름 1", y="열 이름 2", data=데이터 이름)
    sns.boxplot(x="SaleCondition", y="SalePrice", data=df);
    



    ■박스 플롯의 응용



    모든 객체 데이터와 목적 변수 (SalePrice)의 관계를 함께 표시

    df 부분에 데이터 이름, SalePrice 부분에 목적 변수를 다시 입력하면 다른 데이터에도 사용할 수 있습니다.
    categorical_features = df.select_dtypes(include=[np.object])
    for c in categorical_features:
        df[c] = df[c].astype('category')
        if df[c].isnull().any():
            df[c] = df[c].cat.add_categories(['MISSING'])
            df[c] = df[c].fillna('MISSING')
    
    def boxplot(x, y, **kwargs):
        sns.boxplot(x=x, y=y)
        x=plt.xticks(rotation=90)
    f = pd.melt(df, id_vars=['SalePrice'], value_vars=categorical_features)
    g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
    g = g.map(boxplot, "value", "SalePrice")
    

    출력 그래프의 일부 보기
    (실제로 모든 객체 변수의 박스 플롯이 표시됩니다)



    ■히트맵 활용



    모든 수치 데이터 간의 상관 관계를 히트 맵으로 표시
    plt.figure(figsize=(13, 11))
    sns.heatmap(df.corr())
    plt.tight_layout();
    



    ■히트맵의 응용



    목적 변수 열 (SalePrice)과 상관도가 높은 열 베스트 10을 히트 맵으로 표시
    어떤 변수가 중요한지 즉시 이해할 수 있으며 변수를 좁힐 때 효과적입니다.
    cols = df.corr().nlargest(10,'SalePrice')['SalePrice'].index
    cm = np.corrcoef(df[cols].values.T)
    
    plt.subplots(figsize = (12,10))
    sns.heatmap(cm, vmax=.8, linewidths=0.01, annot=True, cmap='viridis',
                xticklabels=cols.values, yticklabels=cols.values, annot_kws={'size':14});
    



    ■ 페어 플롯 활용



    쌍 플롯에 지정된 숫자 데이터 열의 상관 관계를 함께 표시
    cols = ['SalePrice', '1stFlrSF', 'PoolArea', 'OverallQual'] #任意の列を指定、さらに増やしてもよい
    sns.pairplot(df[cols], size=3)
    plt.tight_layout();
    



    요약



    분석에 자주 사용하는 데이터 시각화 기술을 열거했습니다.
    변수 간의 관계를 시각화하고 이해함으로써 데이터 분석의 정확성을 더욱 높일 수 있습니다.
    또한 seaborn은 시인성의 높이도 물론 배경색과 색조 등 매우 센스가 잘 분석을 즐겁게 해줍니다.

    참고



    Matplotlib&Seaborn 구현 핸드북(히데와 시스템)
    The Python Graph Gallery : htps : // py 텐-g 등 ph- ぇ ry. 코m/
     

    데이터 구조를 파악한 후의 결측치 처리의 정리 기사도 좋으면 봐 주세요.
    htps : // 코 m / 료 111 / ms / 4177c732c9801bcb17

    좋은 웹페이지 즐겨찾기