판다스 plot을 이용한 범주형 및 연속값 분포의 시각화

14546 단어 pandas파이썬Kaggle

판다스 plot을 이용한 범주형 및 연속값 분포의 시각화



kaggle이나 csv 파일의 데이터 분석을 할 때 키별 특징 량의 분포를 시각화하여 비교하고 싶습니다.
카테고리 값의 경우 막대 위에 숫자를 표시합니다.

콘텐츠


  • 범주형 값 시각화
  • 연속 값 시각화
  • 2DataFrame 간의 범주형 값 비교
  • 2DataFrame 간의 연속 값 비교

  • 필요한 라이브러리 가져오기



    python3
    import pandas as pd
    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    np.random.seed(seed=0)
    

    jupyter notebook라면 다음도 추가

    python3
    %matplotlib inline
    

    DataFrame 준비



    python3
    length=500
    train_df = pd.DataFrame(np.random.normal(loc=0, scale=1, size=(length)),columns=["cont"])
    eval_df = pd.DataFrame(np.random.normal(loc=1, scale=0.5, size=(length)),columns=["cont"])
    train_df = train_df.assign(cat=np.random.randint(0,5,length)) 
    eval_df = eval_df.assign(cat=np.random.randint(0,6,length)) 
    

    범주형 값 시각화



    python3
    def categorical_plot(df, key):
        data = df[key].value_counts(sort=False)
        ax = df[key].value_counts(sort=False).plot(kind="bar", title=key)
        for i, d in enumerate(data):
            ax.text(i, d, d, horizontalalignment="center",
                    verticalalignment="bottom")
        return ax
    

    python3
    categorical_plot(train_df, "cat")
    



    연속 값 시각화



    python3
    def continuous_plot(df, key):
        ax = df[key].plot(kind="density", title=key)
        return ax
    

    python3
    continuous_plot(train_df, "cont")
    



    2DataFrame 간의 범주형 값 비교



    python3
    def compare_cat(trdf, evdf, key):
        tr_df = trdf.rename(columns={key: "train"})
        ev_df = evdf.rename(columns={key: "eval"})
        tr_df = tr_df["train"].value_counts(sort=False)
        ev_df = ev_df["eval"].value_counts(sort=False)
        plot_df = pd.concat([tr_df, ev_df], axis=1)
        ax = plot_df.plot(kind="bar", title=key)
    
        for i, d in enumerate(tr_df):
            ax.text(i, d, d, horizontalalignment="right",
                    verticalalignment="bottom")
        for i, d in enumerate(ev_df):
            ax.text(i, d, d, horizontalalignment="left",
                    verticalalignment="bottom")
        return ax
    

    python3
    compare_cat(train_df, eval_df, "cat")
    



    2DataFrame 간의 연속 값 비교



    python3
    def compare_cont(trdf, evdf, key):
        tr_df = trdf.rename(columns={key: "train"})["train"]
        ev_df = evdf.rename(columns={key: "eval"})["eval"]
        plot_df = pd.concat([tr_df, ev_df], axis=1)
        ax = plot_df.plot(kind="density", title=key).legend(loc="upper left")
        return ax
    

    python3
    compare_cont(train_df, eval_df, "cont")
    

    좋은 웹페이지 즐겨찾기