TIL

[멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : 데이터 변환

•ɞ• 2025. 2. 19. 22:29

 
 
학습목표

  • 데이터 변환
  • 데이터 표준화 및 정규화

 
 

1. 데이터 변환

API 통신 중 발생하는 결측치는 데이터베이스에 다음과 같은 방식으로 저장될 수 있다.

  1. NULL 값으로 저장됨 (null 응답).
  2. 빈 문자열로 저장됨 ("" 응답).
  3. 0 또는 기본값으로 저장됨.
  4. 잘못된 데이터 형식으로 저장됨 (예: int 필드에 string).
  5. 필드 자체가 누락되어 NULL로 저장되거나 기본값으로 채워짐.

데이터베이스에서 결측치를 처리할 때는 다음과 같은 방법을 고려할 수 있다.

  • NULL 값 변환: COALESCE() 함수를 사용하여 NULL 값을 기본값으로 변환.
  • 데이터 타입 검증: API 응답 데이터를 저장하기 전에 데이터 타입을 변환 또는 검증.
  • 기본값 설정: DEFAULT 값을 설정하여 필드가 NULL이 아닐 때 기본값을 자동 삽입.

 

1) 데이터 정제 (Data Cleaning)

결측치 확인

import pandas as pd
import numpy as np

data = {
    "User ID": [1, 2, 3, 4, 5],
    "Ad Clicks": [10, np.nan, 25, 30, np.nan],  # 일부 결측치 포함
    "Conversion Rate": [0.05, 0.07, np.nan, 0.12, 0.09],  # 일부 결측치 포함
    "Revenue": [1000, 2000, np.nan, 4000, 5000]  # 일부 결측치 포함
}

# 데이터프레임 생성
df = pd.DataFrame(data)

# 결측치 확인 코드
missing_values = df.isnull().sum()

# 데이터 및 결측치 개수 출력
print("Example Dataset:")
print(df)
print("\nMissing Values Count:")
print(missing_values)

 

결측치 대체

  • 평균(Mean) 대체: 데이터의 전체적인 대표값을 유지, 이상치가 적고 정규분포를 따르는 경우.
  • 중앙값(Median) 대체: 이상치(극단값)의 영향을 받지 않음, 이상치가 많은 경우.
df.fillna(df.mean(), inplace=True) #평균으로 대체
df.fillna(df.median(), inplace=True) #중간값으로 대체

 

 

2) 데이터 타입 변환 (Data Type Conversion)

# 문자열(Yes/No)을 숫자(1/0)로 변환
df["Ad Viewed"] = ["Yes", "No", "Yes", "No", "Yes"]
df["Ad Viewed"] = df["Ad Viewed"].map({"Yes": 1, "No": 0})

# 문자열을 날짜 데이터로 변환
df["Survey Date"] = pd.to_datetime(["2024-02-01", "2024-02-02", "2024-02-03", "2024-02-04", "2024-02-05"])

# 로그 변환: 값이 극단적으로 큰 경우 데이터 안정화를 위함
df["Ad Cost"] = [100, 5000, 2000, 10000, 3000]
df["Log Ad Cost"] = np.log1p(df["Ad Cost"]) # 0 방지 위해 1 추가

 

 

3) 범주형 데이터 변환 (Categorical Encoding)

data = {"Campaign": ["YouTube Ad", "SNS Ad", "Search Ad", "Email Marketing", "SNS Ad"]}

# 레이블 인코딩 (범주형 데이터를 숫자로 변환)
le = LabelEncoder()
df["Campaign_Encoded"] = le.fit_transform(df["Campaign"])

# 원-핫 인코딩 적용 (범주형 데이터를 여러 개의 이진(0/1) 컬럼으로 변환)
df_one_hot = pd.get_dummies(df, columns=["Campaign"])

 

 

4) 데이터 스케일링 (Data Scaling)

연속형 변수를 모델 학습과 비교하기 위해 정규화(Normalization) 또는 표준화(Standardization) 적용.

  • 정규화: 0~1 범위로 변환, 값의 범위를 일정하게 맞춰야 하는 경우 (딥러닝, 이미지 데이터 등)
  • 표준화: 평균 0, 표준편차 1로 변환, 데이터의 분포가 중요하거나 이상치 영향을 줄이고 싶은 경우 (통계 분석, 선형 모델 등)
# 정규화(Normalization)
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df[["Ad Clicks", "Conversion Rate"]] = scaler.fit_transform(df[["Ad Clicks", "Conversion Rate"]])

# 표준화(Standardization)
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df[["Ad Clicks", "Conversion Rate"]] = scaler.fit_transform(df[["Ad Clicks", "Conversion Rate"]])

정규화 후 최솟값(3)이 0이 되고 최댓값(5)이 1이 됨

 

5) 피처 엔지니어링 (Feature Engineering)

기존 데이터를 가공하여 새로운 인사이트를 얻을 수 있는 변수를 추가하는 것.

# 제품 만족도 점수가 4 이상이면 "High", 그렇지 않으면 "Low"로 고객 그룹화
df["Satisfaction Level"] = df["Product Satisfaction"].apply(lambda x: "High" if x >= 0.8 else "Low")

 

 



 

점점 기록하기가 버거워진다..

살려줘~