본문 바로가기
TIL _Today I Learned/2024.07

[DAY 8] Data Manipulation, Data Preprocessing

by gamdong2 2024. 7. 22.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.07.22

📕 학습 목록

  • 데이터 체크리스트
  • 데이터 전처리

 

📗 기억할 내용

1. 데이터 전처리 전 체크리스트

  • 데이터 형식 확인: 데이터 파일 형식 (CSV, Excel, JSON 등)과 데이터셋 구조(행, 열)를 확인
  • 데이터 유형 확인: 각 열의 데이터 유형(숫자형, 문자열형, 날짜형 등)을 확인하여 필요시 변환할 수 있도록 준비
  • 결측치 확인: 각 열의 결측치 개수와 분포를 확인하여 결측치 처리 전략을 세움
  • 이상치 확인: 이상치가 있는지 확인하고 데이터의 통계적 분포를 파악하여 처리 방법을 결정
  • 중복 데이터 확인: 중복된 행이 있는지 확인하여 불필요한 중복 데이터를 제거할지 여부를 결정
  • 데이터 정규화/스케일링 필요성 확인: 데이터 분석이나 모델 학습을 위해 정규화 또는 스케일링이 필요한 열이 있는지 점검

 

2. 데이터 전처리

1) 결측치 처리 (Missing Values Handling)

  • 결측치 확인
    • isnull() 및 sum() 함수로 각 열의 결측치 개수를 확인
data.isnull().sum()
  • 결측치 처리 방법
    • 결측치 제거: dropna() 함수를 사용하여 결측치가 포함된 행 또는 열을 삭제
    • 결측치 대체: 평균, 중앙값, 최빈값 등으로 결측치를 대체하여 데이터 손실을 최소화
# 결측치 제거
data_dropna = data.dropna()
data_dropna_column = data.dropna(subset=['A'])
# 결측치 대체
data_fill_mean = data.fillna(data.mean())      # 평균으로 대체
data_fill_median = data.fillna(data.median())  # 중앙값으로 대체
data_fill_mode = data.fillna(data.mode().iloc[0])  # 최빈값으로 대체

 

2) 이상치 처리 (Outliers Handling)

  • IQR (Interquartile Range): Q1(1사분위수)와 Q3(3사분위수)를 사용하여 IQR을 계산하고, 이를 기준으로 이상치를 식별 및 제거
Q1 = data['A'].quantile(0.25)
Q3 = data['A'].quantile(0.75)
IQR = Q3 - Q1
data_no_outliers = data[(data['A'] >= Q1 - 1.5 * IQR) & (data['A'] <= Q3 + 1.5 * IQR)]
  • Z-score: Z-score가 특정 기준을 초과하는 데이터를 이상치로 판단하여 제거
from scipy import stats
z_scores = stats.zscore(data['A'].dropna())
data_no_outliers = data[(z_scores < 3)]

 

3) 문자열 처리 (String Handling)

  • 대소문자 변환: str.lower()와 str.upper()로 문자열을 소문자 또는 대문자로 변환
data['D_lower'] = data['D'].str.lower()
data['D_upper'] = data['D'].str.upper()
  • 공백 제거: str.strip()를 사용하여 문자열의 양쪽 공백을 제거
data['D_trimmed'] = data['D'].str.strip()
  • 정규 표현식을 통한 문자열 정제: str.contains()를 사용하여 특정 패턴이 포함된 문자열을 확인하고, 정규 표현식으로 문자열을 정제
data['Valid_Emails'] = data['Emails'].str.contains(r'^[\w\.-]+@[\w\.-]+\.\w+$', regex=True)

 

 

 

📙 내일 일정

  • 데이터 전처리, 데이터 시각화

 

 

 

 

 

 

'TIL _Today I Learned > 2024.07' 카테고리의 다른 글

[DAY 10] Data Visualization  (0) 2024.07.24
[DAY 9] Data Preprocessing, Data Visualization  (0) 2024.07.23
[DAY 7] Data Manipulation  (0) 2024.07.19
[DAY 6] Python Crawling  (0) 2024.07.18
[DAY 5] Python Crawling  (0) 2024.07.17