ㅅㅇ

matplotlib_ 02_6 각종 그래프 그리기 _ 상자그래프(Boxplot) 본문

AI_STUDY/데이터 시각화 Matplotlib Seaborn Pandas

matplotlib_ 02_6 각종 그래프 그리기 _ 상자그래프(Boxplot)

SO__OS 2022. 6. 16. 21:54
 
플레이데이터 빅데이터캠프 공부 내용 _ 6/16

Pandas_ 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()