✔ 기존 수치 데이터를 변형하여 새로운 의미를 가진 변수를 생성
연령대 생성 → 나이를 10대, 20대, 30대 등 범주형 데이터로 변환
누적합 → 판매량을 날짜별로 누적하여 누적 매출 생성
평균 대비 차이 → 개별 값이 평균보다 얼마나 높은지 계산
로그 변환 → 데이터의 분포가 치우친 경우 로그 스케일로 변환하여 정규화
import pandas as pd
import numpy as np
# 샘플 데이터 생성
df = pd.DataFrame({
'이름': ['철수', '영희', '민수', '지수'],
'나이': [23, 35, 45, 52],
'월급': [250, 400, 600, 700]
})
# 연령대 변수 생성
df['연령대'] = pd.cut(df['나이'], bins=[0, 30, 40, 50, 100],
labels=['20대', '30대', '40대', '50대 이상'])
# 누적 월급 계산
df['누적월급'] = df['월급'].cumsum()
# 평균 대비 차이 계산
df['월급_평균차'] = df['월급'] - df['월급'].mean()
# 로그 변환 (정규화)
df['월급_로그'] = np.log1p(df['월급'])
print(df)
✔ 날짜 데이터를 가공하여 시간 관련 패턴을 반영
연도, 월, 요일, 분기 추출 → "2023-05-20" → 연도: 2023, 월: 5, 요일: Saturday
주말 여부 추가 → "2023-05-20" → 주말 여부: 1 (토, 일)
날짜 차이 계산 → "가입일"과 "구매일"의 차이 계산하여 고객 활동 기간 생성
df = pd.DataFrame({
'이름': ['철수', '영희', '민수', '지수'],
'구매일': pd.to_datetime(['2023-01-15', '2023-05-20', '2023-08-10', '2023-12-25'])
})
# 날짜 정보 파생
df['연도'] = df['구매일'].dt.year
df['월'] = df['구매일'].dt.month
df['요일'] = df['구매일'].dt.day_name()
df['주말여부'] = df['요일'].isin(['Saturday', 'Sunday']).astype(int)
df['분기'] = df['구매일'].dt.quarter
print(df)
✔ 문자 데이터를 가공하여 모델이 이해할 수 있도록 변환
성별 변환 → "남" → 0, "여" → 1 (이진 변환)
주소에서 지역 정보 추출 → "서울 강남구" → "서울", "강남구"
텍스트 길이 계산 → 리뷰에서 단어 개수, 글자 개수 등을 추출
df = pd.DataFrame({
'이름': ['철수', '영희', '민수', '지수'],
'성별': ['남', '여', '남', '여'],
'주소': ['서울 강남구', '부산 해운대구', '서울 종로구', '대전 서구']
})
# 성별을 숫자로 변환
df['성별_코드'] = df['성별'].map({'남': 0, '여': 1})
# 주소에서 도시와 구 추출
df['도시'] = df['주소'].str.split().str[0]
df['구'] = df['주소'].str.split().str[1]
print(df)
✔ 두 개 이상의 변수 조합을 활용하여 새로운 변수 생성
1인당 소비 금액 → 총 매출 / 고객 수
판매량 대비 반품율 → 반품 개수 / 판매량
평균 리뷰 점수와 리뷰 개수 조합 → 리뷰 점수 * 리뷰 개수
import pandas as pd
import numpy as np
# 샘플 데이터 생성
df = pd.DataFrame({
'이름': ['철수', '영희', '민수', '지수'],
'총매출': [10000, 20000, 30000, 40000],
'고객수': [100, 150, 200, 250],
'광고비': [500, 700, 1000, 1500],
'리뷰점수': [4.2, 4.5, 3.8, 4.0],
'리뷰개수': [30, 50, 20, 40]
})
df['1인당 소비금액'] = df['총매출'] / df['고객수'] # 총매출 대비 고객 1명당 평균 소비금액
df['광고효과'] = df['총매출'] / df['광고비'] # 광고비 대비 매출 효과
df['매출 증가율'] = df['총매출'].pct_change().fillna(0) # 전월 대비 매출 증가율
df['리뷰 점수 대비 차이'] = df['리뷰점수'] - df['리뷰점수'].mean() # 평균 대비 리뷰 점수 차이
df['리뷰 품질 점수'] = df['리뷰점수'] * df['리뷰개수'] # 리뷰 점수 × 리뷰 개수 (리뷰의 신뢰도 반영)
df
'파이썬' 카테고리의 다른 글
11. 시각화 (0) | 2025.03.18 |
---|---|
10. 탐색적 데이터 분석 (0) | 2025.03.18 |
8. 데이터 병합과 추가 (0) | 2025.03.18 |
7. 데이터전처리 (0) | 2025.03.18 |
6. 데이터 전처리 (결측치와 이상치) (0) | 2025.03.17 |