Perhitungan Pendapatan dan Rekayasa Fitur
Hitung pendapatan per baris pesanan, buat kolom bulan dan kuartal, lalu tambahkan penanda diskon untuk pesanan di atas ambang batas.
Perhitungan Pendapatan dan Rekayasa Fitur adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Menghitung Pendapatan per Baris Pesanan
Perhitungan paling mendasar dalam kumpulan data penjualan adalah pendapatan per baris pesanan: hasil kali kuantitas dan harga satuan untuk setiap baris. Buat kolom tersebut dengan perkalian tervectorisasi agar NumPy memproses semua baris secara bersamaan tanpa perulangan Python. Kolom ini menjadi dasar bagi setiap agregasi dalam analisis.
import pandas as pd
df = pd.read_parquet('sales_clean.parquet')
df['revenue'] = df['quantity'] * df['unit_price']
print(df[['quantity', 'unit_price', 'revenue']].head())Mengekstrak Kolom Bulan dan Kuartal
Pengelompokan berdasarkan periode kalender sangat penting untuk analisis tren. Gunakan pengakses .dt pada kolom datetime untuk mengekstrak tahun, bulan, dan kuartal. Menyimpannya sebagai kolom bilangan bulat terpisah membuat operasi groupby lebih cepat dan memungkinkan Anda memfilter berdasarkan periode dengan mudah tanpa penguraian string berulang.
df['year'] = df['order_date'].dt.year
df['month'] = df['order_date'].dt.month
df['quarter'] = df['order_date'].dt.quarter
df['year_month'] = df['order_date'].dt.to_period('M')
print(df[['order_date', 'year', 'month', 'quarter', 'year_month']].head())Membuat Penanda Diskon
Aturan bisnis sering menetapkan penanda diskon: pesanan yang totalnya melebihi ambang batas mendapatkan diskon. Gunakan np.where atau perbandingan boolean untuk membuat kolom biner ini secara efisien. Penanda diskon memungkinkan analis membandingkan distribusi pendapatan antara pesanan berdiskon dan pesanan dengan harga penuh dalam satu pemanggilan groupby.
import numpy as np
DISCOUNT_THRESHOLD = 500
df['is_discounted'] = np.where(df['revenue'] >= DISCOUNT_THRESHOLD, 1, 0)
print(df['is_discounted'].value_counts())
print(df.groupby('is_discounted')['revenue'].mean())Menghitung Kolom Margin Laba
Jika kumpulan data memiliki kolom cost_price, Anda dapat menghitung margin laba dengan (unit_price - cost_price) / unit_price. Gunakan clip(lower=0) untuk membatasi margin negatif yang disebabkan oleh kesalahan data sebelum analisis lebih lanjut. Kolom margin memungkinkan agregasi groupby yang berfokus pada laba selain pendapatan.
df['margin'] = ((df['unit_price'] - df['cost_price']) / df['unit_price']).clip(lower=0)
print(df[['unit_price', 'cost_price', 'margin']].describe())Fitur Jumlah Hari Sejak Pesanan Pertama
Jumlah hari antara pesanan pertama pelanggan dan pesanan saat ini merupakan fitur masa hubungan pelanggan yang berguna. Hitung dengan mengelompokkan berdasarkan customer_id, mengambil tanggal minimum sebagai tanggal kohort, lalu mengurangkannya dari tanggal di setiap baris. Aritmetika timedelta menghasilkan kolom berisi nilai timedelta64 yang dikonversi menjadi jumlah hari bilangan bulat dengan .dt.days.
first_order = df.groupby('customer_id')['order_date'].transform('min')
df['days_since_first_order'] = (df['order_date'] - first_order).dt.days
print(df[['customer_id', 'order_date', 'days_since_first_order']].head())Kelompok Ukuran Pesanan dengan pd.cut
Bagi kolom revenue ke dalam kelompok ukuran berlabel menggunakan pd.cut() untuk membuat fitur ordinal bagi segmentasi. Tentukan bins dan labels secara eksplisit agar sesuai dengan definisi bisnis untuk pesanan kecil, sedang, dan besar. Kolom yang dihasilkan adalah Categorical Pandas yang dapat dikelompokkan secara efisien.
bins = [0, 100, 500, 2000, float('inf')]
labels = ['Small', 'Medium', 'Large', 'Enterprise']
df['order_size'] = pd.cut(df['revenue'], bins=bins, labels=labels)
print(df['order_size'].value_counts())Pendapatan Kumulatif Seiring Waktu
Urutkan DataFrame berdasarkan order_date dan gunakan cumsum() pada kolom pendapatan untuk melacak akumulasi total pendapatan sepanjang tahun. Deret kumulatif ini memudahkan Anda melihat apakah pendapatan tumbuh secara linear, meningkat semakin cepat, atau mulai mendatar, serta menjadi dasar untuk diagram air terjun atau diagram garis kumulatif.
df_sorted = df.sort_values('order_date')
df_sorted['cumulative_revenue'] = df_sorted['revenue'].cumsum()
print(df_sorted[['order_date', 'revenue', 'cumulative_revenue']].tail())Fitur Akhir Pekan vs. Hari Kerja
Properti dt.day_of_week menghasilkan 0 (Senin) hingga 6 (Minggu). Tandai Sabtu (5) dan Minggu (6) sebagai pesanan akhir pekan untuk menguji apakah perilaku pembelian pada akhir pekan berbeda dari hari kerja. Ini merupakan fitur umum dalam EDA ritel dan analisis pengujian A/B.
df['is_weekend'] = df['order_date'].dt.day_of_week >= 5
print(df.groupby('is_weekend')['revenue'].agg(['mean', 'count']))Mengurutkan Peringkat Pelanggan berdasarkan Pendapatan
Identifikasi pelanggan teratas dengan menghitung total pendapatan per customer_id menggunakan groupby().sum(), lalu membuat peringkat dengan .rank(ascending=False, method='dense'). Menambahkan peringkat tersebut kembali ke DataFrame utama dengan map() memungkinkan Anda memfilter pelanggan teratas-N dalam satu kondisi boolean.
customer_revenue = df.groupby('customer_id')['revenue'].sum()
customer_rank = customer_revenue.rank(ascending=False, method='dense').astype(int)
df['customer_revenue_rank'] = df['customer_id'].map(customer_rank)
print(df[df['customer_revenue_rank'] <= 10][['customer_id', 'customer_revenue_rank']].drop_duplicates())Menormalkan Pendapatan dengan Z-Score
Normalkan kolom pendapatan menjadi Z-score agar Anda dapat membandingkan ukuran pesanan di berbagai kategori produk dengan rentang harga yang sangat berbeda. Gunakan (df['revenue'] - df['revenue'].mean()) / df['revenue'].std(). Z-score di atas 3 atau di bawah -3 merupakan pencilan statistik yang perlu diteliti sebelum pemodelan.
mean_rev = df['revenue'].mean()
std_rev = df['revenue'].std()
df['revenue_zscore'] = (df['revenue'] - mean_rev) / std_rev
outliers = df[df['revenue_zscore'].abs() > 3]
print(f'Outlier orders: {len(outliers)}')Menyimpan DataFrame yang Diperkaya Fitur
Setelah menambahkan kolom hasil perhitungan, simpan DataFrame yang diperkaya agar setiap buku catatan pada langkah berikutnya dimulai dari keadaan konsisten yang sama. Gunakan to_parquet() untuk mempertahankan dtype, terutama kolom Categorical order_size dan datetime order_date. Dokumentasikan kolom baru dalam blok komentar singkat di bagian atas skrip.
# New columns added:
# revenue, year, month, quarter, year_month
# is_discounted, order_size, is_weekend
# days_since_first_order, customer_revenue_rank, revenue_zscore
df.to_parquet('sales_features.parquet', index=False)
print('Feature DataFrame saved:', df.shape)Pemeriksaan Cepat
Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari: menghitung kolom pendapatan dan margin laba, mengekstrak fitur temporal dengan pengakses .dt, serta merekayasa fitur seperti penanda diskon, kelompok ukuran pesanan, dan peringkat pelanggan. Selanjutnya, kita akan membahas analisis groupby berdasarkan wilayah dan kategori.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Perhitungan Pendapatan dan Rekayasa Fitur” gratis?
Ya — teks lengkap “Perhitungan Pendapatan dan Rekayasa Fitur” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Perhitungan Pendapatan dan Rekayasa Fitur”?
Hitung pendapatan per baris pesanan, buat kolom bulan dan kuartal, lalu tambahkan penanda diskon untuk pesanan di atas ambang batas. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?
Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Perhitungan Pendapatan dan Rekayasa Fitur” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Memuat dan Mengaudit Dataset Penjualan
- Perhitungan Pendapatan dan Rekayasa Fitur
- Analisis GroupBy berdasarkan Wilayah dan Kategori
- Visualisasi Tren Bulanan