Siap data
Semua skrip baca order.csv dari folder sains-data/ lewat Path(__file__).parents[2], sama pola seperti pertemuan 1–2.
from pathlib import Path import pandas as pd csv_path = Path(__file__).resolve().parents[2] / "order.csv" order_df = pd.read_csv(csv_path)
DataFrame bernama order_df, ~50.000 baris transaksi e-commerce cabang A (kolom price, quantity, payment_type, product_weight_gram, freight_value, dan lainnya).
5. Histogram distribusi harga
python3 tugas-5.py
Membuat suatu distribusi harga dari pembelian produk di cabang A.
- Dataframe yang akan kita gunakan sama seperti data sebelumnya, yaitu order_df.
- Supaya lebih mudah dipahami, kita akan membuatnya dalam bentuk histogram dari kolom price.
import matplotlib.pyplot as plt # Membuat plot histogram menggunakan kolom price order_df[["price"]].hist(figsize=(4, 5), bins=10, xlabelsize=8, ylabelsize=8) plt.ticklabel_format(style="plain", axis="x") # 1000000, bukan 1e6 plt.show() # Untuk menampilkan histogram yang sudah dibuat
[["price"]] supaya hist() dapat figsize dan ukuran label. Matplotlib baru menulis sumbu x sebagai 1e6; ticklabel_format plain menampilkan 1000000 seperti di slide.
6. Standar deviasi dan varians berat produk
python3 tugas-6.py
Menampilkan data persebaran product_weight_gram pada data penjualan cabang A yang kita peroleh dari order.csv.
- Tampilkan standar deviasi dan varians dari kolom product_weight_gram pada dataframe order_df tadi untuk menganalisis lebar persebaran distribusi tersebut.
# Standar variasi kolom product_weight_gram print(order_df.loc[:, "product_weight_gram"].std()) # Varians kolom product_weight_gram print(order_df.loc[:, "product_weight_gram"].var())
loc[:, "kolom"] sama seperti di materi std/var. std() satuan gram; var() satuan gram².
7. IQR untuk outlier product_weight_gram
python3 tugas-7.py
Setelah menentukan standar deviasi & varians pada kolom product_weight_gram, selanjutnya dicoba menentukan batas IQR untuk bisa menentukan outliers bagi kolom product_weight_gram. Manfaatkan dataframe order_df.
- Dilanjutkan dengan menghitung Q1, Q3, dan IQR.
# Hitung quartile 1 Q1 = order_df[["product_weight_gram"]].quantile(0.25) # Hitung quartile 3 Q3 = order_df[["product_weight_gram"]].quantile(0.75) # Hitung inter quartile range dan cetak ke console IQR = Q3 - Q1 print(IQR)
[["kolom"]] supaya quantile mengembalikan Series berlabel, sama seperti output slide. Outlier: di bawah Q1 − 1,5×IQR atau di atas Q3 + 1,5×IQR.
8. Rename freight_value → shipping_cost
python3 tugas-8.py
Cobalah untuk mengubah kolom freight_value menjadi shipping_cost dalam data frame order_df, dengan menggunakan fungsi rename().
# Ganti nama kolom freight_value menjadi shipping_cost
order_df.rename(columns={"freight_value": "shipping_cost"}, inplace=True)
print(order_df)
rename dengan dict kolom lama → baru. inplace=True mengubah order_df langsung di memori.
9. Rata-rata price per payment_type
python3 tugas-9.py
Setelah memahami penggunaan fungsi groupby(). Carilah rata-rata dari kolom price dengan mengelompokkannya per payment_type dari dataset order_df.
# Hitung rata rata dari price per payment_type rata_rata = order_df["price"].groupby(order_df["payment_type"]).mean() print(rata_rata)
Series price di-groupby payment_type, lalu mean(). Hasil masuk variabel rata_rata.
10. Harga pembelian maksimum
python3 tugas-10.py
Cari berapa harga maksimum pembelian customer pada kolom price di dataset order_df.
# Hitung harga maksimum pembelian customer sort_harga = order_df.sort_values(by="price", ascending=False) print(sort_harga)
sort_values by="price", ascending=False = dari harga terbesar. print(sort_harga) menampilkan seluruh kolom; slide menonjolkan product_id dan price.
11. Laporan analisis penjualan (Solusi 1–5)
python3 tugas-11.py
Analisis data penjualan dari dataset order.csv dengan detail laporan sebagai berikut. Lakukan dengan cara:
- Menghitung median price yang dibayar customer dari masing-masing metode pembayaran.
- Tentukan metode pembayaran yang memiliki basket size (rataan median price) terbesar.
- Ubah freight_value menjadi shipping_cost dan cari shipping_cost termahal dari data penjualan tersebut menggunakan sort.
- Untuk product_category_name, berapa rata-rata weight produk tersebut dan standar deviasi mana yang terkecil dari weight tersebut.
- Buat histogram quantity penjualan dari dataset tersebut untuk melihat persebaran quantity penjualan tersebut dengan bins = 5 dan figsize = (4, 5).
Solusi 1. Median price per metode pembayaran
- Untuk soal pertama, kita membutuhkan kolom payment_type sebagai agregate, lalu hitung median kolom price untuk masing-masing group.
- Kita bisa menerapkan fungsi groupby untuk melakukannya.
# Median price yang dibayar customer dari masing-masing metode pembayaran median_price = order_df["price"].groupby(order_df["payment_type"]).median() print(median_price) print()
Hasil: tiap payment_type punya median price sendiri (misalnya credit card 2587500, debit card 2621500, e-wallet 2589000, virtual account 2643000).
Solusi 2. Metode bayar dengan median price terbesar
Dari output median_price tersebut, kita bisa melihat median price untuk masing-masing metode pembayaran. Untuk soal kedua, metode pembayaran yang memiliki basket size (median price) terbesar adalah virtual account, sebesar 2643000.
Solusi 3. Rename shipping_cost dan sort ongkir termahal
Selanjutnya, ganti nama kolom freight_value menjadi shipping_cost, serta cari nilai shipping_cost termahal dengan menggunakan fungsi sort_values().
# Ubah freight_value menjadi shipping_cost dan cari shipping_cost
# termahal dari data penjualan tersebut menggunakan sort
order_df.rename(columns={"freight_value": "shipping_cost"}, inplace=True)
sort_value = order_df.sort_values(by="shipping_cost", ascending=0)
print(sort_value[["seller_id", "shipping_cost"]])
print()
Setelah di-run, kolom freight_value berubah menjadi shipping_cost dan tabel terurut dari ongkir tertinggi (200000). Ongkos kirim paling mahal sebesar 200000.
Solusi 4. Mean dan std berat per kategori produk
Untuk product_category_name, berapa rata-rata weight produk tersebut dan standar deviasi mana yang terkecil dari weight tersebut.
# Untuk product_category_name, berapa rata-rata weight produk tersebut # dan standar deviasi mana yang terkecil dari weight tersebut mean_value = order_df["product_weight_gram"].groupby(order_df["product_category_name"]).mean() print(mean_value) print() std_value = order_df["product_weight_gram"].groupby(order_df["product_category_name"]).std() print(std_value) print()
Kategori beauty punya rata-rata berat terkecil (2120.088396 gram). Kategori automotive punya standar deviasi berat terkecil (3799.884166 gram). Antara blok print dipisah baris kosong agar output di konsol mudah dibaca.
Solusi 5. Histogram quantity
Buat histogram quantity penjualan dari dataset tersebut untuk melihat persebaran quantity penjualan tersebut dengan bins = 5 dan figsize = (4, 5).
# Buat histogram quantity penjualan dari dataset tersebut untuk melihat persebaran quantity # penjualan tersebut dengan bins = 5 dan figsize= (4,5) order_df[["quantity"]].plot.hist(bins=5, figsize=(4, 5)) plt.show()
Sebagian besar transaksi quantity rendah (bin pertama mendominasi); figsize (4, 5) membuat grafik lebih tinggi daripada lebar, seperti contoh di slide.