seaborn은 matplotlib로 바로 그린 그래프보다 가독성이 좋고, 폭 넓은 커스터마이징이 가능해서 애용하는 시각화 라이브러리다. set_theme()를 통해 배경, 폰트와 같은 기본 설정을 할 수 있고, set_palette()를 통해 그래프 컬러 조합을 선택할 수 있다.
seaborn palette 예시
# 시각화 환경 세팅
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style='whitegrid', font_scale=1.5)
sns.set_palette('Set2', n_colors=10)
plt.rc('font', family='malgun gothic')
plt.rc('axes', unicode_minus=False)
df = pd.read_pickle('data/03_seoul_accident_full.pkl')
df.head()
사고번호 사고년도 사고월 사고일 사고시각 사고요일 시군구_대범주 시군구_소범주 사고내용 사망자수 ... 피해운전자차종 피해운전자남성여부 피해운전자연령 피해운전자상해정도 주말여부 대형사고여부 고속국도사고여부 음주사고여부 무면허사고여부 뺑소니사고여부
0 A2019010100100001 2019 1 1 0.000000 1 강서구 강서구 방화동 경상사고 0 ... 보행자 True 40 경상 False 0.0 0.0 0.0 0.0 0.0
1 A2019010100100002 2019 1 1 0.000000 1 구로구 구로구 고척동 경상사고 0 ... 승용 True 71 경상 False 0.0 0.0 0.0 0.0 0.0
2 A2019010100100003 2019 1 1 0.000000 1 서초구 서초구 서초동 경상사고 0 ... 화물 True 51 경상 False 0.0 0.0 0.0 0.0 0.0
3 A2019010100100019 2019 1 1 0.041667 1 중구 중구 회현동2가 경상사고 0 ... 승용 True 62 경상 False 0.0 0.0 0.0 0.0 0.0
4 A2019010100100020 2019 1 1 0.041667 1 성동구 성동구 행당동 경상사고 0 ... 보행자 True 32 경상 False 0.0 0.0 0.0 0.0 0.0
displot()
분포 확인 - 1
분포를 확인하는 그래프는 여러가지 종류가 있다. 그 중 첫번째는 displot()으로, kind 값을 통해 다양한 형태로 표현 가능한 그래프인 것이 특징이다. kind='hist'의 경우 bar 형식의 그래프이며, 가장 많이 사용하는 형태이다. bins 값에 따라 분포 표현 빈도를 조정할 수 있다.
간혹 아주 적은 수치가 집계되면 그래프가 너무 낮게 그려져 없는 것처럼 보이는데, 이런 상황에서 생길 착오를 방지하고자 rug 값을 True로 주는 것을 권장한다. rug는 데이터가 한 건이라도 있다면 얇은 실선을 그려주고, 한 건도 없으면 실선을 그리지 않아서 데이터의 유무를 파악하는데 도움을 준다.
sns.displot(x='피해운전자연령', kind='hist', rug=True, bins=50, height=7, data=df);
kind='kde'의 경우 전체적인 분포 흐름을 보는 것이 목적일 때 사용한다. 일반적인 상황에서는 kind='kde'로 먼저 그래프를 그려 전체적인 분포 흐름을 참고한 뒤, kind='hist'에서 bins 값을 조정해 'kde'그래프와 유사한 흐름을 띄는 'hist'그래프를 그리는 것을 목적으로 사용한다.
sns.displot(x='피해운전자연령', kind='kde', rug=True, height=7, data=df);
kind='ecdf' 그래프의 경우, 계단식 그래프의 형태를 띤다. 이 또한 'kde' 그래프와 동일하게 전체적인 분포 흐름을 보기 위해 사용하며, 계단의 높낮이가 일정한 양상을 띄는 경우, 비교적 고르게 분포해있다고 볼 수 있다. 분포도에 차이가 심할수록 계단의 높낮이가 커진다. 하지만 가시성이 좋지 않아 자주 사용하지 않는 형식의 그래프다.
sns.displot(x='피해운전자연령', kind='ecdf', height=7, data=df);
hue 값에 세부 범주형 변수를 선언하면 세부 범주 별 그래프를 비교해서 그려준다.
sns.displot(x='피해운전자연령', hue='가해운전자남성여부', kind='kde', rug=True, height=7, data=df);
'빅데이터분석👨💻' 카테고리의 다른 글
[Python] 분포 확인 그래프 (3) - violinplot() (1) | 2024.01.02 |
---|---|
[Python] 분포 확인 그래프 (2) - boxplot() (2) | 2024.01.02 |
[Python] 수치형 변수의 시각화 - Barplot() (1) | 2023.12.27 |
[Python] 범주형 변수의 빈도 시각화 - Countplot() (0) | 2023.12.26 |
[Python] 빅데이터분석 시각화 - 그래프 그리기 (Matplotlib 활용) (2) | 2023.12.21 |