Developer's Development
3.2.4 [데이터 분석] 데이터 전처리 본문
변수 변환
데이터 분석에서 변수 변환은 기존의 데이터를 활용하여 새로운 변수를 생성하거나, 기존 변수를 재구성하는 과정을 의미한다.
이를 통해 데이터의 특성을 더욱 명확히 파악하고 분석의 효율성을 높일 수 있다.
- 파생변수
기존의 변수들을 조합하거나 연산하여 새롭게 만들어진 변수를 말한다.
이는 분석 목적에 맞게 데이터를 재구성하여 모델의 성능을 향상시키는 데 도움이 된다.
👉🏻 생성 방식 : 산술 연산을 통한 생성, 함수 적용, 조건문 활용
- 요약변수
데이터를 그룹화하여 특정 집단의 통계량(평균, 합계 등)을 나타내는 변수이다.
이는 전반적인 경향을 파악하거나 비교 분석할 때 유용하다.
- 기준점
데이터 분석에서 기준점은 비교나 평가의 기준이 되는 값을 의미한다.
이는 데이터의 상대적 위치나 변화를 파악하는 데 활용한다.
결측값 처리
결측값은 데이터 수집 과정에서 누락된 값을 의미하며, 분석 결과에 영향을 미칠 수 있으므로 적절한 처리가 필요하다.
- 결측값 처리 방법
👉🏻 삭제 방법 : 결측값이 있는 관측치를 제거한다.
👉🏻 대치 방법 : 결측값을 다른 값으로 대체한다.
1) 평균대치법 : 결측값을 해당 변수의 평균값으로 대체하는 방법
2) 단순확률대치법 : 결측값을 변수의 분포에 따라 무작위로 대체하는 방법
3) 다중대치법 : 결측값을 여러 번 대체하여 그 불확실성을 반영하는 방법
이상값 처리
이상값은 데이터 분포에서 멀리 떨어진 값으로, 분석 결과에 큰 영향을 미칠 수 있으므로 적절한 식별과 처리가 필요하다.
- 이상값 인식 방법
👉🏻 표준편차 활용 : 평균에서 ±3표준편차를 벗어나는 값을 이상값으로 간주한다.
👉🏻 사분위 범위(IQR) 활용 : 1사분위수와 3사분위수를 이용하여 이상값을 식별한다.
1) ESD/사분위 범위 활용
2) 산점도 그래프 활용
데이터 정규화
변수 간 단위 차이를 제거하여 분석의 효율성을 높이는 과정이다.
- 표준정규분포 Z-변환
표준정규분포는 평균이 0이고 분산(또는 표준편차 제곱)이 1인 정규분포를 말한다.
이는 확률 이론과 통계학에서 매우 중요한 역할을 하며, 다양한 통계 분석과 가설 검정에서 기본이 되는 분포이다.
👉🏻 Z-변환 : 데이터를 평균이 0이고 표준편차가 1인 정규분포로 변환하는 방법이다.
👉🏻 [0-1] 변환 : 데이터를 0과 1 사이의 값으로 스케일링하는 방법이다.


- 중심극한정리
표본의 크기가 충분히 크다면, 모수에 관계 없이 표본평균의 분포가 정규분포에 가까워진다는 이론이다.
실습
데이터 전처리
👉🏻 결측치 확인 및 처리
👉🏻 이상값 처리
👉🏻 중복값 처리
import numpy as np
import pandas as pd
df = pd.read_csv('./data/contacts.csv')
df.info() # 결측치와 데이터타입 확인
df.describe() # 중복값 확인(unique), 제일 많이 가지고 있는 데이터(top)과 빈도(freq) 확인
df[df['Name'] == '박철수']
df[df['Phone'] == '010-2345-6789']
df[df['Email'] == 'dahyun.jung@naver.com']

- 중복 데이터 처리
# df.duplicated(): 기본적으로 모든 컬럼 값이 같을 때 중복으로 간주
df.duplicated().sum() # np.int64(1)
# 결과가 1 = 2개의 행의 데이터가 중복 (row가 완벽히 일치하는 데이터)
# 결과가 2 = A라는 데이터가 3번 중복된 경우 or A라는 데이터가 2번 + B라는 데이터가 2번 중복된 경우
df[df.duplicated()]
# 특정 컬럼을 지정해 중복 데이터를 확인 가능
df[df.duplicated('Name')]
# 중복 데이터 제거
df = df.drop_duplicates().reset_index(drop=True) # drop=True: 제거된 행을 제외하고 인덱스를 새롭게 설정
- 결측치 처리
# 둘다 똑같은 기능을 하지만, 협업 시에는 하나로 통일하는 게 좋음
df.isna().sum()
df.isnull().sum()
# 대표값으로 결측치 대체
# - 평균값, 기본값, 최빈값, ...
df['Phone'] = df['Phone'].fillna('010-0000-0000') # 기본값
df.info() # Phone 컬럼 76 non-null 확인
print(df['Phone'].value_counts())
df['Phone'] = df['Phone'].fillna('010-2345-6789') # 최빈값
# df.dropna(): 결측치가 포함된 행 제거
# - how='all': 모든 셀이 결측치인 경우 행 제거
# - how='any': 결측치 셀을 하나라도 가지고 있으면 행 제거 (기본값)
df = df.dropna(how='all')
df.info()'데이터 분석과 머신러닝, 딥러닝 > 데이터 분석' 카테고리의 다른 글
| 3.2.5 [데이터 분석] 데이터 시각화 (1) | 2025.07.17 |
|---|---|
| 3.2.3 [데이터 분석] Pandas (13) | 2025.07.16 |
| 3.2.2 [데이터 분석] NumPy (3) | 2025.07.15 |
| 3.2.1 [데이터 분석] 개요 (2) | 2025.07.14 |