ML/AI/SW Developer

Visualization-Seaborn Basic

향후.. plot 추가 예정

1. Intro

1.1 seaborn?

  • 통계 정보
  • Matplotlib으로 커스텀 가능
  • 쉬운 문법과 깔끔한 디자인이 특징
  • 아직 1.0 버전이 없음

1.2 설치방법

  • pip insatll seaborn==0.11
  • import seaborn as sns
    • 왜 sns로 줄여쓰는지는…?

1.3 다양한 API

  • Categorical API
  • Distribution API
  • Relational API
  • Regression API
  • Multiples API
  • Theme API

2. Basic

2.1 공통요소

  • Countplot
# 수직 bar graph
# hue => gender로 grouping
# order => group의 순서 정렬
# palette => 색상변경, saturation도 조절 가능
# ax => subplot 위치 지정 가능
sns.countplot(x='column_name1', data=<DataFrame>,
			hue = 'column_name2',
			order=sorted(<DataFrame>.unique()),
			palette = 'Set2',
			ax=axes[0])
# 수평 bar graph
sns.countplot(y='column_name1', data=<DataFrame>, ax=axes[1])

2.2 Categorical API

  • Box Plot
    • 가장 기본적인 plot
# 1
fig, ax = plt.subplots(1,1, figsize=(12, 5))
sns.boxplot(x='math score', data=student, ax=ax)
plt.show()

# 2
fig, ax = plt.subplots(1,1, figsize=(10, 5))
sns.boxplot(x='race/ethnicity', y='math score', data=student, 
            order=sorted(student['race/ethnicity'].unique()),
            ax=ax)
plt.show()

# 3
fig, ax = plt.subplots(1,1, figsize=(10, 5))
sns.boxplot(x='race/ethnicity', y='math score', data=student,
            hue='gender', 
            order=sorted(student['race/ethnicity'].unique()),
            width=0.3,
            linewidth=2,
            fliersize=10,
            ax=ax)

plt.show()
  • Violin Plot
    • box plot으론 편향성을 보기 어려움
#1
fig, ax = plt.subplots(1,1, figsize=(12, 5))
sns.violinplot(x='math score', data=student, ax=ax)
plt.show()

#2
fig, ax = plt.subplots(1,1, figsize=(12, 7))
sns.violinplot(x='race/ethnicity', y='math score', data=student, ax=ax,
               order=sorted(student['race/ethnicity'].unique()),
               hue='gender',
               split=True,
               bw=0.2, cut=0
              )
plt.show()
  • ETC
    • boxenplot
    • swarmplot
    • stripplot

2.3 Distribution

  • histplot
    • 막대 형태
      fig, ax = plt.subplots(figsize=(12, 7))
      sns.histplot(x='math score', data=student, ax=ax,
      #			   element='poly', # step, poly
      #			   multiple='stack', # layer, dodge, stack, fill
      #              binwidth=50, 
      #              bins=100,
                  )
      plt.show()
    
  • kdeplot
    • 밀도 함수: 속을 채워서 그리자
      fig, ax = plt.subplots(figsize=(12, 7))
      sns.kdeplot(x='math score', data=student, ax=ax,
                  fill=True, 
                  hue='race/ethnicity', 
                  hue_order=sorted(student['race/ethnicity'].unique()),
                  multiple="layer", # layer, stack, fill
                  cumulative=True,
                  cut=0
              )
      plt.show()
    
      # 누적 분포
      stat='count', # proportion
    
  • ecdfplot, rugplot
  • 결합확률 분포 표현
# 1
fig, axes = plt.subplots(1,2, figsize=(12, 7))
ax.set_aspect(1)

axes[0].scatter(student['math score'], student['reading score'], alpha=0.2)

sns.histplot(x='math score', y='reading score', 
             data=student, ax=axes[1],
#              color='orange',
             cbar=False,
             bins=(10, 20), 
            )
# 2
fig, ax = plt.subplots(figsize=(7, 7))
ax.set_aspect(1)

sns.kdeplot(x='math score', y='reading score', 
             data=student, ax=ax,
            fill=True,
#             bw_method=0.1
            )

plt.show()

2.4 Relation & Regression

  • Scatter Plot: mat 라이브러리와 동일
  • Line Plot: 자동으로 평균과 표준편차로 오차범위 시각화 해줌
fig, ax = plt.subplots(1, 1, figsize=(12, 7))
sns.lineplot(data=flights, x="year", y="passengers", ax=ax)
plt.show()
  • Regplot: 회귀선 표현
fig, ax = plt.subplots(figsize=(7, 7))
sns.regplot(x='math score', y='reading score', data=student,
            x_estimator=np.mean, x_bins=20
           )
plt.show()

2.5 Matrix

  • Heatmap: 대표적으로 상관관계 시각화에 많이 사용