파이썬
Python2. 특성 엔지니어링(Feature Engineering): 데이터 필터링 (코드 정리)
dltmfdltmf
2025. 2. 18. 14:14
1. 데이터 필터링 (조건에 맞는 데이터 추출)
1) 특정 조건에 맞는 행 필터링
df_filtered = df[df["구매액"] > 50000] # 구매액 5만 원 초과 고객만 선택
2) 여러 조건 필터링 (AND 조건)
df_filtered = df[(df["연령대"] == "30대") & (df["성별"] == "여성")] # 30대 여성만 선택
3) 여러 조건 필터링 (OR 조건)
df_filtered = df[(df["카테고리"] == "패션") | (df["카테고리"] == "뷰티")] # 패션 또는 뷰티 카테고리 구매자만 선택
4) 특정 컬럼 값이 리스트에 포함된 경우
df_filtered = df[df["회원등급"].isin(["VIP", "VVIP"])] # VIP, VVIP 회원만 선택
5) 특정 컬럼 값이 없는 경우 (결측치 제거)
df_filtered = df.dropna(subset=["구매액"]) # 구매액이 없는 데이터 삭제
2. 특정 컬럼 선택
1) 특정 컬럼만 선택
df_subset = df[["고객ID", "구매액", "구매일"]]
2) 특정 컬럼 제외
df_subset = df.drop(columns=["주소", "전화번호"]) # 개인정보 관련 컬럼 제거
3) 컬럼 이름 변경
df.rename(columns={"구매액": "Purchase_Amount", "구매일": "Purchase_Date"}, inplace=True)
3. 데이터 그룹화
[기본 그룹화]
1) 특정 컬럼 기준으로 그룹화 후 합계 (sum())
df_grouped = df.groupby("카테고리")["구매액"].sum()
print(df_grouped)
2) 특정 컬럼 기준으로 그룹화 후 개수 (count())
df_grouped = df.groupby("카테고리")["고객ID"].count()
print(df_grouped)
- 각 카테고리에서 몇 건의 주문이 발생했는지 확인
3) 여러 컬럼 그룹화 (두 개 이상의 컬럼으로 그룹화)
df_grouped = df.groupby(["회원등급", "카테고리"])["구매액"].sum()
print(df_grouped)
- 회원 등급별, 카테고리별 총 구매액 분석
4) 그룹별 평균 (mean())
df_grouped = df.groupby("카테고리")["구매액"].mean()
5) 그룹별 최대값 (max())
df_grouped = df.groupby("회원등급")["구매액"].max()
6) 그룹별 여러 개의 값 요약 (agg())
df_grouped = df.groupby("카테고리")["구매액"].agg(["sum", "mean", "max"])
print(df_grouped)
- 카테고리별 총합, 평균, 최대값 분석
[정렬과 상위 데이터 추출]
1) 구매액이 높은 순서로 정렬
df_sorted = df.sort_values(by="구매액", ascending=False)
2) 가장 많이 구매한 고객 Top 5
df_top_customers = df.groupby("고객ID")["구매액"].sum().sort_values(ascending=False).head(5)
3) 가장 많이 팔린 카테고리 Top 3
df_top_categories = df.groupby("카테고리")["구매액"].sum().nlargest(3)
[피처 엔지니어링_기존 데이터 가공하여 새 인사이트 얻을 수 있는 변수 추가]
1) 만족도 점수 기반으로 고객 그룹화
# 제품 만족도 점수가 4 이상이면 "High", 그렇지 않으면 "Low"
df["Satisfaction Level"] = df["Product Satisfaction"].apply(lambda x: "High" if x >= 0.8 else "Low")
print(df)
4. value_counts()로 빠르게 데이터 집계
1) 특정 컬럼 값 개수 세기
df["회원등급"].value_counts()
2) 상위 5개만 출력
df["카테고리"].value_counts().head(5)
5. 날짜 데이터 다루기
1) 날짜 컬럼 변환
df["구매일"] = pd.to_datetime(df["구매일"])
2) 특정 연도/월 필터링
df_filtered = df[df["구매일"].dt.year == 2023] # 2023년 데이터만 선택
df_filtered = df[df["구매일"].dt.month == 12] # 12월 데이터만 선택
3) 날짜별 집계
df.groupby(df["구매일"].dt.date)["구매액"].sum()
6. 특정 조건으로 데이터 정렬
1) 구매액 높은 순으로 정렬
df_sorted = df.sort_values(by="구매액", ascending=False)
2) 회원 등급별, 구매액 높은 순 정렬
df_sorted = df.sort_values(by=["회원등급", "구매액"], ascending=[True, False])