Skip to content

Lab: Combine Datasets

ในแล็บนี้คุณจะได้ข้อมูล 3 ตาราง และต้องรวมเข้าด้วยกันเพื่อตอบคำถามธุรกิจ

  1. สร้างข้อมูล 3 ตาราง

    import pandas as pd
    orders = pd.DataFrame({
    "order_id": range(1, 9),
    "customer_id": ["C01", "C02", "C01", "C03", "C02", "C04", "C01", "C03"],
    "product_id": ["P001", "P002", "P003", "P001", "P001", "P002", "P003", "P003"],
    "qty": [2, 1, 3, 1, 2, 1, 1, 2],
    "order_date": pd.to_datetime(["2024-01-05", "2024-01-06", "2024-01-07",
    "2024-01-08", "2024-01-10", "2024-01-12", "2024-01-15", "2024-01-18"])
    })
    products = pd.DataFrame({
    "product_id": ["P001", "P002", "P003"],
    "name": ["เสื้อยืด", "กางเกง", "รองเท้า"],
    "price": [350, 590, 1200],
    "category": ["เสื้อผ้า", "เสื้อผ้า", "รองเท้า"]
    })
    customers = pd.DataFrame({
    "customer_id": ["C01", "C02", "C03", "C04"],
    "name": ["สมชาย", "สมหญิง", "สมศักดิ์", "สมศรี"],
    "region": ["กรุงเทพ", "เชียงใหม่", "กรุงเทพ", "ภูเก็ต"]
    })
  2. Merge ทั้ง 3 ตาราง เข้าด้วยกัน เพิ่ม column total = price * qty

  3. ตอบคำถาม ด้วย groupby:

    • ยอดขายรวมแต่ละหมวดหมู่เป็นเท่าไร?
    • ลูกค้าคนไหนซื้อมากที่สุด (ตามยอดเงิน)?
    • ภูมิภาคไหนมียอดขายสูงสุด?
  4. สร้าง pivot table แสดง ยอดขายรวม แยกตาม region x category

  5. แปลง pivot กลับเป็น long format ด้วย .melt()

Show Solution
# Step 2: Merge
merged = pd.merge(orders, products, on="product_id", how="left")
merged = pd.merge(merged, customers, on="customer_id", how="left",
suffixes=("_product", "_customer"))
merged["total"] = merged["price"] * merged["qty"]
# Step 3a: ยอดขายตามหมวดหมู่
cat_sales = merged.groupby("category").agg(
total_revenue=("total", "sum"),
order_count=("order_id", "count")
).reset_index()
print(cat_sales)
# Step 3b: ลูกค้าซื้อมากสุด
cust_sales = merged.groupby("name_customer").agg(
total_spent=("total", "sum")
).reset_index().sort_values("total_spent", ascending=False)
print(cust_sales)
# Step 3c: ภูมิภาคยอดขายสูงสุด
region_sales = merged.groupby("region").agg(
total_revenue=("total", "sum")
).reset_index().sort_values("total_revenue", ascending=False)
print(region_sales)
# Step 4: Pivot table
pivot = merged.pivot_table(
values="total", index="region", columns="category",
aggfunc="sum", fill_value=0
)
print(pivot)
# Step 5: Melt กลับเป็น long
long = pivot.reset_index().melt(
id_vars=["region"], var_name="category", value_name="revenue"
)
print(long)