-
[멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : 데이터 변환TIL 2025. 2. 19. 22:29
학습목표- 데이터 변환
- 데이터 표준화 및 정규화
1. 데이터 변환
API 통신 중 발생하는 결측치는 데이터베이스에 다음과 같은 방식으로 저장될 수 있다.
- NULL 값으로 저장됨 (null 응답).
- 빈 문자열로 저장됨 ("" 응답).
- 0 또는 기본값으로 저장됨.
- 잘못된 데이터 형식으로 저장됨 (예: int 필드에 string).
- 필드 자체가 누락되어 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")
점점 기록하기가 버거워진다..
살려줘~
'TIL' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : 그래프 시각화 with Seaborn (1) 2025.02.21 [멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : 데이터 구조 파악(EDA) (0) 2025.02.21 [멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : 설문조사 (1) 2025.02.19 [멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : API (1) 2025.02.17 [멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터 분석 개론 : Pandas - SQL 연동 (2) (1) 2025.02.14