도찐개찐
[데이터분석] 08. 박스플롯 본문
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
박스플롯
- box-and-whisker plot (상자수염 그래프)
- 데이터의 대략적인 분포와 개별적인 이상치들을 동시에 보여줄 수 있으며
- 서로 다른 데이터 뭉치를 쉽게 비교할 수 있도록 도와주는 시각화 기법
- 통계학자 존 튜키(John Tukey)가 1977년 저서 "탐색적 데이터 분석(Exploratory Data Analysis)"에서 처음 제시
- 범위 막대에서는 수염의 양 끝이 최대값과 최소값을 나타내고,
- 상자는 사분위수범위를 나타내며, 상자 안에 중앙값을 표현하는 방식으로 "5가지 요약 수치" 를 표현
- boxplot(값, 옵션)
kings = [73,62,45,53,38,16,51,28,37,30,56,30,33,56,
66,54,40,33,59,36,82,48,44,22,32,67,52]
# pandas 객체로 수치요약
kings = pd.DataFrame({'kings':kings})
kings.describe()
kings | |
---|---|
count | 27.000000 |
mean | 46.037037 |
std | 16.173296 |
min | 16.000000 |
25% | 33.000000 |
50% | 45.000000 |
75% | 56.000000 |
max | 82.000000 |
# 박스 플롯 시각화
# boxplot(대상)
plt.boxplot(kings)
plt.show()
# 박스 플롯 시각화
# boxplot(대상, 옵션)
# 박스 왼쪽 라인 1분위, 빨간중 중앙값, 오른쪽 라인 4분위
plt.boxplot(kings, vert=False)
# plt.show()
{'whiskers': [<matplotlib.lines.Line2D at 0x7fdf22c7d2e0>,
<matplotlib.lines.Line2D at 0x7fdf22c7d5e0>],
'caps': [<matplotlib.lines.Line2D at 0x7fdf22c7d970>,
<matplotlib.lines.Line2D at 0x7fdf22c7dfd0>],
'boxes': [<matplotlib.lines.Line2D at 0x7fdf22c7d520>],
'medians': [<matplotlib.lines.Line2D at 0x7fdf22c7d100>],
'fliers': [<matplotlib.lines.Line2D at 0x7fdf22cab9d0>],
'means': []}
박스플롯의 여러 속성 출력
- median
- whisker
- flier
# 박스 플롯 시각화
# boxplot(대상, 옵션)
# 박스 왼쪽 라인 1분위, 빨간중 중앙값, 오른쪽 라인 4분위
box = plt.boxplot(kings)
medians = [v.get_ydata() for v in box['medians']]
print(medians[0][0]) # 중앙값
whiskers = [v.get_ydata() for v in box['whiskers']]
print(whiskers[0][1], whiskers[0][0]) # 최소값, 1사분위값
print(whiskers[1][1], whiskers[1][0]) # 최대값, 3사분위값
fliers = [v.get_ydata() for v in box['fliers']]
print(fliers[0]) # 이상치 현재 데이터 값없음
45.0
16.0 33.0
82.0 56.0
[]
seaborn 으로 상자수염 그래프 시각화
- boxplot(x, data)
sns.boxplot(x='kings', data=kings)
plt.show()
iris 데이터 시각화
iris = sns.load_dataset('iris')
iris.info()
# plt.boxplot(iris.sepal_length)
# plt.boxplot(iris.sepal_width)
# plt.boxplot(iris.petal_length)
# plt.boxplot(iris.petal_width)
plt.boxplot(iris[['sepal_length', 'sepal_width']])
plt.show()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal_length 150 non-null float64
1 sepal_width 150 non-null float64
2 petal_length 150 non-null float64
3 petal_width 150 non-null float64
4 species 150 non-null object
dtypes: float64(4), object(1)
memory usage: 6.0+ KB
sns.boxplot(iris)
plt.show()
titanic 데이터 시각화
titanic = sns.load_dataset('titanic')
# 결측치 처리전
sns.boxplot(data=titanic[['age', 'fare']])
<AxesSubplot:>
# 결측치 처리전
plt.boxplot(titanic[['age', 'fare']])
plt.show()
# 나이 결측치 확인 값이 null 인경우 출력 안됨 현상 0으로 변경
titanic.age = titanic.age.fillna(0)
# 결측치 처리 후
plt.boxplot(titanic[['age', 'fare']])
plt.show()
# 결측치 처리 후
sns.boxplot(data=titanic[['age', 'fare']])
plt.show()
tips 데이터 시각화
tips = sns.load_dataset('tips')
plt.boxplot(tips[['total_bill', 'tip']])
plt.show()
728x90
'PYTHON > 데이터분석' 카테고리의 다른 글
[데이터시각화] 10. 다중그래프 (0) | 2023.01.02 |
---|---|
[데이터시각화] 09. 교차표 (0) | 2023.01.02 |
[데이터시각화] 07. 산점도 (0) | 2023.01.02 |
[데이터시각화] 06. 선그래프 (0) | 2023.01.02 |
[데이터시각화] 04. 막대그래프 (0) | 2023.01.02 |
Comments