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
boxplot()
분포 확인 - 2
막대그래프나 곡선형 그래프로 시각화 하는 경우는 우리에게 흔하게 인식되어 낯설다는 느낌이 없지만, 박스형 그래프의 경우에는 유독 낯설게 느껴지는 그래프 중 하나이다. x축에 범주형 변수, y축에 수치형 변수를 지정해 각 범주 별 수치를 나타내는 그래프이다.
plt.figure(figsize=(10,10))
sns.boxplot(y='가해운전자연령', data=df);
boxplot()으로 그린 그래프는 데이터의 분포와 이상치를 동시에 보여주면서 서로 다른 데이터군을 쉽게 비교할 수 있다. 로우데이터를 그대로 나타내는 다른 그래프들과 다르게, 해당 집단의 데이터를 대표적인 다섯개의 수로 나눠 표현한다. 최상단과 최하단의 실선은 최대값(Maximum)과 최소값(Minimum)을 나타낸다. 박스를 그리는 기준은 Q1(제1사분위수)과 Q3(제3사분위수)를 기준으로 상자를 그리고, 내부에 Q2(제2사분위수,중앙값)를 그려준다. 전체 데이터를 작은 값에서 큰 값 순으로 나열했을 때, 전체 데이터의 25% 지점은 Q1, 75% 지점은 Q3가 된다. 이 범위를 벗어난 극단값이나 이상치의 경우, 그래프 외각으로 점을 찍어 표현한다.
plt.figure(figsize=(15,10))
plt.xticks(rotation=90)
sns.boxplot(x='가해운전자차종', y='가해운전자연령', data=df);
# 가해운정자차종 중 승용, 이륜, 화물에 해당하는 데이터만 추출
col = ['승용','이륜','화물']
g_data = df[df['가해운전자차종'].isin(col)]
plt.figure(figsize=(15,10))
plt.xticks(rotation=90)
sns.boxplot(x='가해운전자차종', y='가해운전자연령', hue='피해운전자상해정도', data=g_data)
# 범례 추가 및 위치 지정
plt.legend(loc=2, bbox_to_anchor=(1,1));
이상치가 있는지 눈으로 직접 보고 판단할 때 박스플롯을 활용하면 쉽게 확인할 수 있다. 박스플롯은 위에서 언급한 다섯숫자요약이나, 이상치를 나타내는 점 등 많은 정보를 담고 있다는 장점이 있지만 그만큼 기본적인 이해도가 없는 사람이 접했을 경우 해당 그래프로 말하고자하는 바를 명확하게 전달하기 힘들다는 단점이 있다. 데이터를 시각화 할 때는 어떤 의도로 시각화하였는지만큼, 누구에게 보여줄 시각화 자료인지도 중요한 이슈인 것 같다.
'빅데이터분석👨💻' 카테고리의 다른 글
[Python] 다변수의 관계 확인 (1) - joinplot() (1) | 2024.01.10 |
---|---|
[Python] 분포 확인 그래프 (3) - violinplot() (1) | 2024.01.02 |
[Python] 분포 확인 그래프 (1) - displot() (1) | 2023.12.28 |
[Python] 수치형 변수의 시각화 - Barplot() (1) | 2023.12.27 |
[Python] 범주형 변수의 빈도 시각화 - Countplot() (0) | 2023.12.26 |