seaborn

이서영·2023년 8월 14일
0

시각화

목록 보기
2/3

1. seaborn

  • matplotblib을 쉽게 사용하기 위해 개발된 라이브러리
  • 간결함
  • 정교하게 그래프 크기를 조절하거나 각 축 범례 값을 조절 시에는 matplotlib와 함께 사용
  • seaborn의 데이터 형식은 DataFrame
  • seaborn은 matplotlib 기반이다. 그러나 seaborn 자체의 figure를 만들어 plotting하는 것이 별개로 조절하는데 이것을 확인하는 것이 level이다.
    • figure-level : seaborn 자체의 figure를 만들어 plotting
    • axes-level : matplotlib를 기반. matplotlib 메소드를 섞어서 사용 가능
import numpy as np                 # Numpy
import pandas as pd                # pandas
import matplotlib.pyplot as plt    # matplotlib
import seaborn as sns              # Seaborn

2. 가능한 기본 설정(쓸모 있을수도)

2-1. 기본 환경

### 한글 사용
from matplotlib import rcParams # 한글 환경 설정을 위한 rcParams
def setting_styles_basic():
  rcParams['font.family'] = 'Malgun Gothic' # Windows
  # rcParams['font.family'] = 'AppleGothic' # Mac
  rcParams['axes.unicode_minus'] = False    # 한글 폰트 사용 시,
                                            # 마이너스 기호가 깨지는 현상 방지
setting_styles_basic()

### 경고창 무시
import warnings
warnings.filterwarnings('ignore')

2-2. 설정

i) 축 커스터마이징

### 축 커스터마이징
custom_par = {"axes.spines.right": False, "axes.spines.top": False}
  • spines는 축을 커스터마이징하는데 사용되는 객체
    • 1) 축 없애기 -> axes.spines['원하는 위치(bottom)'].set_visible(False)
    • 2) 축 위치 변경 -> axes.spines['원하는 위치'].set_position('이동할 위치')
    • 3) 두께 변경 -> axes.spines['원하는 위치'].set_linewidth(숫자)
    • 4) 투명도 변경 -> axes.spines['원하는 위치'].set_alhpa(숫자)
    • 5) 색상 변경 -> axes.spines['원하는 위치'].set_color('색상')
  • spines별개로 tick_params도 지정가능.

ii) 전체 설정

sns.set_theme(context='notebook',   # 매체: paper, talk, poster
              style='darkgrid',     # 스타일 설정
              palette='deep',       # 그래프 색
              font='Malgun Gothic', # 글꼴 종류 
              font_scale=1,         # 글꼴 크기
              rc=custom_params)     # 그래프 세부 사항
  • set_theme를 사용해 전체 그래프를 설정 가능하다

iii) 그래프 단위 설정

import matplotlib.pyplot as plt
import seaborn as sns

### 축 범위 설정
sns.countplot().set(xlim =(1,10),ylim(0,20)) #x축, y축 범위 설정

### 축 라벨 설정
ht = sns.heatmap()             # heatmap 생성
ht.set(xlabel="",ylabel="")    # 라벨 설정

### 축 위치 변경
ht.xaxis.tick_top()           # x축 아래에서 위로 옮기기
ht.yaxis.tick_left            # y축 왼쪽에서 오른쪽으로 옮기기

### 그래프 크기 조절
ht.set(rc='figure.figsize':(10,10))

3. plot

3-0. figure-level

3-1. Countplot

  • 범주형 데이터의 빈도를 히스토그램을 보여주는 plot
  • 종류별 count를 보여준다
###기본 코드
sns.countplot(dataframe_name['column_name'])
sns.countplot(x=dataframe_name['column_name'])
sns.countplot(x='column_name', data=dataframe_name)       

#예시
sns.countplot(df_titanic['class'])

###옵션
sns.countplot(x='class', data=df_titanic,
              facecolor=(0, 0, 0, 0),       # 가운데 색칠 x
              palette ='YlGnBu'             # 막대별 색상
              hue = '값'                    # 구분 기준 추가 -> 막대 추가
              alpha = ''                   # 그래프 투명도 지정
             order=df_titanic['class'].value_counts().index)  # 내림차순
              linewidth=5,                 # 선 두께
              edgecolor=sns.color_palette('dark', 3))  # 테두리 선의 색상
              
### 요약값 표시
ax = sns.countplot(dataframe_name['column_name'])
ax.bar_label(ax.containers[0])

3-2 barplot

  • 데이터에 대한 값의 크기를 막대로 표시하는 plot
  • 히스토그램과는 다르다
  • 수치,범주형 상관없이 데이터에 대한 수치값 표시
###기본
sns.barplot(data=dataframe_name, x="x값", y="y값")


###옵션
sns.barplot(data=dataframe_name, x="x값", y="y값"
                                 hue =''  #집단 묶기 -> hue별로 막대 생성
                                 ci="sd"  #표준 편차
                                 palette =' ' # 구분 색상
                                 alpha = '' # 투명도
                                 estimator # 평균
                                 )  

3-3. strip plot(점 그래프)

  • 데이터의 위치를 dot로 표현
  • 데이터의 실제 위치 파악
###기본
sns.stripplot(data=dataframe_name, x='column_name',y="column_name)
sns.stripplot(x=dataframe_name_['column_name'])
sns.catplot(data=(dataframe_name), x='column_name', kind='strip') 

###데이터가 겹쳐질 경우
sns.swarmplot(data=dataframe_name, x='column_name')

###옵션
sns.stripplot(x=dataframe['column'],y="column_name",
              jitter=0.2,    # 수평으로 퍼지는 정도,
              color='red', # 마커 색상
              size=7, # 마커 사이즈
              marker='*' # 마커 모양
              hue =''  # 문자열 목록
              size ='' # 크기
              palette ='' 
              )

3-4. histogram (히스토그램)

  • 데이터를 몇 개의 구간으로 나눈 뒤에 구간에 포함된 데이터의 개수를 표현
  • 많은 데이터의 분포를 파악
### 기본
sns.histplot(data=dataframe_name, x='column_name'
                                  hue ='column_name' #구분 col이면 캔버스마다
                                  bins ='str/number' # 구간의 구분
                                  discrete ='bool'   # 등급이 막대 중앙
                                  shrink =           # 사이 공간
                                  multiple ="",  #stuck면 누적 dodge면 다중
                                  element ='poly', #그래프를 분포다각형으로
                                  log_scale =True, # x축값 로그 스케일 
                                  
                                    )
### 특정 조건
# pandas 사용해 데이터를 조건별로 선택 가능
sns.histplot(
             df_penguins[dataframe_name['coloum_name1'] == '조건1']
['column_name2'])   #column_name1이 조건 1인 column_name2 값에 대한
                    #histogram
#히스토그램으로 히트맵 (figure-level) displot사용 (두 변수가 수치형일때)
### 2차원 - 기본
sns.displot(x='column_name1, y='column_name1', 
            data=dataframe_name, colorbar= True)
### colorbar는 컬러바 유무            

### 3차원           
sns.displot(x='column_name1', y='column_name1', hue='column_name3', 
            data=dataframe_name)

3-5. boxplot

  • 데이터의 5가지 통계량(최솟값,1사분위,2사분위,3사분위,최댓값)을 표현
### 기본
sns.boxplot(data=dataframe_name, x='column_name1',y='column_name2')

###옵션
sns.boxplot(data=dataframe_name, x='column_name' y='colnum_name2',
                                 orient ="v"  # 세로출력
                                 y = 'column_name2' #  집단별
                                 hue =''     # 구분
                                 palette ='' # 팔레트
                                 
                                 )

3-6. violinplot

  • 데이터의 분포를 확률밀도 함수 형태로 표현
  • boxplot와 커널밀도추정으로 구한 확률 밀도함수를 표현
### 기본
sns.violinplot(data=dataframe_name, x='column_name1',y='column_name2')

### 옵션
ax = sns.violinplot(x='column_name1',y='column_name2',
                    width=0.5, ## 바이올린 폭
                    linewidth=3, ## 라인 두께
                    color='y', ## 색상
                    saturation=0.7 ## 채도
                    order=[]       #[] 별 바이올린 플롯 생성
                   )

3-7. 커널밀도 추정으로 구한 확률 밀도 함수(kde)

  • 분포를 확인할 때 히스토그램을 사용하면 구간별로 결과물이 달라지기에 사용
### 기본
sns.kdeplot(data=dataframe_name, x='column_name', y='column_name2')
#y값은 설정은 데이터가 2개일 때
sns.kdeplot(data=dataframe_name, x='column_name',bw_adjust=.25)
# bw 수가 낮을수록 굴록이 많아짐

###연속적 변수가 커지지 않는 경우
sns.kdeplot(data=dataframe_name, x='column_name', hue kind='kde', cut=0) 범위 제한

3-8. 경험적 누적분포함수(ecdf)

  • 경험적 분포 함수 또는 표본 분포 함수는 반복된 시행을 통해 확률 변수가 일정 값을 넘지 않을 확률을 유추하는 함수이다
### 기본
sns.ecdfplot(data=dataframe_name, x='column_name')


### 옵션 
sns.ecdfplot(data=dataframe_name, x='column_name',
                                  hue ='column_name2', # 구분
                                  complementary=True  # 상보누적분포함수
                                  )

3-9. 산점도 그래프

sns.scatterplot(x='column_name1', y='column_name2', data=dataframe_name)


# hue ='column3' : 3차원
# style: 마커 모양 자동 지정
# markers: 마커 모양 수동 지정
# size: 마커 크기 지정
# sizes: 마커 크기의 범위 지정
# legend='full': 모든 데이터포인트 보이게 하기
# hue_norm: 색상 범위 지정

3-10. jointplot(결함/주변 분포)

  • 산점도를 기본으로 표시하고 x-y축에 각 변수에 대한 히스토그램을 동시에 보여준다.

  • x, y 인자에 원하는 열 이름을 지정하고 data 인잣값으로 데이터프레임을 지정

  • 두 변수의 관계와 데이터가 분산되어 있는 정도를 한눈에 파악하기 쉽다.

j_plot = sns.jointplot(x='column_name1',y='column_name2'
                       data=dataframe_name)
### 기본적으로 column_name1과 column_name2의 산점도를 보여주고
### 그 후 바깥쪽 우측에 column_name2의 히스토그램 위쪽엔 column_name1의 히스트그램 

### kind = hexbin을 넣으면 육각형의 산점도
### kind = reg는 회귀선 추가
### kind = kde는 커널 밀집 그래프

line graph

3-11. heatmap

3-12. 산점도 행렬

3-13. 회귀 그래프

profile
전공자 학생

0개의 댓글