Skip to content

Pandas Plot Histogram: 파이썬에서 히스토그램 생성 및 사용자정의

Updated on

데이터 시각화는 데이터 분석의 중요한 측면이며, 파이썬의 Pandas 라이브러리는 통찰력 있는 시각화를 생성할 수 있는 강력한 도구입니다. 히스토그램은 데이터셋의 분포를 그래픽으로 나타내는 방법 중 하나입니다. 이 기사에서는 pandas를 사용하여 히스토그램을 그리는 방법, 구간을 사용자정의하는 방법, 여러 열을 동시에 그리는 방법 등을 탐색합니다. 자주 묻는 질문 몇 가지에 대한 답변과 프로세스를 더 잘 이해하도록 도와주는 예제도 제공할 것입니다.

히스토그램은 대용량 데이터셋을 처리할 때 특히 유용한데, 이는 데이터의 시각적 요약을 제공할 수 있기 때문입니다. 히스토그램은 연속 또는 이산 데이터의 주파수 분포를 이해하는 데 도움이 될 수 있습니다. 이러한 히스토그램은 나이 그룹과 같은 데이터를 다룰 때 특히 유용한데, 분포를 이해함으로써 가치 있는 통찰력을 제공할 수 있기 때문입니다.

파이썬 Pandas 데이터프레임에서 손쉽게 데이터 시각화를 생성하고 싶나요?

PyGWalker는 시각화를 포함한 탐색적 데이터 분석을 위한 파이썬 라이브러리입니다. PyGWalker (opens in a new tab)를 사용하면 pandas 데이터프레임(및 polars 데이터프레임)을 Tableau 스타일의 사용자 인터페이스로 변환하여 Jupyter Notebook 데이터 분석 및 데이터 시각화 워크플로우를 간소화할 수 있습니다.

PyGWalker를 사용한 데이터 시각화 (opens in a new tab)

Pandas에서 히스토그램 생성하기

Pandas에서 히스토그램을 생성하는 것은 hist() 함수의 도움으로 간단합니다. 이 함수는 pandas DataFrame 또는 Series의 데이터 분포를 시각화하는 빠른 방법을 제공합니다. 히스토그램을 생성하는 기본적인 예는 다음과 같습니다:

import pandas as pd
import matplotlib.pyplot as plt
 
# 간단한 데이터프레임 생성
data = {'values': [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]}
df = pd.DataFrame(data)
 
# 히스토그램 그리기
df['values'].hist()
plt.show()

이 예제에서는 먼저 필요한 라이브러리인 pandas와 matplotlib을 가져옵니다. 그런 다음 간단한 pandas DataFrame을 생성하고 'values' 열의 hist() 함수를 사용하여 히스토그램을 그립니다. plt.show() 함수를 사용하여 플롯을 표시합니다.

Pandas 히스토그램에서 구간 사용자정의하기

Pandas의 hist() 함수는 기본적으로 10개의 구간을 사용합니다. 하지만 필요에 따라 구간의 개수를 사용자정의할 수 있습니다. hist() 함수의 bins 매개변수를 사용하여 히스토그램에서 사용할 구간의 수를 지정할 수 있습니다.

예를 들어, 구간의 개수를 20개로 늘리려면 다음과 같이 할 수 있습니다:

df['values'].hist(bins=20)
plt.show()

Pandas 히스토그램에서 구간을 사용자정의하면 데이터 분포의 세부 정보를 더 자세히 볼 수 있습니다. 하지만 적절한 구간 수를 선택하는 것이 중요합니다. 너무 많은 구간은 과적합을 야기할 수 있으며, 히스토그램이 데이터를 지나치게 잘 나타내어 '큰 그림'을 간과할 수 있습니다. 반대로, 구간 수가 너무 적으면 데이터를 지나치게 간단하게 표현하여 유용한 패턴을 판별하기 어렵게 할 수 있습니다.

Pandas에서 여러 열로 히스토그램 그리기

Pandas는 여러 열로 구성된 히스토그램을 그릴 수 있도록 허용합니다. 두 가지 다른 변수의 분포를 비교하려는 경우 특히 유용할 수 있습니다. 여러 열로 히스토그램을 그리기 위해서는 단순히 열을 hist() 함수에 전달하면 됩니다.

다음은 여러 열로 히스토그램을 그리는 예입니다:

# 두 개 열을 가진 데이터프레임 생성
data = {'values1': [1, 2, 2, 3, 3, 3, 4, 4, 4, 4],
        'values2': [1, 1, 2, 2, 3, 3, 3, 4, 4, 4]}
df = pd.DataFrame(data)
 
# 여러 열로 히스토그램 그리기
df.hist(bins=20, alpha=0.5)
plt.show()

이 예제에서는 'values1'과 'values2'라는 두 개의 열로 구성된 DataFrame을 생성합니다. 그런 다음 DataFrame에 hist() 함수를 호출하여 각 열에 대한 히스토그램을 그립니다. alpha 매개변수는 히스토그램의 투명도를 설정하는 데 사용되며, 이를 통해 비교하기가 더 쉽습니다.

Pandas에서 그룹별 히스토그램 그리기

Pandas의 또 다른 강력한 기능은 그룹별로 히스토그램을 그릴 수 있다는 점입니다. 이는 변수의 분포를 서로 다른 그룹 간에 비교하려는 경우 특히 유용합니다.

예를 들어, 서로 다른 직업군의 사람들의 나이를 포함하는 DataFrame이 있다고 가정해 보겠습니다. 직업에 따라 나이의 히스토그램을 그릴 수 있습니다:

# 나이와 직업을 포함하는 데이터프레임 생성
data = {'age': [23, 25, 22, 30, 32, 40, 35, 24, 28, 35],
        'profession': ['engineer', 'doctor', 'engineer', 'doctor', 'engineer', 'doctor', 'engineer', 'doctor', 'engineer', 'doctor']}
df = pd.DataFrame(data)
 
# 그룹별로 히스토그램 그리기
df.groupby('profession')['age'].hist(alpha=0.6)
plt.legend(['Engineer', 'Doctor'])
plt.show()

이 예제에서는 'age'와 'profession' 열을 포함하는 DataFrame을 먼저 생성합니다. 그런 다음 DataFrame을 'profession'으로 그룹화하고 'age' 열에 hist() 함수를 호출합니다. 이렇게하면 각 직업별 나이의 히스토그램이 그려집니다. alpha 매개변수는 히스토그램의 투명도를 설정하며, legend() 함수는 플롯에 범례를 추가하는 데 사용됩니다.

Pandas에서 정규화된 히스토그램 그리기

때로는 데이터의 분포를 개수 대신 비율로 나타내는 정규화된 히스토그램을 그리는 것이 유용할 수 있습니다. Pandas에서는 hist() 함수에서 density 매개변수를 True로 설정하여 정규화된 히스토그램을 그릴 수 있습니다.

다음은 정규화된 히스토그램을 그리는 예입니다:

# 정규화된 히스토그램 그리기
df['values1'].hist(density=True)
plt.show()
 
이 예제에서 `density=True` 인자는 히스토그램의 면적이 1이 되도록 하여 확률 밀도 함수를 얻을 수 있게 합니다.
 
## 판다스 히스토그램으로 서브플롯 생성하기
 
판다스는 히스토그램을 그릴 때 서브플롯을 생성할 수도 있습니다. 이는 여러 변수의 분포를 나란히 비교하고자 할 때 특히 유용합니다. 서브플롯을 생성하기 위해서는 `hist()` 함수에서 `subplots=True` 인자를 사용할 수 있습니다.
 
다음은 예제입니다.
 
```python
# 서브플롯 생성하기
df.hist(bins=20, alpha=0.5, subplots=True, layout=(1,2))
plt.show()

이 예제에서는 'values1'과 'values2'열에 대해 한 행에 두 개의 서브플롯을 생성합니다. layout 매개변수를 사용하여 서브플롯의 배열을 지정합니다.

판다스 히스토그램에 오차 막대 추가하기

히스토그램에 오차 막대를 추가하면 데이터의 가변성 또는 불확실성을 시각적으로 나타낼 수 있습니다. 판다스는 직접 히스토그램에 오차 막대를 추가하는 기능을 제공하지 않지만, matplotlib 라이브러리를 사용하여 이를 구현할 수 있습니다.

다음은 예제입니다.

import numpy as np
 
# 평균과 표준 편차 계산하기
mean = df['values1'].mean()
std = df['values1'].std()
 
# 오차 막대가 있는 히스토그램 그리기
plt.hist(df['values1'], bins=20, alpha=0.5)
plt.errorbar(mean, 5, xerr=std, fmt='o')
plt.show()

이 예제에서는 먼저 'values1' 열의 평균과 표준 편차를 계산합니다. 그런 다음 히스토그램을 그리고 평균 위치에 오차 막대를 추가합니다. matplotliberrorbar() 함수를 사용하여 오차 막대를 추가합니다.

결론

히스토그램은 데이터 시각화에 강력한 도구이며, 파이썬의 판다스 라이브러리는 히스토그램을 생성하고 사용자 정의하는 다양한 기능을 제공합니다. 간단한 히스토그램을 그리기, 구간을 사용자 정의하기, 여러 열을 그리기, 서브플롯 생성하기 등 다양한 작업을 판다스로 수행할 수 있습니다. 효과적인 데이터 시각화의 핵심은 통찰력 있는 플롯을 만드는 것뿐만 아니라 특정 요구에 맞게 플롯을 사용자 정의하는 것입니다.

자주 묻는 질문

  1. 판다스 히스토그램에서 x축 눈금을 사용자 정의하는 방법은 무엇인가요? matplotlib 라이브러리의 xticks() 함수를 사용하여 x축 눈금을 사용자 정의할 수 있습니다. 예를 들어 plt.xticks(range(0, 10))은 x축 눈금을 0부터 10까지로 설정합니다.

  2. 판다스에서 밀도를 가진 히스토그램을 그리는 방법은 무엇인가요? hist() 함수에서 density 매개변수를 True로 설정하여 밀도가 있는 히스토그램을 그릴 수 있습니다. 이렇게 설정하면 히스토그램 아래의 면적이 1이 되는 정규화된 히스토그램이 그려집니다.

  3. 판다스 히스토그램에 범례를 추가하는 방법은 무엇인가요? matplotlib 라이브러리의 legend() 함수를 사용하여 판다스 히스토그램에 범례를 추가할 수 있습니다. 예를 들어 plt.legend(['Column1', 'Column2'])는 'Column1'과 'Column2'라는 범례를 추가합니다.