ㅅㅇ
matplotlib_ 02_6 각종 그래프 그리기 _ 상자그래프(Boxplot) 본문
matplotlib_ 02_6 각종 그래프 그리기 _ 상자그래프(Boxplot)
SO__OS 2022. 6. 16. 21:54Pandas_ 02_6 각종 그래프 그리기 _ 상자그래프(Boxplot)
1. 상자그래프(Boxplot)
- 연속형 값들의 분포, 이상치(극단값) 를 확인할 때 사용
- 값들의 중간값(중위수), 사분위수, 최대/최소값을 보여주어 값들의 분포를 확인 할때 사용한다.
- Boxplot 으로 알 수 있는 것
- 이상치(극단값)을 파악할 수 있다. - > 있다면, 정규분포는 아니라는 것을 알 수 있다.
- 정상적인 값들(이상치가 아닌)의 범위를 파악할 수 있다.
- 사분위수를 알 수 있다. (ex.상위 25%, 하위 25% 등)
- boxplot( x, whis=1.5 )
- x: 데이터셋
- whis: 극단치 계산시 사용할 값(기본 1.5)
- 극단치
: 1사분위와 3사분위에서 IQR (3사분위수-1사분위수) * whis 범위 이상 떨어진 값들
: 대부분의 값들이 분포된 범위에서 크게 떨어져 있는 값
- - > 극단치는 이상치(outlier) 중 하나이다.
둘의 차이를 알아야 한다. 목적부터 다름.
- 연속형 값들의 분포 확인 : 히스토그램, boxplot
- histogram : 연속된 값들을 그룹으로 나눈 뒤 수량을 중심으로 시각화
- 범위별 수량정보니 범위
- boxplot : 값의 범위를 기준으로 시각화 (4분위수를 중심으로 보는 것)
- 수량정보는 없다.
2. 상자그래프(Boxplot) 그리기
- 그래프
- y축 : data 값을 구성하는 값들
- x축은 의미 없음.
ex. 1000 개의 난수 값 중 극단치 값을 가진 데이터를 가지고,
값들의 분포, 사분위수, 최대/최소값, 극단치를 보고자 한다.
data = pd.Series(np.random.randint(1, 100, 1000)) # 1 ~ 99 사이의 임의의 정수 1000개를 생성
data[:5] = [300, 290, -50, -40, 350]
plt.boxplot(data)
plt.ylabel('data값을 구성하는 값들')
plt.show()
3. 상자그래프(Boxplot) 활용
Boxplot 로는 분포 내 몇 개의 데이터 갯수가 있는지는 알 수 없다. 그것을 보여주는 것은 히스토그램
상자 그래프는 값들이 '어떤 범위' 안에 분포되어있는 지를 알려주는 것이다. 즉, 값보다 범위! 에 초점이 맞춰진 그래프
pandas ' 식당에서 팁을 지불한 손님의 정보를 모아둔 데이터 셋 ' 을 상자그래프로 그리기
tip 금액 데이터의 분포의 범위를 보고 싶다.
즉, 데이터프레임 중 연속된 데이터를 가진 컬럼의 데이터 분포의 범위, 4분위수, 이상치를 확인하고 싶은 것.
(1) 기본예제 tips_df 에서 tip의 분포를 상자그래프로 확인
plt.boxplot(tips['tip'])
plt.show()
# 극단적으로 많이 주는 사람을 제외하고 거의 1 ~ 6 달러 정도의 tip을 준다. - > 정상적인 값의 범위
# 2 ~ 4달러 정도의 tip을 주는 사람이 많다라는 것을 알 수 있다. - > 분위수
# 8개 정도 극단치 : 극단적으로 많은 tip을 준 사람이 있다는 것을 알 수 있다. - > 극단치 (이상치)
(2) 기본예제 tips_df 에서 total_bill 의 분포
: x 축은 어차피 의미 없으니, 1 대신 label 이름으로 바꿔주자.
plt.boxplot(tips['total_bill'], labels = ['total_bill'])
plt.show()
3.1 한 그래프에서 여러 데이터셋의 boxplot을 그리기.
(1) 예제 _ tip, total_bill의 분포를 비교 : 한 axes에 두 개를 넣어 비교.
- > 넣을 데이터들을 리스트로 묶어서 넣어주면 된다.
- > 여러 개이니 라벨 붙여줘야 한다.
plt.boxplot([tips['tip'], tips['total_bill']], labels = ['tip', 'total_bill'])
plt.show()
(2) 예제 _ 남녀별 tip의 분포글 하나의 boxplot에서 그려 분포 비교 : 한 axes에 두 개를 넣어 비교.
- 2차원 배열형태의 구조로로 데이터를 제공
- 행(axis=0) 별로 그래프를 그린다.
Male_tip = tips[tips['sex'] == 'Male']['tip']
Female_tip = tips[tips['sex'] == 'Female']['tip']
plt.figure(figsize = (7, 8))
plt.boxplot([Male_tip, Female_tip], labels = ['Male_tip', 'Female_tip'])
plt.show()
'AI_STUDY > 데이터 시각화 Matplotlib Seaborn Pandas' 카테고리의 다른 글
Seaborn _ 데이터 시각화 (0) | 2022.06.18 |
---|---|
matplotlib_ 02_5 각종 그래프 그리기 _ 히스토그램 (histogram) (0) | 2022.06.16 |
matplotlib_ 02_4 각종 그래프 그리기 _ 파이차트 (Pie Chart) (0) | 2022.06.16 |
matplotlib_ 02_3 각종 그래프 그리기 _ 막대그래프(Bar plot) (0) | 2022.06.16 |
matplotlib_ 02_2 각종 그래프 그리기 _ 산점도 (Scatter Plot) (0) | 2022.06.16 |