데이터 시각화를 통한 탐색적 데이터 분석: 파이썬 히트맵 및 박스플롯 활용

데이터 분석 과정에서 데이터를 이해하고 숨겨진 패턴을 파악하는 것은 매우 중요합니다. 파이썬의 강력한 데이터 처리 라이브러리인 pandas와 시각화 라이브러리인 matplotlib, seaborn을 활용하면 이러한 탐색적 데이터 분석(EDA)을 효과적으로 수행할 수 있습니다. 본 글에서는 데이터를 불러와 전처리하고, 주요 변수들 간의 상관관계를 히트맵으로 시각화하며, 개별 변수들의 분포 특성을 박스 플롯으로 확인하는 방법을 상세히 다룹니다.

데이터 불러오기 및 초기 탐색

분석을 시작하기 위해 먼저 데이터를 CSV 파일에서 불러옵니다. 이후 info() 메서드를 통해 데이터프레임의 기본 구조, 컬럼 타입, 결측치 여부 등을 확인하고, head() 메서드로 상위 몇 줄을 살펴보며 데이터의 대략적인 모습을 파악합니다.

import pandas as pd

# 'credit_data.csv' 파일에서 데이터 불러오기
analysis_df = pd.read_csv('credit_data.csv')

# 데이터프레임의 기본 정보 (컬럼, 데이터 타입, 결측치 수 등) 확인
analysis_df.info()

# 데이터프레임의 상위 5개 행을 출력하여 데이터 구조 미리보기
analysis_df.head()

범주형 데이터를 수치형으로 변환

일부 컬럼은 텍스트 형태의 범주형 데이터를 포함하고 있을 수 있습니다. 예를 들어 'Years in current job'이나 'Home Ownership'과 같은 컬럼은 텍스트 값으로 저장되어 있어 직접적인 수치 분석이나 상관관계 계산이 어렵습니다. 이러한 컬럼들을 분석에 활용하기 위해 숫자형 값으로 매핑하여 변환합니다.

# 'Years in current job' 컬럼을 숫자형으로 변환하기 위한 매핑 사전 정의
job_duration_mapping = {
    "10+ years": 10, "9 years": 9, "8 years": 8, "7 years": 7, "6 years": 6,
    "5 years": 5, "4 years": 4, "3 years": 3, "2 years": 2, "1 year": 1,
    "< 1 year": 0
}

# 'Home Ownership' 컬럼을 숫자형으로 변환하기 위한 매핑 사전 정의
ownership_status_mapping = {
    "Home Mortgage": 0, "Rent": 1, "Own Home": 2, "Have Mortgage": 3
}

# 정의된 매핑을 사용하여 해당 컬럼들의 데이터를 수치형으로 변환
analysis_df['Years in current job'] = analysis_df['Years in current job'].map(job_duration_mapping)
analysis_df['Home Ownership'] = analysis_df['Home Ownership'].map(ownership_status_mapping)

# 변환 후 데이터프레임 정보 및 상위 행을 다시 확인
analysis_df.info()
analysis_df.head()

연속형 변수 상관관계 히트맵 시각화

데이터 전처리가 완료되면, 데이터 내 연속형 변수들 간의 상관관계를 파악하는 것이 중요합니다. 상관관계 히트맵은 여러 변수 간의 선형 관계 강도와 방향을 한눈에 시각적으로 보여주는 효과적인 방법입니다. 양의 상관관계는 두 변수가 함께 증가하는 경향을, 음의 상관관계는 한 변수가 증가할 때 다른 변수가 감소하는 경향을 나타냅니다.

import seaborn as sns
import matplotlib.pyplot as plt

# 상관관계 분석에 활용할 수치형 변수 목록 정의
numeric_attributes = [
    'Annual Income', 'Years in current job', 'Tax Liens',
    'Number of Open Accounts', 'Years of Credit History',
    'Maximum Open Credit', 'Number of Credit Problems',
    'Months since last delinquent', 'Bankruptcies',
    'Current Loan Amount', 'Current Credit Balance', 'Monthly Debt',
    'Credit Score', 'Home Ownership' # 변환된 'Home Ownership' 포함
]

# 선택된 변수들 간의 상관 행렬 계산
correlation_matrix = analysis_df[numeric_attributes].corr()

# Matplotlib의 이미지 해상도 설정 (고품질 시각화)
plt.rcParams['figure.dpi'] = 200

# 히트맵 그리기: 더 큰 크기의 피규어 생성
plt.figure(figsize=(15, 13))
# 상관 행렬을 히트맵으로 시각화. annot=True로 값 표시, cmap='viridis'로 색상 스킴 변경,
# fmt=".2f"로 소수점 두 자리까지 표시, linewidths=.5로 셀 간 경계선 추가
sns.heatmap(correlation_matrix, annot=True, cmap='viridis', fmt=".2f", linewidths=.5)
plt.title('주요 수치형 변수 간 상관관계 히트맵', fontsize=16) # 제목 설정
plt.show()

개별 변수 분포를 위한 박스 플롯 시각화

히트맵이 변수 간 관계를 보여준다면, 박스 플롯은 각 변수의 분포, 중앙값, 사분위수 및 이상치를 시각적으로 요약하는 데 사용됩니다. 이는 데이터의 중심 경향성과 분산, 그리고 잠재적인 이상치를 파악하는 데 유용합니다.

# 박스 플롯을 그릴 특정 변수 목록 정의
selected_variables_for_plot = [
    'Annual Income', 'Years in current job', 'Tax Liens', 'Number of Open Accounts'
]

# 이미지 해상도 설정
plt.rcParams['figure.dpi'] = 200

# 2행 2열의 서브플롯 그리드 생성 (총 4개의 그래프를 한 번에 표시)
fig, ax_grid = plt.subplots(2, 2, figsize=(12, 10))

# enumerate 함수를 활용하여 변수 목록을 순회하며 각 서브플롯에 박스 플롯 생성
# enumerate는 루프에서 인덱스와 값을 동시에 얻을 수 있게 해주는 유용한 기능입니다.
for plot_index, variable_name in enumerate(selected_variables_for_plot):
    # 현재 인덱스에 따라 서브플롯의 행과 열 인덱스 계산
    row_position = plot_index // 2
    col_position = plot_index % 2

    # 해당 서브플롯 위치에 박스 플롯 그리기 (결측치는 제거 후)
    ax_grid[row_position, col_position].boxplot(analysis_df[variable_name].dropna())
    ax_grid[row_position, col_position].set_title(f'{variable_name} 박스 플롯', fontsize=12)
    ax_grid[row_position, col_position].set_ylabel(variable_name)

# 서브플롯들 간의 간격을 자동으로 조절하여 겹침 방지
plt.tight_layout()

# 생성된 그래프를 화면에 표시
plt.show()

태그: python pandas matplotlib Seaborn DataVisualization

7월 13일 22:25에 게시됨