Studi Kasus Cleanup Dataset Penjualan Retail yang Berantakan dengan Pandas

Studi Kasus Cleanup Dataset Penjualan Retail yang Berantakan dengan Pandas

Latar Belakang Masalah

Sebuah e-commerce ingin menganalisis data penjualan 6 bulan terakhir, tetapi datanya memiliki masalah :

  • Ada missing values (produk tanpa kategori, harga kosong).
  • Format tidak konsisten (tanggal campuran, nama produk duplikat).
  • Outlier pada harga (kesalahan input).

Dataset Contoh (sales_raw.csv) :

csv
order_id,customer_name,product,price,quantity,order_date,category
1,Andi,Laptop Gaming,15000000,1,2023-01-15,Elektronik
2,Budi,,12000000,1,15-02-2023,Elektronik
3,Cici,Smartphone,5000000,2,2023/03/10,
4,Deni,Smartphone,5000000,2,2023-04-05,Gadget
5,Eva,Laptop Gaming,15000000,1,2023-05-20,Elektronik
6,Fani,Smartphone,500000000,1,2023-06-15,Gadget
7,Gina,Headphone,1500000,3,2023-06-30,Aksesoris

Langkah-Langkah Cleanup dengan Pandas

Langkah 1 : Load Data

python
import pandas as pd

df = pd.read_csv('sales_raw.csv')
print("Data Awal:")
print(df)

Output :

   order_id customer_name       product       price  quantity   order_date    category
0         1          Andi  Laptop Gaming   15000000.0         1   2023-01-15  Elektronik
1         2          Budi           NaN    12000000.0         1   15-02-2023  Elektronik
2         3          Cici     Smartphone    5000000.0         2   2023/03/10         NaN
3         4          Deni     Smartphone    5000000.0         2   2023-04-05      Gadget
4         5          Eva   Laptop Gaming   15000000.0         1   2023-05-20  Elektronik
5         6          Fani     Smartphone  500000000.0         1   2023-06-15      Gadget
6         7          Gina      Headphone    1500000.0         3   2023-06-30   Aksesoris

Langkah 2 : Handle Missing Values

a. Isi missing product dengan “Unknown” :

python
df['product'].fillna('Unknown', inplace=True)

b. Isi missing category dengan modus :

python
df['category'].fillna(df['category'].mode()[0], inplace=True)

Hasil :

2          Cici     Smartphone   5000000.0         2   2023/03/10  Elektronik  # Kategori terisi
1          Budi       Unknown   12000000.0         1   15-02-2023  Elektronik

Langkah 3 : Standarisasi Format Tanggal

python
df['order_date'] = pd.to_datetime(
    df['order_date'], 
    errors='coerce',  # Ubah format tidak valid jadi NaT
    dayfirst=True     # Handle format DD-MM-YYYY
)

print("Tanggal setelah standarisasi:")
print(df[['order_date']])

Output :

  order_date
0 2023-01-15
1 2023-02-15  # Format awal 15-02-2023 diperbaiki
2 2023-03-10  # Format awal 2023/03/10 diperbaiki
3 2023-04-05
4 2023-05-20
5 2023-06-15
6 2023-06-30

Langkah 4 : Temukan dan Perbaiki Outlier

a. Deteksi outlier harga dengan IQR:

python
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
batas_atas = Q3 + 1.5 * IQR

outlier = df[df['price'] > batas_atas]
print("Outlier Harga:")
print(outlier)

Output :

   order_id customer_name   product       price     quantity order_date category
5         6          Fani   Smartphone 500000000.0         1 2023-06-15   Gadget

b. Perbaiki outlier (misal: harga seharusnya 5.000.000) :

python
df.loc[df['price'] > batas_atas, 'price'] = 5000000

Langkah 5 : Hapus Duplikat

python
# Cek duplikat berdasarkan kolom tertentu
duplikat = df.duplicated(subset=['customer_name', 'product', 'order_date'])
print("Jumlah Duplikat:", duplikat.sum())

# Hapus duplikat
df = df.drop_duplicates()

Langkah 6 : Standarisasi Teks

python
# Ubah nama produk ke lowercase
df['product'] = df['product'].str.lower()

# Standarisasi kategori
df['category'] = df['category'].str.replace('Gadget', 'Elektronik')

Hasil :

         product    category
0  laptop gaming  Elektronik
3     smartphone  Elektronik  # Awalnya "Gadget"

Langkah 7 : Hitung Total Sales

python
df['total_sales'] = df['price'] * df['quantity']
print("Data Final:")
print(df[['product', 'price', 'quantity', 'total_sales']])

Output :

         product      price  quantity  total_sales
0  laptop gaming   15000000         1     15000000
1        unknown   12000000         1     12000000
2     smartphone    5000000         2     10000000
3     smartphone    5000000         2     10000000
4  laptop gaming   15000000         1     15000000
5     smartphone    5000000         1      5000000
6      headphone    1500000         3      4500000

Hasil Akhir Cleanup

Data yang Sudah Dibersihkan:

order_id customer_name product price quantity order_date category total_sales
1 Andi laptop gaming 15000000 1 2023-01-15 Elektronik 15000000
2 Budi unknown 12000000 1 2023-02-15 Elektronik 12000000
3 Cici smartphone 5000000 2 2023-03-10 Elektronik 10000000

Visualisasi :

python
import matplotlib.pyplot as plt

# Plot total sales per kategori
df.groupby('category')['total_sales'].sum().plot(
    kind='bar', 
    title='Total Sales per Kategori'
)
plt.show()

Kesimpulan

  1. Pandas menyederhanakan proses cleanup dengan fungsi siap pakai seperti :
    • fillna() untuk missing values.
    • to_datetime() untuk standarisasi tanggal.
    • str.lower() untuk konsistensi teks.
  2. Langkah kritis dalam cleanup :
    • Validasi outlier (jangan asal hapus!).
    • Backup data sebelum modifikasi.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *