본문 바로가기

Upstage AI Lab 2기

Upstage AI Lab 2기 [Day014] (1) Seaborn_기초

Upstage AI Lab 2기

2023년 12월 29일 (금) Day_014

 

Day_014 실시간 강의 (오전) :

(패스트캠퍼스 김용담 강사님)

 

https://seaborn.pydata.org/examples/

시각화를 편하게 쓸 수 있도록 만들어진 라이브러리

더보기

특징적인 플롯

jointplot - density와 scatterplot이 합쳐진 형태

pairplot - pairwise 교차해서 graph

clustermap - 계층정보 같이 표시

 

업데이트 느리고 만들어진지 얼마 안 된 라이브러리

version up 되면 꼭 체크해야 될 것들이 있는 라이브러리임

(matplotlib은 자유도가 높은 대신 난이도도 높음 -> 고수는 ppt처럼 쓸 수도 있음)

 

주로 pairwise보다는 개별 feature 단위로 볼 일이 많음.

 

0) getting started with seaborn

import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

 

1) seaborn의 data load

data = sns.load_dataset("penguins")
data = data.dropna()

 

2)  seaborn의 plots

사용방법이 통일성 있음

plot 함수 기본 형태 : sns._______plot(data=, x=, y=, hue=, palette=)

 

더보기

연속형 변수 (Continuous variable) vs. discrete variable

hue= discrete variable

palette (예. 'viridis', 'summer', 'winter', 'Blues', 'Set2')

https://seaborn.pydata.org/tutorial/color_palettes.html

 

 

(1) histplot : 연속형 변수의 구간별 분포

sns.histplot(data=, x=, hue=, palette= , bins=)

y는 count, 입력하지 않아도 됨.

bins = 구간의 갯수 (일반적으로 10~30 사용)

sns.histplot(data=data,
             x= 'body_mass_g',
             hue = 'species',
             palette="Set2",
             multiple='stack',
             bins=10
             )

 

(2) displot : 여러 개의 distribution을 subplot으로 출력

kind = "hist"(히스토그램) / "kde"(밀도) / "ecdf"

col = column-wise 기준

row = row-wise 기준

sns.displot(
    data=data,
    x="flipper_length_mm",
    kind='hist',
    col ='species',
    row='island',
    hue='sex',
    multiple='stack',
    )

 

 

(3) barplot : discrete 변수를 기준으로 한 수치

default aggfunc 은 mean으로 설정되어 있어서 통계적 유의성을 보여주는 errorbar가 같이 표시됨.

x, y를 바꿔서 가로/세로를 바꿀 수 있음.

-> 기본적으로 discrete 변수를 기준으로 값을 plot하기 때문.

sns.barplot(data=data, x='species', y='body_mass_g',
            hue='sex', palette='Set2',
            errorbar=None)

 

 

 

sns.barplot(data=data, y='species', x='body_mass_g',
            hue='sex', palette='Set2',
            errorbar=None)

 

 

(4) countplot : discrete 변수에 따른 분포

sns.countplot(data=data, x='species')

 

(5) boxplot

box : first quartile(25%) ~ third quartile(75%) => cdf 상 50%의 데이터가 분포한 범위 표현

bar : median (mean은 outlier 의 영향을 많이 받음.)

lower / upper bound : Q25 - IQR*1.5 / Q75 + IQR*1.5    min / max 아님!!

(IQR = Inter Quartile Range)

note. outlier 정의는 방법론마다 다름. boxplot은 lower / upper bound를 벗어나는 data를 아웃라이어로 봄.

주의. feature 1개를 기준으로 outlier를 정의하는 것은 naive한 접근법

sns.boxplot(data=data, x='species', y='bill_depth_mm')

 

(6) violinplot : boxplot + min/max

sns.violinplot(data=data, x='species', y='body_mass_g')

 

(7) lineplot : 경향성

x축 : 시간, index 등

x축, y축 모두 수치형 데이터

default로 confidential interval 같이 표현됨 (errorbar=None 으로 표시되지 않게 할 수 있)

sns.lineplot(data=data, x='body_mass_g', y='flipper_length_mm')

note : sns.lineplot(x= , y= )

꼭 input으로 dataframe이 필요한 것은 아님.

sequential data인 개별 data를 x, y로 넣어줄 수 있으며, 이 때 x, y의 크기는 같아야 함.

 

(8) pointplot

point = mean

mean의 오차범위와 경향성을 표시

sns.pointplot(data=data, x='species', y='flipper_length_mm')

 

(9) scatterplot

sns.scatterplot(data=data, x='bill_depth_mm', y='bill_length_mm', hue='species')

 

(10) pairplot

scatterplot은 한 번에 feature 두 개씩 밖에 못 보는 점을 보완

모든 numeric data에 대해 plot

(보통 6개 feature 정도 까지만 봄)

sns.pairplot(data=data, hue='species')

 

sns.pairplot(data=data, hue='species', corner=True)

 

 

 

(11) heatmap

corr()와 함께 사용

(heatmap만 내부 구현체가 달라서 palette= 대신 cmap= 사용)

import pandas as pd
data.corr()
sns.heatmap(data.corr(), annot=True, fmt='.3f', cmap='Blues')

 

Q & A

Q : 정규화는 안 하나요?

A : 원본 데이터의 스케일이 달라져서 의미가 없음. EDA에서는 scaling 잘 안함.

 

Data Science를 위해 공부할 라이브러리 : seaborn, matplotlib, dash, plotly