Lab: Combine Datasets
Lab: Combine Datasets
Section titled “Lab: Combine Datasets”ในแล็บนี้คุณจะได้ข้อมูล 3 ตาราง และต้องรวมเข้าด้วยกันเพื่อตอบคำถามธุรกิจ
-
สร้างข้อมูล 3 ตาราง
import pandas as pdorders = 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": ["กรุงเทพ", "เชียงใหม่", "กรุงเทพ", "ภูเก็ต"]}) -
Merge ทั้ง 3 ตาราง เข้าด้วยกัน เพิ่ม column
total = price * qty -
ตอบคำถาม ด้วย groupby:
- ยอดขายรวมแต่ละหมวดหมู่เป็นเท่าไร?
- ลูกค้าคนไหนซื้อมากที่สุด (ตามยอดเงิน)?
- ภูมิภาคไหนมียอดขายสูงสุด?
-
สร้าง pivot table แสดง ยอดขายรวม แยกตาม region x category
-
แปลง pivot กลับเป็น long format ด้วย
.melt()
Show Solution
# Step 2: Mergemerged = 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 tablepivot = merged.pivot_table( values="total", index="region", columns="category", aggfunc="sum", fill_value=0)print(pivot)
# Step 5: Melt กลับเป็น longlong = pivot.reset_index().melt( id_vars=["region"], var_name="category", value_name="revenue")print(long)