본문 바로가기
Python/Machine Learning

탐색적 데이터 분석(EDA)

by 좌우지간에 2024. 12. 19.

탐색적 데이터 분석(EDA) 개요

탐색적 데이터 분석(EDA)은 데이터를 이해하고 모델링 이전에 데이터를 정제하기 위한 필수 과정입니다.
EDA를 통해 데이터의 분포, 이상치, 결측치, 상관관계 등을 파악하여 데이터 전처리 및 모델 설계의 방향성을 결정할 수 있습니다.


1. 데이터 구조와 개요 확인

EDA의 첫 번째 단계는 데이터셋의 전반적인 구조를 파악하는 것입니다.

  • 데이터 크기 확인: 데이터셋의 행(row)과 열(column) 개수를 파악하여 전체적인 데이터 구조를 이해.

    print(data.shape)  # 행(row)과 열(column) 개수
  • 데이터 타입 확인: 각 열의 데이터 유형(수치형, 범주형, 날짜 등)을 파악.

    print(data.info())  # 데이터 타입 및 결측치 정보
  • 샘플 데이터 확인: 데이터의 일부를 출력하여 데이터의 내용과 특성을 살펴봄.

    print(data.head())  # 상위 5개 데이터 확인
  • 결측치 탐지: 각 열에 결측값이 얼마나 있는지 확인.

    print(data.isnull().sum())

2. 수치형 데이터 분석

수치형 데이터의 분포와 기본 통계량을 확인합니다.

  • 기초 통계량 확인: 평균, 중앙값, 최소값, 최대값, 분산 등을 통해 데이터 분포를 파악.

    print(data.describe())
  • 분포 시각화: 히스토그램과 KDE(Kernel Density Estimate)를 통해 수치형 데이터의 분포를 시각적으로 분석.

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    sns.histplot(data['column_name'], kde=True)
    plt.show()
  • 왜도(Skewness) 분석: 데이터가 비대칭적인지 확인하여 변환 필요성을 검토.

    from scipy.stats import skew
    
    skewness = data.skew()
    print(skewness)

3. 범주형 데이터 분석

범주형 데이터의 클래스 분포를 확인하고, 클래스 불균형 여부를 파악합니다.

  • 빈도표(Frequency Table): 각 클래스별 데이터 개수를 확인.

    print(data['categorical_column'].value_counts())
  • 범주형 데이터 시각화: 막대그래프를 활용한 시각화.

    sns.countplot(data=data, x='categorical_column')
    plt.show()

4. 결측치 분석

결측값이 데이터에 미치는 영향을 분석하고, 적절한 처리를 결정합니다.

  • 결측치 비율 확인

    missing = data.isnull().sum()
    missing_percentage = (missing / len(data)) * 100
    print(pd.DataFrame({'Missing Values': missing, 'Percentage': missing_percentage}))
  • 결측치 시각화

    import missingno as msno
    
    msno.matrix(data)
    plt.show()
    
    msno.heatmap(data)
    plt.show()

5. 이상치 탐지 (Outlier Detection)

이상치를 탐지하여 데이터 품질을 개선합니다.

  • Boxplot 시각화

    sns.boxplot(data['column_name'])
    plt.show()
  • IQR(Interquartile Range) 활용

    Q1 = data['column_name'].quantile(0.25)
    Q3 = data['column_name'].quantile(0.75)
    IQR = Q3 - Q1
    
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    
    outliers = data[(data['column_name'] < lower_bound) | (data['column_name'] > upper_bound)]
    print(outliers)

6. 상관관계 분석 (Correlation Analysis)

변수 간의 관계를 분석하여 중요한 변수를 식별합니다.

  • 상관계수 계산: 변수 간 상관관계를 파악.

    correlation_matrix = data.corr()
    print(correlation_matrix)
  • 히트맵 시각화: 상관계수를 히트맵으로 표현하여 변수 간 관계를 한눈에 확인.

    sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
    plt.show()

7. 목표 변수(Target Variable) 분석

타겟 변수의 분포와 특징을 분석하여 문제 정의에 적합한지 검토합니다.

  • 타겟 변수의 분포 확인: 회귀(regression) 또는 분류(classification) 문제에 적합한지 확인.
    sns.histplot(data['target'], kde=True)
    plt.show()

EDA의 결과 활용

EDA의 분석 결과를 바탕으로 데이터 전처리 및 모델링 방향성을 결정할 수 있습니다.

  1. 결측치 처리 방법 결정: 삭제, 대체, 또는 모델 기반 처리.
  2. 이상치 처리 방향 결정: 제거, 대체, 또는 무시.
  3. 특성 선택 또는 생성: 중요한 변수 선택 및 새로운 피처 생성.
  4. 데이터 변환 필요성 확인: 로그 변환, 스케일링, 또는 표준화를 적용할지 결정.

EDA는 데이터를 이해하고 정제하는 데 있어 가장 중요한 단계이며, 모델링 성능의 기반을 다지는 핵심 과정입니다.