ABOUT ME

AI Engineer가 되는 그날까지

Today
Yesterday
Total
  • Seaborn
    CS 공부/Data Visualization 2023. 3. 27. 23:35

    Seaborn


    • Matplotlib을 기반으로 다양한 색상 테마와 통계용 차트 등의 기능을 추가한 시각화 라이브러리
    • Matplotlib으로 커스텀 가능 (디테일한 커스텀보다는 새로운 방법론을 위주로)
    • 쉬운 문법과 깔끔한 디자인
    pip install seaborn==0.11
    import seaborn as sns

     

    categorical API

    Categorical estimate plots

    • countplot: 범주를 이산적으로 세서 막대 그래프로 그려주는 함수 
    # ordered로 순서 명시
    # hue: 데이터의 구분 기준을 정하여 색상을 통해 내용을 구분
    # saturation: 탁한 정도
    # palette로 색 변경
    sns.countplot(x='race/ethnicity',data=student,hue='gender', palette='Set2'
    			order=sorted(student['race/ethnicity'].unique()))
    • barplot(), pointplot()

     

    Categorical distribution plots

    •  boxplot
      • IQR(interquartile range): 25~75%
      • whisker : 박스 외부의 범위를 나타내는 선
      • outlier : -IQR1.5과 +IQR1.5을 벗어나는 값
      • min : -IQR * 1.5 보다 크거나 같은 값들 중 최솟값
      • max : +IQR * 1.5 보다 작거나 같은 값들 중 최댓값
    fig, ax = plt.subplots(1,1, figsize=(12, 5))
    sns.boxplot(x='math score', data=student, hue='', ax=ax)
    plt.show()

     

    • violin plot
      • box plot은 대푯값을 잘 보여주지만 실제 분포를 표현하기에는 부족함
      • violin plot은 실제 분포 표현에 적합
      • 흰점이 50%, 중간 검정 막대가 IQR 범위를 의미
    fig, ax = plt.subplots(1,1, figsize=(12, 5))
    sns.violinplot(x='math score', data=student, ax=ax,
                   bw=0.1, #분포 표현을 얼마나 자세하게 보여줄 것인지 (‘scott’, ‘silverman’, float)
                   cut=0, # 끝부분을 얼마나 자를 것인지 (float)
                   inner='quartile', # 내부를 어떻게 표현할 것인지 (“box”, “quartile”, “point”, “stick”)
                   split=True # violin plot 두개 동시에 비교
                   scale=count # 각 바이올린의 종류 (“area”, “count”, “width”)
                  )
    plt.show()
    • boxenplot()

    Categorical scatterplots

    • stripplot()
    • swarmplot() 

     

    Univariate distribution API
    • histplot : 히스토그램
    sns.histplot(x='math score', data=student, ax=ax,
                 binwidth=30, #막대 간격 
                 bins=100, #막대의 개수
                 element='step' # step, poly(다각형 형태)
                 multiple=' ', # 분포 표현 방법: layer, dodge, stack, fill
                )

     

    • kdeplot : Kernel Density Estimate, 면적이 실제 데이터의 비중, histogram의 연속적인 표현
    sns.kdeplot(x='math score', data=student, ax=ax,
                fill=True, #그래프 내부 면적 채우기
                hue='race/ethnicity', 
                hue_order=sorted(student['race/ethnicity'].unique()),
                multiple=" ", # layer(겹치기), stack(쌓기), fill(채우기, 지양함)
                cumulative=True,
                bw_method=0.05, # 분포 더 자세하게 표현
                cut=0
               )

     

    • ecdfplot : 누적 밀도 함수, 누적되는 양을 표현
    sns.ecdfplot(x='math score', data=student, ax=ax,
                 hue='gender',
                 stat=' ', # count, proportion
                 complementary=True # 0에서 시작할지 1에서 시작할지
                )

     

    • rugplot : 선을 사용한 밀도함수, 조밀한 정도를 통해 밀도를 나타냄 (비추)

     

    Bivariate Distribution API (결합확률 분포)
    • histplot과 kdeplot을 사용
    • x,y축에 모두 입력을 넣어주기, 나머지는 Univariate distribution API와 비슷

     

    • joint plot: 2개 특성의 결합확률 분포와 함께 각각의 분포도 살필 수 있는 시각화를 제공
    sns.jointplot(x=' ', y=' ',data= ,
                  hue=' ', # hue랑 kind는 같이 못씀
                  kind=' ', # “scatter” | “kde” | “hist” | “hex” | “reg” | “resid” 
                  fill=True
                 )

     

    relational & Regression API
    • Scatter plot
    • Line plot
      • 자동으로 평균과 표준편차로 오차범위를 시각화해줌
    • Reg plot
      • 회귀선을 추가한 scatter plot
      • 다차원 회귀선은 order 파라미터를 통해 전달 (order=' ')
      • 로그도 표현 가능(logx=True)
    • Pair plot
      • n개의 feature가 있다면 n*n개의 그래프를 만들어줌
      • 데이터셋의 pair-wise 관계를 시각화 (각 Test data 값들 간에 최소한 한번씩을 조합)
      • scatter 기반
    #kind는 전체 서브플롯, diag_kind는 대각 서브플롯을 조정
    #kind : {‘scatter’, ‘kde’, ‘hist’, ‘reg’}
    #diag_kind : {‘auto’, ‘hist’, ‘kde’, None}
    sns.pairplot(data=iris, hue='Species', kind='hist')
    
    #pairwise는 대각선 기준 대칭이라서 안 겹치게 반절만 보려면 corner 사용
    sns.pairplot(data=iris, hue='Species', corner=True)

     

    Matrix plot API
    • Heatmap : 상관관계 시각화에 사용
    mask[np.triu_indices_from(mask)] = True #아래 삼각행렬만 보고싶을 때
    
    sns.heatmap(heart.corr(), ax=ax,
               vmin=-1, vmax=1, #상관계수는 -1~1까지이므로 색의 범위를 맞추기 위해 vmin과 vmax로 범위를 조정
               center=0, # 0을 기준으로 음/양이 중요하므로 center를 지정
                cmap='coolwarm', #테마
                annot=True, fmt='.2f' # d #실제 값에 들어갈 내용을 작성
                linewidth=0.1, square=True, cbar=False, #줄간격,직사각형으로 표현, cbar 유무
                mask=mask
               )

     

     

    정리


    catplot (Categorical)
    • sns.catplot (default: stripplot)
    • 그외 swarmplot(), boxplot(), violinplot(), boxenplot(), pointplot(), barplot(), countplot()
    sns.catplot(x=" ", y=" ", hue=" ", data=student,
                kind='box', #그래프 종류 설정 가능
                col=' ', row=' ' #행과 열의 category를 기반으로 그래프의 개수가 결정됨
               )

     

    displot (Distribution)
    • sns.displot (default: histplot)
    • 그외, kdeplot(), ecdfplot()
    sns.displot(x=" ", hue=" ", data=student,
               col=' ', kind=' ', fill=True,
                col_order=sorted(student['race/ethnicity'].unique())
               )

     

    replot (Relational)
    • sns.replot (default: scatterplot)
    • 그외, lineplot()
    sns.relplot(x=" ", y=' ', hue=" ", data=student,
               col=' ')

     

    lmplot (Regression)
    • sns.lmplot (regplot)
    sns.lmplot(x=" ", y=' ', hue=" ", data=student)

    'CS 공부 > Data Visualization' 카테고리의 다른 글

    Pie Chart ➰  (0) 2023.03.31
    Polar Plot, Radar Plot (극좌표계)  (0) 2023.03.31
    Grid type, 선/면 추가  (0) 2023.03.27
    Matplotlib 시각화 요소 (Text, Color, Facet)  (0) 2023.03.27
    Scatter plot  (0) 2023.03.26
Designed by Tistory.