seaborn을 import하고 data loading하는 code
import seaborn as sns
titanic = sns.load_dataset('titanic') # 타이타닉 데이터 불러오기
이번 포스팅에서 살펴볼 시각화 그래프들
barplot()
수치형 데이터
의 평균 : 막대 높이, 신뢰구간
: 오차 막대 로 표현한다.barplot()
은 원본 데이터 평균이 아니라 샘플링한 데이터 평균을 구하는 것!!!기본적으로 x
파라미터에 범주형 데이터
를, y
파라미터에 수치형 데이터를 전달한다.
data
파라미터는 전체 데이터셋을 전달한다.
이제 barplot()
을 활용하여 타이타닉 탑승자 등급별 운임을 barplot()
으로 그려보겠다.
범주형 데이터
인 class(등급)
피처를 x
파라미터에, 수치형 데이터
인 fare(운임)
피처를 y
파라미터에 전달한다.
Code
sns.barplot(x='class', y='fare', data=titanic)
Result
막대 높이는 등급별 평균 운임을 뜻한다.
막대 상단의 검은색 세로줄이 오차 막대(신뢰구간
)이다.
등급이 높을수록 평균 운임이 비싸고 신뢰구간이 넓어진다.
pointplot()
범주형 데이터
에 따른 수치형 데이터
의 평균
과 신뢰구간
을 나타낸다.타이타닉 탑승자 등급별 운임을 pointplot()
으로 그려보자.
Code
sns.pointplot(x='class', y='fare', data=titanic)
Result
그래프를 직접 그려보니, pointplot과 barplot은 동일한 정보를 제공한다.
이 두가지의 그래프를 언제 어떻게 사용하는게 좋을까?
한 화면에 여러 그래프를 그릴 때 사용하는게 좋다.
포인트풀롯은 점과 선으로 표현하기 때문에 여러 그래프를 그려도 서로 잘 보이고, 비교하기도 쉽다.
계절에 따른 시간대별 자전거 대여 수량을 나타내는 그래프를 보자,
그래프를 보았을 때, 막대 그래프로 그린다면 봄, 여름, 가을, 겨울 계절들의 차이를 알기 어렵다.
하지만 포인트 플롯으로 그린다면 계절별 차이가 한 눈에 들어온다.
한 화면에 여러 그래프를 그려 비교할 때는 포인트플롯을 사용하는게 좋다!!!
boxplot()
최솟값
제 1사분위 수(Q1)
제 2사분위 수(Q2)
제 3사분위 수(Q3)
최댓값
Q3 - Q1
Q3 + (1.5 * IQR)
Q1 + (1.5 * IQR)
최댓값
보다 큰 값과 최솟값
보다 작은 값다음은 박스플롯의 구성요소 그림이다.
그림 출처 https://goldenrabbit.co.kr/2022/04/18/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%C2%B7%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0-%ED%83%90%EC%83%89%EC%A0%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EC%8B%9C%EA%B0%81/
박스 플롯은 boxplot()
으로 그릴 수 있다.
그럼 이제 타이타닉 탑승자 등급별 나이를 박스플롯으로 그려보겠다.
boxplot()
의 x
, y
파라미터에 각각 범주형 데이터(class)
와 수치형 데이터(age)
를 전달하면 된다.
Code
sns.boxplot(x='class', y='age', data=titanic)
Result
violinplot()
박스플롯과 커널밀도추정 함수를 합쳐 놓은 그래프라고 볼 수 있다.
박스플롯이 제공하는 정보를 모두 포함하며, 모양은 커널밀도추정 함수 그래프 형태이다.
바이올린플롯은 violinplot()
으로 그릴 수 있다.
앞의 박스플롯과 비교해보기 위해 등급(class)
별 나이(age)
를 그려보겠다.
Code
sns.violinplot(x='class', y='age', data=titanic)
Result
boxplot 그래프와 비교해보았을 때, 각 범주별로 5가지 요약 수치를 한눈에 보고싶으면 boxplot이 좋을 것 같다.
수치형 데이터의 전체적인 분포 양상을 알고 싶다면 violinplot이 좋을 것 같다.
다음으로 성별
에 따른 등급별 나이 분포
를 살펴보자.
hue='sex'
를 파라미터를 추가로 전달하면 된다.
더 나아가서, split=True
를 전달하면 hue
에 전달한 피처를 반으로 나누어 보여준다.
Code
sns.violinplot(x='class', y='age', hue='sex', data=titanic, split=True)
Result
countplot()
countplot()
으로 그릴 수 있음.x
파라미터에 범주형 데이터
를 전달하면 된다.다음은 타이타닉 탑승자의 등급별 인원수를 countplot()
으로 그려보자.
Code
sns.countplot(x='class', data=titanic)
Result
countplot을 사용하여 범주형 데이터의 개수를 파악할 수 있다!!!
Tip!!!
x
파라미터를y
로 바꾸면 그래프 방향을 바꿀 수 있다.sns.countplot(y='class', data=titanic)
- 이는 범주형 데이터 개수가 많이 그래프가 옆으로 너무 넓어져 보기 불편할 때 유용하다.
두 그래프는 비슷해보이지만 다르다.
barplot()
: 범주형 데이터별 수치형 데이터의 평균을 구해주기 때문에 피처를 두 개 받음.
countplot()
: 피처를 범주형 데이터 하나만 받는다.
sns.barplot(x='class', y='fare', data=titanic) # 막대 그래프
sns.countplot(y='class', data=titanic) # 카운트플롯
Tip!!!
barplot()
으로는 평균이 아닌 중앙값, 최댓값, 최솟값을 구할 수도 있다.sns.barplot(x='class', y='fare', data=titanic, estimator=np.median) # 중앙값
sns.barplot(x='class', y='fare', data=titanic, estimator=np.max) # 최댓값
sns.barplot(x='class', y='fare', data=titanic, estimator=np.min) # 최솟값
pie
seaborn
에서 지원하지 않기 때문에 matplotlib
을 사용해서 그려야 한다.pie()
함수를 사용하여 그리면 된다.x
파라미터에는 비율
, labels
파라미터에는 범주형 데이터 레이블명을 전달하면 된다.autopct
파라미터를 통해 비율을 숫자로 나타낼 수 잇다.Code
import matplotlib.pyplot as plt
x = [10, 60, 30] # 범주형 데이터별 파이 그래프의 부채꼴 크기(비율) labels = ['A', 'B', 'C'] # 범주형 데이터 레이블
plt.pie(x=x, labels=labels, autopct='%.1f%%')
Result
Wrap Up
이번 포스팅은 범주형 데이터를 시각화하는 여러 방식에 대해서 알아보았다.
사실 데이터 시각화 방식에는 다양한 방법이 있는 걸로 알고 있었지만, 이렇게 기본적으로 많이 쓰이는 방식 위주로 공부한건 처음이라서 기본기부터 다지는 느낌이라 괜찮았다.
다음 포스팅에서는 데이터 관계 시각화에 대해 글을 작성해 보겠다.