대출 소득 데이터 시각화: 샘플 크기에 따른 평균의 분포 비교(feat. seaborn, 중심극한정리)
안녕하세요! 오늘은 파이썬을 사용하여 대출 소득 데이터를 시각화하는 방법에 대해 알아보겠습니다. 우리는 주어진 데이터셋에서 샘플을 추출하고, 이를 시각화하여 샘플 크기에 따른 평균 소득의 분포를 비교하는 과정을 살펴볼 것입니다. 아래에 사용한 파이썬 코드와 함께 설명을 차례대로 살펴보겠습니다.
먼저, 필요한 라이브러리를 임포트합니다.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
다음으로, 대출 소득 데이터를 읽어온 후, DataFrame에서 Series로 변환합니다.
loan_income = pd.read_csv('data_practical_statistics/loans_income.csv').squeeze()
이제 3가지 종류의 데이터를 생성합니다.
- 원본 데이터셋에서 무작위로 1000개의 데이터를 추출하여 'Data' 타입으로 저장합니다.
- 원본 데이터셋에서 무작위로 5개의 데이터를 추출한 뒤, 평균을 구하고 이를 1000번 반복하여 'Mean of 5' 타입으로 저장합니다.
- 원본 데이터셋에서 무작위로 20개의 데이터를 추출한 뒤, 평균을 구하고 이를 1000번 반복하여 'Mean of 20' 타입으로 저장합니다.
sample_data = pd.DataFrame({'income': loan_income.sample(1000), 'type': 'Data'})
sample_mean_05 = pd.DataFrame({'income': [loan_income.sample(5).mean() for _ in range(1000)], 'type': 'Mean of 5'})
sample_mean_20 = pd.DataFrame({'income': [loan_income.sample(20).mean() for _ in range(1000)], 'type': 'Mean of 20'})
이후, 세 가지 데이터 타입을 하나의 DataFrame으로 결합합니다.
results = pd.concat([sample_data, sample_mean_05, sample_mean_20])
print(results.head())
이제 seaborn의 FacetGrid를 사용하여 히스토그램을 그립니다. 각각의 데이터 타입에 대해 히스토그램을 생성하며, x축은 소득을 나타내고, y축은 카운트를 나타냅니다. 히스토그램의 범위는 0에서 200,000으로 설정되어 있으며, 총 40개의 구간으로 나뉩니다.
g = sns.FacetGrid(results, col='type', col_wrap=1, height=2, aspect=2)
g.map(plt.hist, 'income', range=[0, 200000], bins=40)
g.set_axis_labels('Income', 'Count')
g.set_titles('{col_name}')
FacetGrid 함수는 여러 개의 플롯을 그리드 형태로 구성하여 비교하고자 할 때 유용합니다.
- results: 이 인자는 시각화할 데이터를 전달합니다. 여기서는 results라는 DataFrame을 사용하였습니다.
- col: 이 인자는 데이터를 분할하여 그리드에 표시할 열을 지정합니다. 여기서는 'type' 열을 사용하여 각각의 데이터 타입('Data', 'Mean of 5', 'Mean of 20')에 따라 서로 다른 플롯을 생성하였습니다.
- col_wrap: 이 인자는 한 줄에 표시할 열의 최대 개수를 지정합니다. 여기서는 1로 설정하여 각 데이터 타입에 해당하는 플롯이 세로로 나열되게 하였습니다.
- height: 이 인자는 각 플롯의 높이를 설정합니다. 여기서는 2로 설정하였습니다.
- aspect: 이 인자는 각 플롯의 가로 세로 비율을 설정합니다. 여기서는 가로가 세로의 2배인 2로 설정하였습니다.
다음으로, g.map() 함수를 사용하여 각각의 그리드에 히스토그램을 그립니다.
- plt.hist: 이 인자는 각 그리드에 적용할 함수를 지정합니다. 여기서는 matplotlib.pyplot의 hist 함수를 사용하여 히스토그램을 그렸습니다.
- 'income': 이 인자는 히스토그램을 그릴 때 사용할 데이터의 열 이름을 지정합니다. 여기서는 소득 데이터가 저장된 'income' 열을 사용하였습니다.
- range: 이 인자는 히스토그램의 x축 범위를 지정합니다. 여기서는 소득 범위를 0에서 200,000으로 설정하였습니다.
- bins: 이 인자는 히스토그램의 구간(bin) 개수를 지정합니다. 여기서는 40개의 구간으로 설정하였습니다.
plt.tight_layout()
plt.show()
이렇게 생성된 플롯은 원본 데이터, 평균 5개의 샘플, 평균 20개의 샘플에 대한 소득 분포를 보여줍니다. 이를 통해 샘플 크기가 커짐에 따라 평균 소득의 분포가 어떻게 달라지는지 비교할 수 있습니다.
분석 결과, 'Mean of 5'와 'Mean of 20'의 히스토그램은 원본 데이터에 비해 더 정규분포에 가까운 형태를 보입니다. 이는 중심극한정리(Central Limit Theorem)에 따라 샘플 크기가 커질수록 표본 평균의 분포가 정규분포에 가까워지는 것을 잘 보여줍니다.
이상으로 파이썬을 이용한 대출 소득 데이터 시각화에 대한 설명을 마치겠습니다. 이 예제를 통해 여러분은 다양한 샘플 크기를 가진 데이터의 평균 분포를 시각화하고, 중심극한정리와 같은 통계적 개념을 쉽게 이해할 수 있습니다. 앞으로도 다양한 데이터 시각화 기법을 활용하여 데이터 분석의 효율성을 높여보시기 바랍니다. 감사합니다.