데이터 전처리

이예나·2026년 9월 23일

데이터 분석-> 실행할 코드

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

맥 애플 고딕 설정

plt.rcParams['font.family'] = 'AppleGothic'
plt.rcParams['axes.unicode_minus'] = False # 마이너스 기호 깨짐 방지

도수
각 계급에 속하는 변량의 개수를

도수 분포표
주어진 자료를 계급별로 나눈 뒤 각 계급에 속하는 도수 및 상대도수를 조사한 표

산술 평균(Mean)
변량의 합을 변량의 수로 나눈 값

분산(VAriance)
이상치를 구하기 위해 평균으로부터 얼마나 떨어져 있는지 알아내기 위한 값

  • 절대값으로 구한다
  • 모든 편차의 제곱을 하고 그 합을 평균을 낸다

표준 편차(Standard deviation)
분산의 제곱근이며, 관측된 변량의 흩어진 정로를 하나의 수치로 나타내는 통계량

데이터 전처리

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

박스 플롯

  • 이상치 탐색-> 시각화 차트
  • 분위수
    -> 제1사분위수 (Q1): 상자의 밑변(위치), 데이터의 25%
    -> 제2사분위수 (중앙값, Q2): 전체 데이터의 50%
    -> 제3사분위수 (Q3): 상자의 윗변(위치), 데이터의 75%.
    -> IQR (사분위수 범위): Q3 - Q1 값, 상자의 크기
    -> 수염 (Whiskers): 상자 끝에서 1.5 × IQR 범위 내의 최솟값과 최댓값까지 뻗은 선입니다

이상치 계산 공식

  • 아래 이상치 공식 : Q1 - (1.5 * IQR)
  • 위 이상치 공식 : Q3 + (1.5 * IQR)

이상치 처리 방법
1. 그대로 둔다
2. 값 제거한다

결측치 처리 방법
결측치 : NaN , Null 값 - 비어있는 값
-> 평균값, 최빈값, 중앙값 으로 대체
1) 평균값 : .mean()
2) 최빈값 : .mode()
3) 중간값 : .median()

중복값
1. df.duplicated() : 중복이 생기면 True로 표시
- duplicated().sum() :중복값이 몇개있는지 확인
2. df.drop_duplicates() : 중복값 제거
- (subset=["A", "B"]) : 괄호 안에 이렇게 추가로 넣으면 "A"와 "B"를 기준으로 중복값 설정

.boxplot() : 박스 플롯 보여주는 코드

1 단계:

운영체제가 제공하는 기능을 파이썬 코드에서 사용할 수 있도록 os 모듈을 불러오는 명령어  = import os

import os 코드를 입력하고

경로 파일 넣기

base_path = r"경로"
file_name = r"파일이름(.csv)"
file_path = os.path.join(base_path, file_name)

2단계: 각 컬럼 타입의 계획 수립

id: int - 분류형
name: str - 분류형
age: float -> int - 수치형
gender: str - 분류형
city: str - 분류형
salary: int - 수치형

3단걔: 이상치, 결측치, 중복값을 확인

  • 전체 결측치 존재 여부 확인 : .isnull() 또는 .isna()
    -> 결측치면 True, 아니면 False 반환
    	isna().sum() : 칼럼별 결측치 개수 합계 확인 
    	duplicated(suubset="칼럼이름들").sum  : 중복 데이터 찾기

4단계: 결측치 제거
우형 파악-> 수치형 , 분류형

  • 수치형 데이터
    -> 중앙값(median) 대체 가능 , ( 평균 구할 수 있음xxx , 최빈값은 사용 xxx)
  • 분류형 데이터
    -> 최빈값(mode), 새로운 컬럼 생성
    	결측치 채우는 메서드 : fillna
    astype(int) : 정수로 형 변환

5단계 : 이상치 대체 또는 제거

quantile() 
: 전체 데이터를 크기 순서대로 정렬한 뒤, 이를 일정한 비율이나 구간으로 나누어 주는 기준이 되는 수치

IQR = Q3 - Q1
  • 이상치 판단 : Q3 + (1.5 * IQR) = 이상치 기준

1) Q1(25% 지점)과 Q3(75% 지점) 계산 :

  • Q1 = df['컬럼명'].quantile(0.25)
    Q3 = df['['컬럼명'].quantile(0.75)
    IQR = Q3 - Q1

2) 정상범위 상한선 설정 :

  • lower_bound = Q1 - 1.5 IQR
    upper_bound = Q3 + 1.5
    IQR

3)정상 범위 안에 있는 데이터만 필터링 :

(필터링해서 새 데이터프레임으로 저장)
  • df_clean = df[(df['컬럼명'] >= lower_bound) & (df['컬럼명'] <= upper_bound)]

4) 계선을 넘어간 값들만 다른 값으로 바꾸어 채움 :

  • import numpy as np

    	(1. 상하한선을 벗어난 값을 결측치(NaN)로 변경)
  • df['컬럼명'] = np.where((df['컬럼명'] < lower_bound) | (df['컬럼명'] > upper_bound), np.nan, df['컬럼명'])

    	(2. 결측치가 된 이상치를 중앙값(Median)으로 채우기)
  • median_value = df['컬럼명'].median()
    df['컬럼명'] = df['컬럼명'].fillna(median_value)

    	(lower_bound보다 작은 값->lower_bound/ upper_bound보다 큰 값->upper_bound 고정)
  • df['컬럼명'] = df['컬럼명'].clip(lower=lower_bound, upper=upper_bound)

    	df_copy = df.copy() : 데이터 복사 
drop_duplicates : 중복값 지워주는 메서드 
.reset_index(drop=True)   : 인덱스 재설정 

0개의 댓글