컬럼 당 분포를 거의 단번에 출력

과제 제기



가리비의 데이터 세트가 수중에 있다고 가정합니다.
강렬하게 큰 데이터가 아니면, pythonpandasread_csv에서 읽고 개관을 잡을 때, 우선은 .describe()에서 각종 통계량을 파악할 수 있습니다만, 다음의 한 손으로 컬럼마다의 분포 보고 싶지 않아?
이 기사에서는, matplotlib , pandas plot , seaborn 의 3 개의 묘화 라이브러리를 사용해, 거의 단번에 각 컬럼의 분포를 묘화 하는 코드를 소개합니다.

환경


python 3.6

라이브러리 그룹 준비



처음에 쓴 것처럼 matplotlib , pandas , seaborn 를 읽어 둡니다.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

데이터 로드 및 데이터 프레임 생성



이 예에서는 load_boston를 기반으로 하지만, 자신의 데이터라도 좋을 것입니다.
from sklearn.datasets import load_boston
X = load_boston()
X.feature_names
# array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',    'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
df = pd.DataFrame(X.data, columns=X.feature_names)
df.head()

데이터는 이런 느낌:


그래서 처음에 쓴 .describe()을 마침내,
df.describe()

이런 느낌:


뭐, 그런 걸까, 라고.

분포를 확인?



데이터를 볼 때, 자면이 아니고 그림적으로 보이는 것이 직감에 호소하는 일도 있지요.
우선은 히스토그램이라고 하는지 분포를 그려 보자,(이 기사의 목표)
데이터세트df의 열CRIM 분포(히스토그램)를 확인해 봅니다.

matplotlib의 경우


plt.hist(df['CRIM'])



pandas plot의 경우


pandas 그리기 기능을 사용하면
df['CRIM'].plot(kind='hist')



seaborn의 경우



왠지 야케에 bin이 가늘다,,,
sns.histplot(df['CRIM'])



다만, 컬럼마다 이것을 하는 것 같네요. .

칼럼 당 분포를 출력합시다.



어쨌든, 많은 그래프를 내기 때문에 조금 큰 쪽으로 출력하도록 해 둡시다 :
fig = plt.figure(figsize=(25, 25))

그 후, 방금전과 같이 3가지( matplotlib , pandas plot , seaborn )로 단번에 출력하는 코드를 써 봅니다.

matplotlib로 단번에 출력


for i, col in enumerate(df.columns):
    plt.subplot2grid((5, 3), (i//3, i%3))
    plt.hist(df[col])
    plt.title(col)



포인트


for i, col in enumerate(df.columns):
    plt.subplot2grid((5, 3), (i//3, i%3))
  • 아이디어의 원천은 여기. for 루프로 컬럼을 하나씩 취해 늘어놓으면 좋겠다, 라고. enumerate 로 그래프에 차례로 i 를 붙여 그려 갑니다.
  • plt.subplot2grid에서 그것을 실현합니다. 그리드 모양으로 나란히 갑니다.
  • (5,3) 곳은 세로로 5, 옆에 3 늘어서 있다는 의미. load_boston에는 열이 13 있습니다. 5 x 3=15 그리드를 준비해 두면 전부 그려집니다.
  • (i//3, i%3) 그리드 좌표 같은 느낌. i//3i3로 나눈 경우의 몫이고 i%3는 너무. 이미지적으로는 ↓ 느낌입니다.

  • 나머지 plt.hist(df[col])로 그리기, plt.title(col)에서 제목을 표시하고, col마다 실행합니다. 색감을 바꾸거나, 그리드의 크기를 바꾸거나 하는 경우는 적절히 인수를 바꾸거나,, 등은, Reference 를 바라봐 주세요!


  • pandas plot으로 출력



    기본 아이디어는 함께 있지만 pandas plot 경우 코드 :
    for i, col in enumerate(df.columns):
        ax = plt.subplot2grid((5, 3), (i//3, i%3))
        df[col].plot(kind='hist', ax=ax)
        ax.set_title(col)
    



    seaborn으로 출력



    마찬가지로 seaborn 이런 느낌 :
    for i, col in enumerate(df.columns):
        ax = plt.subplot2grid((5, 3), (i//3, i%3))
        sns.histplot(df[col], ax=ax)
        ax.set_title(col)
    



    Reference


  • subplot2grid
  • matplotlib.pyplot.hist
  • pandas plot
  • seaborn histplot
  • 좋은 웹페이지 즐겨찾기