Histogram

Author

Gabriel Yang

히스토그램(Histogram)의 특징과 활용 및 Plotly로 히스토그램 그리기

1. 히스토그램의 특징

히스토그램(Histogram)은 데이터의 분포를 시각적으로 표현하는 데 사용되는 대표적인 그래프입니다. 막대그래프와 유사하지만, 히스토그램은 연속형 데이터를 구간(또는 bin)으로 나누어 각 구간에 속하는 데이터의 빈도를 표시합니다.

히스토그램의 주요 특징:

  1. 데이터 분포 파악: 히스토그램은 데이터가 어떤 구간에 집중되어 있는지, 즉 데이터의 분포를 직관적으로 파악할 수 있게 해줍니다.
  2. 중심 경향 파악: 데이터의 평균, 중앙값, 최빈값 등 중심 경향을 히스토그램을 통해 쉽게 확인할 수 있습니다.
  3. 분산 및 변동성 이해: 데이터가 얼마나 퍼져 있는지(분산), 대칭적인지(왜도), 봉우리가 몇 개인지(첨도) 등을 파악하는 데 유용합니다.
  4. 이상값(Outlier) 식별: 히스토그램을 통해 다른 데이터와 큰 차이를 보이는 이상값을 쉽게 식별할 수 있습니다.

히스토그램이 유용한 데이터:

  • 연속형 데이터: 나이, 키, 무게, 점수 등과 같이 숫자로 나타낼 수 있으며 구간으로 나눌 수 있는 데이터에 적합합니다.
  • 크고 복잡한 데이터셋: 데이터의 분포를 빠르게 시각화하여 트렌드를 파악하는 데 유용합니다.
  • 비교 분석: 여러 그룹의 데이터 분포를 비교할 때 활용할 수 있습니다.

2. Plotly로 히스토그램 그리기: 예제를 중심으로 설명

Plotly 설치하기

먼저 Plotly를 설치해야 합니다. Python 환경에서 다음 명령어를 사용해 설치할 수 있습니다.

pip install plotly

2.1 기본 히스토그램 그리기

Plotly에서 히스토그램을 그리는 가장 기본적인 방법을 살펴보겠습니다. 여기서는 plotly.express 모듈을 사용합니다.

import plotly.express as px
import numpy as np

# 랜덤 데이터 생성
np.random.seed(0)
data = np.random.randn(1000)

# 히스토그램 그리기
fig = px.histogram(data, nbins=30, title="기본 히스토그램")
fig.show()

설명:

  • numpy를 사용해 1000개의 난수를 생성합니다. 이 데이터는 정규분포를 따르도록 설정되었습니다.
  • px.histogram 함수를 사용해 히스토그램을 생성하고, nbins 매개변수를 통해 막대(bin)의 개수를 30으로 설정했습니다.

2.2 여러 데이터셋 비교하기

히스토그램은 여러 데이터셋의 분포를 비교할 때도 유용합니다. 이를 위해 두 그룹의 데이터를 비교하는 히스토그램을 만들어보겠습니다.

import plotly.express as px
import pandas as pd

# 두 그룹의 데이터 생성
np.random.seed(0)
group1 = np.random.randn(500)
group2 = np.random.randn(500) + 2  # 평균을 다르게 설정

# 데이터프레임 생성
df = pd.DataFrame({
    "value": np.concatenate([group1, group2]),
    "group": ["Group 1"] * 500 + ["Group 2"] * 500
})
df.head()
value group
0 1.764052 Group 1
1 0.400157 Group 1
2 0.978738 Group 1
3 2.240893 Group 1
4 1.867558 Group 1

두 그룹의 데이터를 생성하여 하나는 평균이 0, 다른 하나는 평균이 2가 되도록 설정했습니다.

# 히스토그램 그리기
fig = px.histogram(df, x="value", color="group", barmode="overlay", title="두 그룹의 데이터 분포 비교")
fig.show()
  • pandas 데이터프레임을 사용해 데이터를 그룹별로 정리한 후, px.histogram을 사용해 두 그룹의 데이터를 한 그래프에 표현했습니다.
  • barmode="overlay"를 사용해 두 히스토그램이 겹쳐 보이도록 설정했습니다.

2.3 히스토그램 막대 갯수 조정하기

히스토그램에서 막대(또는 빈, bin)의 개수는 데이터의 범위를 어떻게 나누는지에 대한 기준을 나타냅니다. 각 막대는 특정 범위의 값을 포함하는 데이터 포인트의 수, 즉 빈도를 나타냅니다. 따라서, 막대의 갯수는 히스토그램을 통해 얻는 정보의 해상도를 결정합니다.

fig = px.histogram(df, x="value", color="group", barmode="overlay", nbins=200, title="nbins = 200")
fig.show()

위의 nbins를 200으로 설정한 히스토그램은 막대가 많아져 데이터 범위를 더 작은 구간으로 나누어 더 세밀한 정보를 얻을 수 있지만, 데이터가 과도하 게 세분화되어 노이즈가 많아진 것을 알 수 있습니다.

fig = px.histogram(df, x="value", color="group", barmode="overlay", nbins=15, title="두 그룹의 데이터 분포 비교")
fig.show()

반대로 막대가 적으면 더 큰 구간으로 나누기 때문에 데이터의 전체적인 분포를 쉽게 파악할 수 있지만, 중요한 세부 정보가 사라질 수 있습니다.

따라서 막대의 갯수는 데이터의 분포를 적절히 표현할 수 있는 수준으로 설정하는 것이 중요합니다.

2.4 히스토그램 커스터마이징

히스토그램의 외형을 커스터마이징하여 더욱 보기 좋은 그래프를 만들어 보겠습니다.

fig = px.histogram(data, nbins=40, title="커스터마이징된 히스토그램")

# 막대 색상 및 테두리 설정
fig.update_traces(marker=dict(color="orange", line=dict(color="black", width=2)))

# 축 제목 설정
fig.update_layout(xaxis_title="값", yaxis_title="빈도")

fig.show()

설명:

  • update_traces 메서드를 사용해 막대의 색상과 테두리의 색상 및 두께를 설정했습니다.
  • update_layout 메서드를 통해 축 제목을 지정하여 그래프를 더욱 명확하게 만들었습니다.