onehaut_backend / scripts /subsample.py
alexoh2020's picture
AI attributions updated
315053a
Raw
History Blame Contribute Delete
2.39 kB
# AI-assisted (Cursor) -- https://cursor.com
"""Subsample the H&M dataset to a manageable size for development."""
import pandas as pd
from pathlib import Path
def subsample(
raw_dir: str = "data/raw",
out_dir: str = "data/processed",
min_customer_purchases: int = 15,
min_article_purchases: int = 50,
start_date: str = "2020-08-01",
):
raw_dir = Path(raw_dir)
out_dir = Path(out_dir)
out_dir.mkdir(parents=True, exist_ok=True)
print("Loading transactions...")
transactions = pd.read_csv(
raw_dir / "transactions_train.csv", dtype={"article_id": str}
)
transactions["t_dat"] = pd.to_datetime(transactions["t_dat"])
# Keep only recent transactions
recent = transactions[transactions["t_dat"] >= start_date].copy()
print(f"After date filter ({start_date}): {len(recent):,} transactions")
# Keep active customers
customer_counts = recent.groupby("customer_id").size()
active_customers = customer_counts[customer_counts >= min_customer_purchases].index
recent = recent[recent["customer_id"].isin(active_customers)]
print(f"After customer filter (>={min_customer_purchases}): {len(recent):,} transactions")
# Keep popular articles
article_counts = recent.groupby("article_id").size()
popular_articles = article_counts[article_counts >= min_article_purchases].index
recent = recent[recent["article_id"].isin(popular_articles)]
print(f"After article filter (>={min_article_purchases}): {len(recent):,} transactions")
# Save subset
recent.to_csv(out_dir / "transactions_subset.csv", index=False)
# Also subset articles and customers to match
articles = pd.read_csv(raw_dir / "articles.csv", dtype={"article_id": str})
customers = pd.read_csv(raw_dir / "customers.csv")
articles_sub = articles[articles["article_id"].isin(recent["article_id"].unique())]
customers_sub = customers[customers["customer_id"].isin(recent["customer_id"].unique())]
articles_sub.to_csv(out_dir / "articles_subset.csv", index=False)
customers_sub.to_csv(out_dir / "customers_subset.csv", index=False)
print(
f"\nSubset saved to {out_dir}/:\n"
f" {len(recent):,} transactions\n"
f" {recent['customer_id'].nunique():,} customers\n"
f" {recent['article_id'].nunique():,} articles"
)
if __name__ == "__main__":
subsample()