pandas로 bar,hist,density 그리기

반응형
    반응형

    matplotlib에서 특징이 있는 그래프를 그리곤 했었는데 pandas만으로도 여러가지 그래프를 그릴 수 있습니다.
    이번 포스팅에서 다룰 그래프는 막대 그래프 종류만으로 구성해보았습니다.

    bar, histogram, density 세가지에 대해서 다루어 보겠습니다.

    bar plot

    시리즈(Series)

    -0.5~0.5 사이의 랜덤한 숫자 10개를 bar plot으로 그려보겠습니다.
    plot 파라미터로 kind='bar' 를 입력합니다.

    np.random.seed(222)
    s = pd.Series(np.random.rand(10)-0.5)
    s.plot(kind='bar')

    판다스에서 하는 것이기 때문에 시리즈나 데이터프레임만 가능합니다.
    numpy나 리스트는 matplotlib로 할 수 있습니다.

    데이터프레임(DataFrame)

    데이터프레임일때도 가능합니다.

    df = pd.DataFrame(np.random.rand(10,3),columns=['x','y','z'])
    df.plot(kind='bar')

    쌓는 bar plot도 가능합니다.
    stacked=True를 추가로 입력합니다.

    df.plot(kind='bar',stacked=True)

    축을 바꾸려면 kind='barh'으로 입력합니다.

    df.plot(kind='barh',stacked=True)

    히스토그램(histogram)

    히스토그램을 그릴려면 판다스에 내장되어있는 hist()를 사용합니다.
    hist 안의 파라미터는 matplotlib와는 다르니 주의해야 합니다.
    디폴트값으로 히스토그램은 10개 구간으로 나눠집니다.

    컬럼이 하나일때

    np.random.seed(222)
    df = pd.DataFrame(np.random.randn(1000))
    df.hist()

    구간을 나눌려면 bins를 사용합니다

    df.hist(bins=100)

    컬럼이 여러개일때

    컬럼이 여러개인 데이터프레임을 히스토그램으로 그리면 기본적으로 나눠져서 그려집니다. 즉, subplot으로 나옵니다.

    df = pd.DataFrame(np.random.randn(1000,4),columns=['a','b','c','d'])
    df.hist()

    지정된 컬럼만 히스토그램으로 그리기

    컬럼을 지정하면 지정된 컬럼에 한해서 히스토그램을 그립니다. 하지만 hist 메쏘드에서는 여러 컬럼은 안되고 한개의 컬럼에 대해서만 가능합니다.

    df.hist(column='a')

    지정 컬럼을 정하고 싶다면 plot으로 돌아와 그려냅니다.

    한꺼번에 그리고 싶다면 plot으로 돌아와 그려냅니다.
    현재의 df는 겹쳐있으므로 약간 위치를 조정하고 그려보겠습니다.

    df2 = pd.DataFrame(
        {'a': np.random.randn(1000) + 1,
         'b': np.random.randn(1000),
         'c': np.random.randn(1000) - 1,
         'd': np.random.randn(1000)+2
        },
        columns=['a', 'b', 'c','d'],
    )
    df2.plot(kind='hist',alpha=0.5)

    stacked도 가능합니다.

    df.plot(kind='hist',stacked=True)

    그룹별로 그리기

    해당 데이터프레임이 그룹별로 나눌 수 있을때, 그룹 별로 히스토그램을 따로 그릴 수 있습니다.

    df를 4개의 그룹으로 나누겠습니다.

    df

    Q컬럼을 보면 4개의 그룹으로 나눠진 것을 볼 수 있습니다.
    이런 경우 hist에 by='Q' 를 입력하면 그룹별로 히스토그램을 그려줍니다.

    df.hist(by='Q')

    특정 컬럼에 대해 그룹별로 그리고 싶다면 컬럼을 지정합니다.

    df.hist(column='a',by='Q')

    축 바꾸기

    축을 바꾸고 싶다면 orientation='horizontal' 를 넣어줍니다.

    컬럼이 하나더라도 똑같습니다. 

    여러 컬럼에 대해서만 보이겠습니다.

    df.hist(orientation='horizontal')

    density plot

    히스토그램에서 추정한 선을 그려넣는 density plot입니다.
    hist에서 density=True로 density를 허용한 상태로 만든 후 plot에 kind='kde' 를 넣습니다.

    정규분포를 그려보겠습니다.

    s = pd.Series(np.random.randn(1000))
    s.hist(density=True)
    s.plot(kind='kde')

    정규분포가 아니더라도 density plot이 가능합니다.

    s = pd.Series(np.random.rand(1000))
    s.hist(density=True)
    s.plot(kind='kde')

    마치며

    보시는 것처럼 히스토그램은 matplotlib와는 약간 다릅니다. 약간의 지식이 필요해보입니다.
    각자의 장단점이 있으니 참고하시고 자신에게 더 맞는 툴을 쓰면 될 것 같습니다.
    더 다채롭고 싶다면 matplotlib로 하는 게 낫습니다.
    그렇지만 hist, plot 을 쓰면 간단한 코드로 그래프를 그려낼 수 있는 부분에서는 판다스가 더 괜찮습니다.

     

    pandas로 그릴 수 있는 그래프가 아직 남았습니다.
    나머지는 다음 포스팅에 작성하도록 하겠습니다.

     

    관련 포스팅
    ndarray 랜덤한값 생성

    [matplotlib] 히스토그램 그리기 plt.hist()

    댓글

    Designed by JB FACTORY

    ....