-
SeabornCS 공부/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