본문 바로가기

Python/데이터 시각화

[Python] Seaborn으로 데이터 분포 3분만에 마스터하기

반응형

Python에서 데이터 분포를 그리기 위해서 다양한 방법이 있다. 그 중에서도 가장 시각적으로 효과적이고 난이도도 쉬운 Seaborn(향후 sns)으로 데이터 분포를 시각화 하는 패키지를 소개하려고 한다. 대표적으로 sns.histplot()이 있고, 이외에 유용한 패키지를 중심으로 다뤄보려 한다.

 

 

목차

1. 기초 데이터 및 Seaborn 소개

2. 상대적인 비율을 보여주는 데이터 분포 시각화

3. 절대적인 빈도를 보여주는 데이터 분포 시각화( feat. distplot() )

4. 시각화에 유용한 파라미터 소개

     

    1. 기초 데이터 및 Seaborn 소개

     

    • 기초 데이터셋 소개

    이번 포스팅에서 데이터 시각화할 때 사용할 아주 기초적인 데이터이다. 여기에서는 데이터 분포를 시각화하는 것이기 때문에 여기 있는 함수들을 절대 이해할 필요 없이, 그냥 복사하여 사용하는 것을 권장한다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ## 기초 패키지
    import pandas as pd
    import numpy as np
     
     
    ## 시각화를 위한 패키지
    import seaborn as sns
     
    ## 한글 폰트 깨짐 방지
    plt.rc('font', family = 'Malgun Gothic')
    plt.rc('axes', unicode_minus = False)
     
    ## 데이터 분포 형태
    distribution1 = np.random.randint(0,2000,1000)
    distribution2 = np.random.randint(200,2200,1000)
    cs

     

     

    • 데이터 분포 시각화를 위한 Seaborn 패키지 소개 
      • 첫 번째. 데이터 분포의 상대적인 비율을 보여주는 그래프
        : 데이터의 상대적인 밀도를 표현해주는 방법은 아주 간단하게 sns.histplot()과 안의 파라미터를 통해 표현할 수 있다. 
      • 두 번째. 데이터 분포의 절대적인 빈도를 나타내는 그래프
        : 데이터의 빈도를 표현하는데 아주 기본이 되는 시각화 이름은 히스토그램(histogram)이다. Seaborn에서도 히스토그램을 그리는 방법은 대표적으로 2가지가 있고, 이에 대해서 아주 간단하게 소개를 해보고자 한다. 

     

     

     

    2. 상대적인 비율을 보여주는 데이터 분포 시각화 

     

    Seaborn에서 histplot()을 사용하는 방법 자체는 아주 간단하다. 이때 아주 기초적인 기능들을 소개해서 자신이 전하고자 하는 메시지에 적절하게 파라미터를 조정할 수 있는 방법에 초점을 맞춰 보려 한다. 

     

    • sns.histplot() 기본문법 소개
      • sns.histplot( "데이터를 넣어주세요", stat = "표현하고 싶은 통계치를 넣어주세요" )
        : 사용할 수 있는 통계치는 stats라는 파라미터를 통해서 설정할 수 있다. 다른 파라미터는 조정을 안 해도, stat 변수만큼은 직접 조정하여 데이터 시각화를 하는 것을 권장한다. 사용할 수 있는 변수 종류는 아래의 표를 참고하자.

        참고로 비율을 표시할 수 있는 파라미터는 총 3가지가 있고, 이번 포스팅에서는 면적이 1로 더해지는 density 파라미터를 사용할 것이다.

      • sns.histplot() 기초 코드 및 시각화

    seaborn을 통해 비율 기반 histogram을 그렸다.
    상대적 비율을 나타내는 histogram

    1
    2
    3
    4
    5
    ## 상대적인 비율을 나타내는 데이터 시각
    sns.histplot(distribution1
                , stat = 'density'  ## 면적의 합이 1로 더해지는 비율 파라미터
                )
     
    cs

     

     

    histplot에서 사용할 수 있는 집계 파라미터는 아래와 같은 사항이 있으니 참고하길 바란다.

    stats 파라미터 목록 설명
    count 분포 내에서 발생한 절대적 빈도를 나타낸다.
    frequency 절대적 빈도를 나타내는데, 각 bin 내에서 count를 나타내준다. 
    probability 또는 proportion 높이의 합이 1로 더해지는 분포로 정규화
    percent 높이의 합이 100으로 더해지는 분포로 정규화
    density 전체 면적이 1로 합해지는 분포로 정규화

     

     

     

    참고로 동일한 기능을 하는 예전 패키지로 sns.distplot이 있다. 이 패키지는 density를 정의한 histplot()과 동일한 시각화를 보여준다. 하지만 이는 seaborn이 업그레이드 되면서 향후 삭제될 패키지이기 때문에 사용하지 않는 것을 추천한다. 

     

     

     

     

    3. 절대적인 빈도를 보여주는 데이터 분포 시각화 ( feat. sns.displot() )

     

    절대적인 빈도를 표현할 때는 stat 파라미터에서 count를 사용하는 것이 기본이다. 여기에서 다른 꿀팁을 알려주자면, 동일한 기능을 하는 패키지 중에 sns.displot()이란 함수도 있다.  따라서 둘 중 원하는 패키지를 사용하여 시각화하면 용이할 것이다. 

     

     

     

    • 데이터 분포 시각화 예시 및 코드 안내 
    histplot을 통한 빈도 표현
    distplot을 통한 빈도 표현

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #plt.subplot(1,2,1)
    sns.histplot(distribution1
                , stat = 'count'
                )
    plt.title('나는 histplot이에요', fontsize = 14)
     
     
    sns.displot(distribution1)
    plt.title('나는 displot이에요', fontsize = 14)
    cs

     

     

     

     

    4. 시각화에 유용한 파라미터 소개 ( 색상 조절하기, Bar 조절하기, 선 그리기)

     

    기본적인 Histogram 혹은 Distribution Plot을 그렸으니, 이제는 보다 깔끔한 시각화를 위해서 기초적인 몇 가지를 더 설정해보자. 많은 기능들이 있겠지만, 일단 3가지 기초 파라미터를 소개해보려고 한다. 

     

    첫 번째 Bar의 모양 및 색상 조절하기

    • 기본 문법 - sns.histplot( color = "원하는 색상을 넣어주세요", alpha = "저는 투명도에요" )
      •  color에는 blue, red 등 기본적인 색상도 들어갈 수 있고, python에서 제공하는 파레트도 삽입할 수 있다.
      • alpha는 투명도 설정하는 파라미터로 0 ~ 1까지 숫자를 삽입하면 된다. 

    histplot의 색상을 조절한 시각화이다.
    histplot의 색상을 조절한 시각화

    1
    2
    3
    4
    5
    sns.histplot(distribution1
                , stat = 'density'  ## 통계치 설정
                , color = 'orange' ## 색상을 설정
                , alpha = 0.5 ## 투명도 
                )
    cs

     

     

     

    두 번째 Bar 모양 및 테두리 조절하기

    • 기본 문법 - sns.histplot( element = "설정할 수 있는 옵션은 3개가 있어요" )
      • bars: 각 bin의 테두리를 그려주는 시각화
      • step: 각 bin의 테두리를 없애주는 시각화. 참고로 이거는 alpha 파라미터와 같이 쓰면 굉장히 유용하다.
      • ploy: 테두리를 없애면서, 직각이 아닌 꺽은 선형태로 테두리를 그려주는 옵션

    histogram에서 테두리를 없앴다.
    histogram에서 테두리를 없앴다.

    1
    2
    3
    4
    5
    6
    sns.histplot(distribution1
                , stat = 'density'
                , color = 'orange'
                , element = 'step' ## bars, step, ploy 중 선택해주세요.
                 , alpha = 0.4
                )
    cs

     

     

     

     

    세 번째 분포를 표현하는 선 그리기

    • 기본 문법 - sns.histplot( kde = True or False )
      • kde는 boolean으로 true 혹은 false 값을 쓰면된다. 
      • 이 시각화는 독자들로 하여금 굉장히 이해하기 편하게 해줄 수 있기 때문에 반드시 쓰는 것을 권장한다.

    분포의 선을 그린 distribution plot

    1
    2
    3
    4
    5
    6
    7
    sns.histplot(distribution1
                , stat = 'density'
                , color = 'orange'
                , alpha = 0.4
                , element = 'step'
                , kde =  True  ## 선을 그리는 
                )
    cs

     

     

     

     

    기타 시각화에 도움이 될만한 꿀팁 모음

    • Python에서 범례(Legend)를 설정하고 싶다면? URL
    • Python에서 라인 그래프를 그리는 방법 URL
    반응형