<aside> <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/83c75a39-3aba-4ba4-a792-7aefe4b07895/94dbaed9-349c-449d-bc43-25de3ae5a780/SpartaIconScale9.png" alt="https://prod-files-secure.s3.us-west-2.amazonaws.com/83c75a39-3aba-4ba4-a792-7aefe4b07895/94dbaed9-349c-449d-bc43-25de3ae5a780/SpartaIconScale9.png" width="40px" /> 지금까지 배운 내용을 실습 문제로 조~금 더 익숙해져 봅시다!
문제를 풀다 막히는 부분이 있다면 강의와 검색을 통해 천천히 해결해 보세요!
</aside>
<aside> <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/83c75a39-3aba-4ba4-a792-7aefe4b07895/393cd135-1603-4797-8fa6-42abcfedd782/SpartaIconS24.png" alt="https://prod-files-secure.s3.us-west-2.amazonaws.com/83c75a39-3aba-4ba4-a792-7aefe4b07895/393cd135-1603-4797-8fa6-42abcfedd782/SpartaIconS24.png" width="40px" /> 목차
</aside>
<aside> 📚 먼저 실습을 위한 데이터 셋을 생성하겠습니다! 아래 코드를 코드 작성 환경에 붙여넣고 실행해 주세요.
</aside>
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import random
# 데이터 크기 설정
num_samples = 1000
# 랜덤 시드 설정
np.random.seed(42)
# 랜덤 데이터 생성
user_ids = np.arange(1, num_samples + 1)
purchase_dates = [datetime(2023, 1, 1) + timedelta(days=np.random.randint(0, 60)) for _ in range(num_samples)]
product_ids = np.random.randint(100, 200, size=num_samples)
categories = np.random.choice(['Electronics', 'Books', 'Clothing', 'Home', 'Toys'], size=num_samples)
prices = np.round(np.random.uniform(5, 300, size=num_samples), 2)
quantities = np.random.randint(1, 6, size=num_samples)
total_spent = prices * quantities
ages = np.random.randint(18, 65, size=num_samples)
genders = np.random.choice(['M', 'F'], size=num_samples)
locations = np.random.choice(['New York', 'Los Angeles', 'Chicago', 'San Francisco', 'Houston', 'Dallas', 'Seattle', 'Austin', 'Miami', 'Boston'], size=num_samples)
membership_levels = np.random.choice(['Bronze', 'Silver', 'Gold', 'Platinum'], size=num_samples)
ad_spends = np.round(np.random.uniform(5, 50, size=num_samples), 2)
visit_durations = np.random.randint(10, 120, size=num_samples)
# 데이터프레임 생성
data = {
'user_id': user_ids,
'purchase_date': purchase_dates,
'product_id': product_ids,
'category': categories,
'price': prices,
'quantity': quantities,
'total_spent': total_spent,
'age': ages,
'gender': genders,
'location': locations,
'membership_level': membership_levels,
'ad_spend': ad_spends,
'visit_duration': visit_durations
}
# 데이터프레임 완성
df = pd.DataFrame(data)
# 결측치 추가
nan_indices = np.random.choice(df.index, size=50, replace=False)
df.loc[nan_indices, 'price'] = np.nan
df.loc[nan_indices[:25], 'quantity'] = np.nan
# 중복 데이터 추가
duplicate_indices = np.random.choice(df.index, size=20, replace=False)
duplicates = df.loc[duplicate_indices]
df = pd.concat([df, duplicates], ignore_index=True)
# 아웃라이어 추가
outlier_indices = np.random.choice(df.index, size=10, replace=False)
df.loc[outlier_indices, 'price'] = df['price'] * 10
df.loc[outlier_indices, 'total_spent'] = df['total_spent'] * 10
# CSV 파일로 저장
df.to_csv('./user_purchase_data.csv', index=False)
$\color{#2b2b2b}\normalsize\textsf{결측치 처리 }\color{#FFD3CA}\rule{289px}{5px}$
<aside>
1️⃣ user_purchase_data.csv
파일에는 결측치가 포함되어 있습니다.
모든 결측치를 확인하고, 결측치가 있는 행을 제거하세요.
</aside>
$\color{#2b2b2b}\normalsize\textsf{데이터 타입 변환 }\color{#FFD3CA}\rule{289px}{5px}$
<aside>
2️⃣ purchase_date
컬럼의 데이터 타입을 문자열에서 datetime으로 변환하고, total_spent
컬럼의 데이터 타입을 정수로 변환하세요.
code </aside>
정답
$\color{#2b2b2b}\normalsize\textsf{중복 데이터 제거 }\color{#FFD3CA}\rule{289px}{5px}$
<aside>
3️⃣ 중복된 구매 데이터를 확인하고 제거하세요.
중복의 기준은 user_id
, purchase_date
, product_id
가 동일한 행으로 합니다.
</aside>