boxplot
박스플롯은 다음의 형태를 가집니다.
박스 플롯은 그림 1과 같이 자료의 4분위수를 표시합니다.
- 박스 아래의 수평바 : 이상치를 제외한 자료의 최소값(하한값)
- 박스의 하단 : Q1
- 박스 내부의 선 : Q2, 자료의 중간값(median)
- 박스 상단: Q3
- 박스 위의 수평바: 이상치를 제외한 자료의 최대값(상한값)
- 박스와 수염모양의 바를 벗어난 점: 이상치
최대값과 최소값은 식 1과 같이 계산합니다.
IQR = Q3 - Q1 | (식 1) |
---|---|
하한 = Q1 - IQR·1.5 | |
상한 = Q3 + IQR·1.5 |
boxplot은 다음 함수로 작성할 수 있습니다.
- plt.boxplot(x, norch=None, sym=None, vert=None)
- x: 배열, 벡터의 시퀀스
2차원일 경우 열단위로 작성 - norch: True → 중앙값 주변에 신뢰구간(CI)를 나타냄
- sym: 이상치 표시, 기본값은 None
- whis: 상한과 하한의 계산하기 위해 IQR에 고려하는 가중치로 기본값은 1.5
하한(lower whisker)의 위치: Q1 - whis × (Q3-Q1)
상한(upper whisker)의 위치: Q3 + whis × (Q3-Q1) - vert
True → 박스 그림을 수직으로 작성(기본값 None과 같음)
False : → 박스그림을 수평으로 작성
- x: 배열, 벡터의 시퀀스
np.random.seed(3) da=np.random.randn(1000, 3) plt.figure(figsize=(4, 3)) plt.boxplot(da, sym="b1", notch=True) plt.show()
fig, ax=plt.subplots(figsize=(4,3)) box=ax.boxplot(da, notch=True, sym="g+", vert=False) ax.set_xlabel("value") ax.set_ylabel("var.", rotation="horizontal", labelpad=10) plt.show()
위 그림 객체인 box는 그래프외에 다양한 정보를 포함합니다. 대표적으로 'whikers', 'median', 'fliers'는 다음과 같습니다.
- box['whikers']: (Q1, minimum), (Q3, maximum)을 반환
- box['median']: median 값을 반환
- box['fliers']: min, max를 초과하는 이상치를 반환
[i.get_ydata() for i in box["whiskers"]]
[array([-0.68075585, -2.60017737]), array([0.65068116, 2.44832444]), array([-0.64932561, -2.57097837]), array([0.67260738, 2.56686854]), array([-0.7197566 , -2.67652137]), array([0.6323977 , 2.53058273])]
[i.get_xdata() for i in box["medians"]]
[array([-0.01380357, -0.01380357]), array([-0.00793198, -0.00793198]), array([-0.01982575, -0.01982575])]
[i.get_xdata() for i in box["fliers"]]
[array([-2.97712531, -3.027048 , -3.05131306, 2.81187838, 2.71192633, 2.95940895]), array([-2.91573775, -2.68510868, -3.1739823 , 3.31430424, 3.70245824, 2.76020545, 3.62528749, 3.00679945, 2.72089679]), array([-2.9839702 , -2.97099952, 2.67611247, 2.68793049, 2.87259971])]
댓글
댓글 쓰기