ㅅㅇ

matplotlib_ 02_5 각종 그래프 그리기 _ 히스토그램 (histogram) 본문

AI_STUDY/데이터 시각화 Matplotlib Seaborn Pandas

matplotlib_ 02_5 각종 그래프 그리기 _ 히스토그램 (histogram)

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

Pandas_ 02_5 각종 그래프 그리기 _ 히스토그램 (histogram)

1. 히스토그램

- 표로 된 도수 분포표를 그래프로 나타낸 것.
      - 도수분포표: 특정 그룹안에 값의 빈도를 나타낸 표
      - 주로 연속형 자료를 특정 구간으로 나눠 그 빈도를 확인한다.
           - 빈도 확인이나 분포를 볼때 사용한다.

- 그래프

    X축 : 계급(변수구간)의 대표값,   Y축 : 빈도수


- hist(  data  [, bins  =  계급개수] ) 메소드를 사용
    - data: 리스트형의 객체를 전달한다.

    - bins : 동일한 간격으로 나눌 구간의 갯수  def : 10 - > 동일한 간격인 10개의 구간으로 나눈다.

                크게 나눌수록 세분화하여 볼 수 있다.

 

 

2. 히스토그램 그리기

** 지정한 정규분포를 따르는 임의수(난수)를 가진 넘파이배열을 반환

평균이 100이고 표준편차가 10인 정규분포를 따르는 임의수(난수 - random 값) 1000개를 생성
# 정규분포 시그마(식스시그마)에 따른다. - > 평균 100  기준으로 표편10 이기에 거의 70~130 사이의 999개

data = np.random.normal(100, 10, 1000)

 

 이 data의 정규 분포를 히스토그램 그래프로 보자.

 연속된 데이터를 가진 해당 데이터의 각각의 값 자체를 보는 것은 목적이 아니다.

 특정 범위로 묶어서 범위별 몇 개가 있는지 분포정도 보는 것이 목적이다.   => 히스토그램

 

 

- 히스토그램 그래프 그리기 코드

data의 값들을 정렬하여 500개의 구간으로 동일하게 나눈다. 그리고 구간 별로 데이터의 수를 count 한다.

count 한 수량을 구간마다 표시하였다. 

나눈 구간은 x축에 표시하고, 구간 별 수량 데이터의 수는 y축으로 볼 수 있다.  - > 분포도

# histogram 그래프

plt.figure(figsize = (10,8))

# 동일한 간격으로 500개 구간 나눈다.
plt.hist(data, bins = 500) 

plt.xlabel('bins') # 값의 분포 구간
plt.ylabel('수량') # 해당 범위에 몇 개가 있는지
plt.show()

 

3. 히스토그램 활용

 

pandas ' 식당에서 팁을 지불한 손님의 정보를 모아둔 데이터 셋 ' 을  히스토그램로 그리기

tip 금액 데이터의 값들을  구간으로 묶어 어느 범위에 많이 분포해있는 지 보고 싶다.

즉, 데이터프레임 중 연속된 데이터를 가진 컬럼의 구간별 분포도를 확인하고 싶은 것.

 

 

-  total_bill 컬럼 데이터의 분포

plt.hist(tips['total_bill'], bins=30)
plt.show()

 

- tip 분포 

plt.hist(tips['tip'], bins = 30)
plt.show()

 

 

cf ) 범주형 데이터는 히스토그램으로 분포도를 볼 수 있을까?

 

smoker 컬럼의 데이터는 값이 yes와 no로 이뤄진 범주형 데이터이다.

 

구간별 데이터 값의 분포도를 보는 것이 중요한 연속형 데이터와 달리,

 

범주형데이터는 각 범주별의 데이터 차지 비율를 보는 것이 중요하다.

 

r = tips['smoker'].value_counts() 

# plt.bar(r.index, r)
plt.pie(r, labels = r.index, autopct = '%.2f%%')

plt.show()