CodeGym /행동 /Python SELF KO /데이터 분포 시각화를 위한 히스토그램 만들기

데이터 분포 시각화를 위한 히스토그램 만들기

Python SELF KO
레벨 41 , 레슨 3
사용 가능

1. 히스토그램 작성의 기본

만약에 뷔페 테이블을 보고 어떤 종류의 스낵이 더 많은지 결정을 내려 본 적이 있다면, 이미 데이터 분포에 대해 약간은 이해한 것이라고 볼 수 있어. 프로그래밍에서 우리는 히스토그램을 사용해서 겉보기엔 명확하지 않은 데이터들의 패턴을 찾아. 히스토그램은 데이터를 특정 카테고리나 수치 범위로 분포시켜 시각적으로 분석하는 데 도움을 줘. 이제 시작해보자!

히스토그램이란?

히스토그램은 특정 간격 또는 "빈(bins)"으로 데이터를 분포화하여 시각화하는 그래프의 한 종류야 (때로는 "바구니"나 "버킷"이라고도 불려). 예를 들어, 학생들이 시험에서 특정 점수를 몇 번이나 획득했는지 알고 싶다면, 히스토그램이 최고의 방법이겠지.

히스토그램의 주요 매개변수

히스토그램은 간격(빈)으로 이루어진 막대를 기반으로 해, 각각의 막대는 해당 간격에 해당하는 값의 수를 나타내. 주요 매개변수는 다음과 같아:

  • 빈 (bins): 데이터 범위를 나눌 간격의 수.
  • 색상 및 테두리 (coloredgecolor): 막대의 외관을 정의.
  • 범위 (range): 표시할 최소 및 최대 값을 설정.
  • 밀도 (density): True로 설정하면 히스토그램이 정규화되어, 막대의 총 면적이 1이 되도록 함.

hist() 함수를 사용한 히스토그램 작성

Matplotlib 라이브러리에는 히스토그램 생성을 간단하게 만들어주는 hist() 함수가 있어. 간단한 예제를 보자:

Python

import matplotlib.pyplot as plt
import numpy as np

# 데이터 세트 생성
data = np.random.normal(0, 1, 1000)

# 히스토그램 생성
plt.hist(data, bins=30, alpha=0.7, color='blue')
plt.title('데이터 분포 히스토그램')
plt.xlabel('값')
plt.ylabel('빈도')
plt.show()

여기서 우리는 np.random.normal() 함수를 사용하여 정규 분포 데이터를 생성했어. 데이터를 30개의 빈으로 나누고, alpha 매개변수를 사용하여 막대의 투명도를 설정했어.

2. 빈과 그래프 스타일 설정

빈의 수와 크기 설정

빈의 수와 크기는 히스토그램 해석에 큰 영향을 미칠 수 있어. 너무 큰 빈은 중요한 디테일을 숨길 수 있고, 너무 작은 빈은 히스토그램을 복잡하고 이해하기 어렵게 만들 수 있어.

실습 예제:

Python

# 빈의 수와 크기 변경
plt.hist(data, bins=10, color='green', edgecolor='black')
plt.title('10개의 빈을 가진 히스토그램')
plt.xlabel('값')
plt.ylabel('빈도')
plt.show()

plt.hist(data, bins=50, color='red', edgecolor='black')
plt.title('50개의 빈을 가진 히스토그램')
plt.xlabel('값')
plt.ylabel('빈도')
plt.show()

빈의 수를 10개와 50개로 설정했을 때 히스토그램 모양이 어떻게 변하는지 확인해봐. 차이가 보이지? 바로 빈의 크기가 중요하다는 점을 알려주는 예야!

히스토그램 매개변수 변경 실습

히스토그램은 빈의 수뿐만 아니라 색상, 투명도, 심지어 막대 스타일까지도 설정할 수 있어. 다른 예제를 보자:

Python

# 다른 매개변수 설정
plt.hist(data, bins=30, density=True, color='purple', edgecolor='white', linestyle='dashed')
plt.title('변경된 스타일의 밀도 히스토그램')
plt.xlabel('값')
plt.ylabel('밀도')
plt.grid(True)
plt.show()

이 예제에서는 density=True 매개변수를 추가했어. 이는 히스토그램을 정규화하여 그래프 아래의 면적이 1이 되도록 만들어. 분포의 확률 밀도를 분석할 때 유용해.

3. 히스토그램 활용 예제

히스토그램은 금융 데이터 분석부터 물리학 실험까지 다양한 영역에서 사용돼. 실제 데이터 세트에서 히스토그램을 사용하는 방법을 보자.

실제 데이터 세트로 히스토그램 작성

예를 들어, 1년간의 평균 일일 온도를 나타내는 데이터 세트가 있다고 하자. 특정 범위에 온도가 얼마나 자주 있는지 분석해보자.

Python

# 온도 데이터 세트 (예제의 간단화된 형태)
temperatures = [15, 16, 15, 14, 19, 22, 24, 25, 17, 18, 15, 16, 23, 24, 21, 19, 18, 20, 22, 25, 26, 27]

# 히스토그램 작성
plt.hist(temperatures, bins=5, color='navy', edgecolor='black')
plt.title('온도 히스토그램')
plt.xlabel('온도 (°C)')
plt.ylabel('빈도')
plt.show()

이 예제에서 5개의 빈을 사용해서 값이 어떻게 분포되어 있는지 알아봤어. 히스토그램은 대부분의 온도가 15°C에서 20°C 사이에 있다는 걸 보여주지.

한 히스토그램에서 여러 분포 비교

때로는 하나의 히스토그램에서 여러 데이터 세트의 분포를 비교해야 할 때가 있어. Matplotlib에서는 alpha (투명도) 매개변수를 사용해 여러 히스토그램을 중첩할 수 있어.

예제 3: 분포 비교

Python

import matplotlib.pyplot as plt

# 데이터 생성
data1 = [5, 10, 10, 15, 15, 20, 25, 30, 30, 35, 40]
data2 = [5, 7, 9, 10, 11, 13, 15, 17, 19, 20, 25]

# 중첩된 히스토그램 작성
plt.hist(data1, bins=5, color="blue", alpha=0.5, label="세트 1")
plt.hist(data2, bins=5, color="green", alpha=0.5, label="세트 2")
plt.xlabel("값")
plt.ylabel("빈도")
plt.title("두 분포 비교")
plt.legend()
plt.show()

이 예제에서 우리는 각각의 히스토그램에 alpha=0.5를 사용했어. 이는 막대를 반투명하게 만들어서 두 분포의 교차점을 시각적으로 비교할 수 있도록 해줘.

히스토그램 작업에 유용한 팁

  • 최적의 빈 수 선택: 데이터의 특성과 크기를 기준으로 적절한 빈 수를 선택해. 너무 적거나 너무 많은 빈은 분포를 왜곡할 수 있어.
  • 분포 비교: alpha(투명도)를 사용해 여러 히스토그램을 중첩해서 분포를 비교.
  • 그리드 추가: 그리드는 데이터를 더 잘 해석하는 데 도움을 줘. plt.grid(True) 함수로 추가할 수 있어.
  • density 매개변수: 데이터를 확률 밀도로 표시하려면 density=True를 사용해. 특히 분포를 비교할 때 유용해.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION