ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : 데이터 변환
    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")

     

     



     

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

    살려줘~

     

     

     

Designed by Tistory.