Seaborn boxplot with 'tips' dataset
seaborn 라이브러리에서 제공하는 "tips" 데이타셋으로 five-number summary에 대해서 알아보자. 다음과 같이 데이터를 로딩한다.
import seaborn as sns
tips = sns.load_dataset("tips")
tips
위의 표에서 보듯이 총 7개의 컬럼이 있다. 이중 'total_bill' 컬럼 데이터에 대한 boxplot을 그려 보자. 참고로 x축의 tick의 개수는 'set_major_locator' 매서드와 matplotlib의 ticker로 조절할 수 있다.
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
ax = sns.boxplot(x=tips["total_bill"], color='orange')
ax.set_title("boxplot for total_bill")
ax.axes.set_title("boxplot for total_bill",fontsize=20)
ax.set_xlabel("total_bill",fontsize=20)
ax.tick_params(labelsize=20)
ax.xaxis.set_major_locator(ticker.MultipleLocator(10))
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
plt.show()
five-number summary
위의 그림에서 파란색으로 쓴 다섯개의 수를 five-number summary라고 한다. 이들은 데이터의 분포의 특징짓는 넘버가 된다.
- Q2는 중간값이다. 전체 데이터의 최소값과 최대값의 평균이다.
- Q1은 lower quartile으로 전체 데이터의 하위 25% 값이다. 이것은 전체 데이터의 최소값과 Q2의 중간값이다.
- Q3은 upper quartile으로 전체 데이터의 상위 25% 값이다. 이것은 전체 데이터의 최대값과 Q2의 중간값이다.
나머지 두 개의 값, lower and upper fence를 찾기 위해서는 interquartile range (줄여서 IQR)를 계산해야 한다. 이것은 간단하게 Q3-Q1이 된다.
- Lower fence = Q1 - 1.5* IQR
- upper fence = Q3 + 1.5* IQR
이 fence의 범위를 벗어난 데이터의 값들은 outlier가 되며 boxplot에서는 점으로 표시된다. 이 outlier들은 분포에서 멀리 벗어난 값들로 통계적으로 의미 있는 값이 아닌 에러나 예외적인 값으로 간주할 수 있다.
이 다섯개의 값들을 numpy와 pandas 라이브러리를 이용해 직접 구해 볼 수 있다.
a. Numpy
Q1, Q2, Q3 = np.percentile(tips["total_bill"], [25, 50, 75])
print('Q1: %3.3f'%(Q1))
print('Q2: %3.3f'%(Q2))
print('Q3: %3.3f'%(Q3))
print("")
IQR = Q3 - Q1
print('IQR: %3.3f'%(IQR))
print("")
print('lower fence: %3.3f < %3.3f'%(Q1 - IQR*1.5, tips["total_bill"].min() ))
print('upper fence: %3.3f < %3.3f'%(Q3 + IQR*1.5, tips["total_bill"].max() ))
위 결과에서 lower fence의 값이 "total_bill"의 최소값 보다 작기 때문에 boxplot에서 lower fence 보다 작은 outlier가 표시되지 않았다. 반면, upper fence의 값은 "total_bill"의 최대값 보다 작기 때문에 upper fence를 넘어가는 outlier가 boxplot에 그려진 것을 알 수 있다.
b. Pandas
tips["total_bill"].quantile(q=[0.25, 0.5, 0.75])
references
'Programming > Machine Learning' 카테고리의 다른 글
1D Convolutional Neural Network 이해하기 (CNN in numpy & keras) (0) | 2021.08.27 |
---|---|
Feature Importance with Information Gain (0) | 2021.08.21 |
Information Gain (간단한 예제 & 파이썬 코드) (3) | 2020.12.12 |
Tensorflow: regression 기본 예제 (연료 효율성 예측) (0) | 2020.11.14 |
[Tensorflow] House Price 예측 모델 (keras) (feat. 정확도 향상) (0) | 2020.10.30 |
댓글