Ngerteni
Nelusuri data sumber lan aturan bisnis sadurunge nemtokake carane produk utawa laporan nganggo data kuwi.
Solusi data
Pekerjaanku nyambungake ngresiki lan nyeragamake data karo transformasi SQL, API, lan dashboard—supaya tim bisa nganggo informasi sing konsisten kanggo produk lan keputusan.
Nelusuri data sumber lan aturan bisnis sadurunge nemtokake carane produk utawa laporan nganggo data kuwi.
Ngresiki lan nyeragamake record sumber nganggo Python lan SQL, kanthi aturan transformasi sing cetha.
Nyedhiyakake dataset siap analisis kanggo dashboard, laporan, lan fitur produk.
Inti
Pekerjaan data
Penyajian
Deployment
Project Bersama
Aku melu ngresiki lan nyeragamake data produk, transformasi SQL, lan nyedhiyakake API/dashboard bareng tim Delman–Bersama.
1.7M+
record produk sumber ing pipeline
6.4M+
baris keluaran analitik
Nganti 50%
peningkatan akurasi forecasting ing pekerjaan proyek
Mbusak duplikat pesanan mentah lan ngitung pendapatan saben dina saben pelanggan nganggo window function.
-- Daily revenue per customer, deduplicated and cleaned
WITH ranked_orders AS (
SELECT
customer_id,
order_id,
order_date::date AS order_day,
amount,
ROW_NUMBER() OVER (
PARTITION BY order_id
ORDER BY updated_at DESC
) AS rn -- keep the latest version of each order
FROM raw.orders
WHERE status = 'paid'
AND amount > 0
)
SELECT
customer_id,
order_day,
COUNT(*) AS orders,
SUM(amount) AS revenue,
ROUND(AVG(amount),2) AS avg_order_value
FROM ranked_orders
WHERE rn = 1 -- drop duplicate order rows
GROUP BY customer_id, order_day
ORDER BY order_day DESC, revenue DESC;Tuladha pekerjaan extract → transform → load sing ringkes lan gampang diwaca, kalebu ngresiki, deduplikasi, lan nggawe fitur turunan.
import pandas as pd
from sqlalchemy import create_engine
def transform_orders(raw_path: str) -> pd.DataFrame:
"""Extract raw orders, clean them, return analysis-ready rows."""
df = pd.read_csv(raw_path)
# 1. Standardize & clean
df.columns = [c.strip().lower() for c in df.columns]
df["order_date"] = pd.to_datetime(df["order_date"], errors="coerce")
df = df.dropna(subset=["order_id", "customer_id", "order_date"])
# 2. Keep only valid, paid orders and drop duplicates
df = df[(df["status"] == "paid") & (df["amount"] > 0)]
df = df.sort_values("updated_at").drop_duplicates("order_id", keep="last")
# 3. Derive features
df["order_day"] = df["order_date"].dt.date
df["revenue"] = df["amount"].round(2)
return df[["customer_id", "order_day", "order_id", "revenue"]]
def load(df: pd.DataFrame, table: str, dsn: str) -> int:
engine = create_engine(dsn)
df.to_sql(table, engine, schema="marts", if_exists="replace", index=False)
return len(df)
if __name__ == "__main__":
clean = transform_orders("data/raw/orders.csv")
rows = load(clean, "fct_orders", "postgresql://localhost/warehouse")
print(f"Loaded {rows} clean rows into marts.fct_orders")Gambaran alur saka data sumber nganti keluaran siap analisis, kanthi pemeriksaan validasi. Iki dudu arsitektur khusus klien.
Gambaran sadurunge lan sawisé nilai sumber sing ora konsisten; ora ana data klien sing ditampilake.
| customer | date | amount |
|---|---|---|
| Andi | 12/03/26 | "150.000" |
| andi | 2026-03-12 | 150000 |
| Budi | null | -5 |
| customer_id | order_day | revenue |
|---|---|---|
| andi | 2026-03-12 | 150000 |
| budi | — | invalid |
Duplikat digabung, tanggal diseragamake, baris ora valid dibusak.
Aku kerja ing kabutuhan produk, alur data, lan implementasi. Ayo rembugan babagan proyekmu.