티스토리 뷰
데이터 분석 프로젝트에서 성공적인 결과를 얻기 위해서는 올바른 **데이터 탐색(Exploratory Data Analysis, EDA)**과 전처리가 필수적입니다. 이 단계는 데이터를 이해하고, 모델링을 위한 준비 작업을 하는 핵심 과정입니다. 이번 포스팅에서는 데이터를 탐색하고 시각화하는 방법, 그리고 데이터 전처리 과정에 대해 알아보겠습니다.
1. 데이터 탐색(EDA)의 중요성
**데이터 탐색(Exploratory Data Analysis, EDA)**는 수집된 데이터를 분석하기 전에 기본적인 통계 정보를 파악하고, 데이터의 분포와 관계를 탐구하는 과정입니다. 이를 통해 데이터를 더 깊이 이해하고, 분석에 필요한 인사이트를 도출할 수 있습니다.
1.1 데이터 구조 이해
데이터 탐색의 첫 단계는 데이터의 구조와 형식을 이해하는 것입니다. 데이터가 어떤 형식으로 저장되어 있는지, 각 열(특성)의 데이터 타입이 무엇인지 확인하는 작업은 매우 중요합니다.
- 예시 코드: Pandas를 사용한 데이터 구조 탐색
import pandas as pd
# 데이터 불러오기
df = pd.read_csv('data.csv')
# 데이터 구조 확인
print(df.head()) # 데이터 상위 5개 확인
print(df.info()) # 데이터 형식과 결측치 확인
print(df.describe()) # 수치형 데이터 통계 요약
1.2 기초 통계 확인
기초 통계량을 확인함으로써 데이터의 전반적인 분포와 특성을 이해할 수 있습니다. 평균, 중앙값, 분산, 표준편차 등 기술 통계를 통해 각 특성의 기본적인 정보를 얻고, 이상치나 특이점을 탐지할 수 있습니다.
- 통계적 요약:
- 평균(mean): 데이터의 중심값.
- 중앙값(median): 데이터의 중간값, 이상치에 영향을 덜 받음.
- 분산 및 표준편차(variance, std): 데이터의 퍼짐 정도를 나타냄.
2. 데이터 시각화를 통한 인사이트 도출
데이터를 시각화하면 숫자로 표현된 데이터를 눈으로 쉽게 이해할 수 있게 되며, 숨겨진 패턴이나 이상치를 발견하는 데 도움을 줍니다. 다양한 시각화 기법을 활용하여 데이터를 시각적으로 표현할 수 있습니다.
2.1 데이터 분포 확인
데이터의 분포를 시각화하는 것은 데이터 탐색의 기본입니다. 특성별 데이터의 분포를 파악하여, 정규성 여부나 편향된 데이터가 있는지 확인할 수 있습니다.
- 히스토그램: 수치형 데이터의 분포를 확인하기 위한 그래프.
import pandas as pd
# 데이터 불러오기
df = pd.read_csv('data.csv')
# 데이터 구조 확인
print(df.head()) # 데이터 상위 5개 확인
print(df.info()) # 데이터 형식과 결측치 확인
print(df.describe()) # 수치형 데이터 통계 요약
2.2 변수 간 상관관계 파악
상관관계 분석을 통해 변수 간 관계를 파악하고, 다중공선성 문제를 해결할 수 있습니다. 상관관계가 높은 변수는 모델에 불필요한 중복 정보를 제공할 수 있으므로 주의해야 합니다.
- 상관 행렬 및 히트맵:
import seaborn as sns
# 상관 행렬 계산 및 시각화
corr_matrix = df.corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
2.3 범주형 변수 시각화
범주형 변수는 막대 그래프 등을 통해 각 범주의 분포를 확인할 수 있습니다. 이를 통해 각 범주 간 비율 차이를 한눈에 파악할 수 있습니다.
- 범주형 변수 시각화 예시:
sns.countplot(x='category_feature', data=df)
plt.title('Category Feature Distribution')
plt.show()
3. 데이터 전처리(Preprocessing)
데이터 전처리는 모델링을 시작하기 전에 데이터를 정제하고 준비하는 과정입니다. 이 단계에서 데이터를 깨끗하게 정리함으로써 모델이 더 정확한 예측을 할 수 있도록 도와줍니다.
3.1 결측치 처리
데이터에는 흔히 **결측치(missing value)**가 존재할 수 있으며, 이를 적절히 처리하지 않으면 모델 성능에 부정적인 영향을 미칠 수 있습니다. 결측치 처리는 데이터 분석의 기본 중 하나로, 데이터를 제거하거나 적절한 값으로 대체할 수 있습니다.
-
- 결측치 제거: dropna()
- 결측치 대체: fillna()를 사용하여 평균값, 중앙값, 또는 최빈값으로 대체.
- 결측치 처리 방법:
# 결측치 제거
df_cleaned = df.dropna()
# 결측치 대체 (예: 평균값으로 대체)
df['feature'] = df['feature'].fillna(df['feature'].mean())
3.2 이상치 탐지 및 제거
이상치는 데이터의 일반적인 패턴에서 벗어난 값들로, 이를 제거하거나 처리하지 않으면 모델이 잘못 학습될 수 있습니다. 이상치는 **박스 플롯(Box Plot)**이나 **Z-점수(Z-score)**를 이용해 탐지할 수 있습니다.
- 이상치 탐지: 박스 플롯을 사용한 이상치 탐지 예시.
sns.boxplot(x=df['feature'])
plt.title('Boxplot of Feature')
plt.show()
3.3 데이터 정규화 및 스케일링
**정규화(Normalization)**와 **스케일링(Scaling)**은 변수 간의 값의 범위를 조정하는 작업입니다. 각 변수의 스케일이 다르면 모델이 특정 변수에 과도하게 의존할 수 있기 때문에, 이를 방지하기 위해 데이터를 일정한 범위로 변환하는 것이 중요합니다.
- MinMaxScaler: 데이터 값을 0과 1 사이로 변환.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df)
- StandardScaler: 평균을 0으로, 표준편차를 1로 변환.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
3.4 범주형 데이터 인코딩
머신러닝 모델은 주로 숫자형 데이터를 다루기 때문에, 범주형 데이터를 숫자형으로 변환하는 작업이 필요합니다. 주로 **원-핫 인코딩(One-Hot Encoding)**을 사용하여 범주형 변수를 변환합니다.
- 원-핫 인코딩 예시:
df_encoded = pd.get_dummies(df, columns=['category_feature'])
3.5 데이터 샘플링
데이터 불균형을 해결하기 위해 오버샘플링(SMOTE) 또는 언더샘플링을 사용해 균형을 맞춰줍니다.
4. 결론
데이터 탐색, 시각화, 전처리는 데이터 분석에서 매우 중요한 단계입니다. 데이터를 깊이 이해하고, 깨끗하게 정제함으로써 모델이 정확하게 학습할 수 있는 기반을 마련하게 됩니다. 이 과정을 제대로 수행하면, 더 나은 예측 결과를 얻을 수 있으며, 분석 과정에서 발생할 수 있는 많은 오류를 방지할 수 있습니다.
다음 포스팅에서는 모델링 과정에 대해 다뤄볼 예정이니 기대해 주세요! 😊
'AI > 머신러닝' 카테고리의 다른 글
[머신러닝] 트리 모델, 배깅과 부스팅 (0) | 2024.12.01 |
---|---|
[데이터분석] 머신러닝 모델에서 이상치(Outlier)를 다루는 방법 (6) | 2024.10.06 |
[데이터분석] Feature Selection과 Feature Engineering 가이드 (1) | 2024.10.06 |
[데이터분석] 데이터 수집 가이드 (1) | 2024.10.05 |
[데이터분석] 데이터 분석 싸이클 (0) | 2024.10.05 |
- Total
- Today
- Yesterday
- 30분
- IH
- 습관
- Ai
- 영어회화
- ChatGPT
- 기초
- 다이어트
- llm
- 실기
- C언어
- opic
- 운동
- 미라클모닝
- 오블완
- 아침운동
- 스크랩
- 티스토리챌린지
- 오픽
- 루틴
- 경제
- 고득점 Kit
- 줄넘기
- Python
- 프로그래머스
- 갓생
- 아침
- SQL
- 뉴스
- 빅데이터 분석기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |