Tabulasi Data dengan Pivot Table Pandas
Pivot table adalah teknik pemrosesan data yang umum digunakan untuk mengorganisasi dan menganalisis data tabular. Secara sederhana, proses pivot table adalah mengambil data dalam format “long” dan mengubahnya menjadi format “wide”. Format data “wide” biasanya berisi ringkasan data menurut berbagai kriteria sehingga lebih mudah untuk memahami dan menganalisis dibandingkan menggunakan data aslinya.
Pandas, yang merupakan pustaka populer untuk analisis dan pengolahan data pada python, memiliki fitur-fitur untuk membuat pivot table secara efektif dan efesien serta dengan sintaks yang mudah dipahami. Pembuatan pivot table pada pandas dapat dilakukan menggunakan fungsi pivot_table
. Fungsi ini menghasilkan output tabulasi data dengan struktur seperti pivot table pada Microsoft Excel.
Pada tutorial ini, kita akan membahas secara lengkap pembuatan pivot table menggunakan pustaka pandas
. Pembahasan akan dimulai dengan contoh pivot table sederhana hingga yang lebih kompleks. Diharapkan melalui tutorial ini, pembaca dapat memiliki pemahaman yang lengkap serta dapat menerapkannya pada proyeknya masing-masing untuk menghasilkan berbagai tabulasi.
Data yang akan digunakan adalah data transaksi fiktif dari perusahaan retail di Amerika Serikat. Adapun informasi yang tersedia pada dataset tersebut adalah sebagai berikut:
Order ID
: nomor transaksiSegment
: kategori dari kustomerPayment Mode
: jenis pembayaran yang digunakan untuk transaksiShip Mode
: jenis pengiriman yang digunakanCategory
: kategori produk yang dibeliSub-Category
: sub kategori produk yang dibeliQuantity
: jumlah unit produk yang dibeliSales
: nilai pembelian produk
Link dataset : data_transaksi.csv
Berikut ini adalah contoh data yang akan digunakan:
Python
import pandas as pd data = pd.read_csv("data_transaksi.csv") print(data.head(10))
# OUTPUT Order ID Segment Payment Mode Ship Mode Category Sub-Category Quantity Sales 0 CA-2019-160304 Corporate Online Standard Class Furniture Bookcases 1 73.940 1 CA-2019-160304 Corporate Online Standard Class Furniture Bookcases 3 173.940 2 CA-2019-160304 Corporate Cards Standard Class Technology Phones 2 231.980 3 CA-2019-125206 Consumer Online First Class Office Supplies Storage 2 114.460 4 US-2019-116365 Corporate Online Standard Class Technology Accessories 2 30.080 5 US-2019-116365 Corporate Online Standard Class Technology Accessories 3 165.600 6 US-2019-116365 Corporate Cards Standard Class Technology Phones 5 180.960 7 CA-2019-105207 Corporate COD Standard Class Furniture Tables 7 1592.850 8 CA-2019-105207 Corporate COD Standard Class Office Supplies Binders 2 11.880 9 US-2019-164630 Corporate Online Standard Class Technology Copiers 4 959.968
Fungsi pivot_table
Pembuatan pivot table dengan pandas dilakukan menggunakan fungsi pivot_table
. Saat memanggil fungsi pivot_table
terdapat beberapa parameter yang perlu dipahami agar dapat menghasilkan data tabulasi sesuai keinginan. Beberapa parameter utama pada fungsi pivot_table
yaitu:
data
: dataframe yang di-agregasivalues
: kolom-kolom padadata
yang di-agregasiindex
: kolom-kolom yang menjadi kriteria pengelompokancolumns
: kolom-kolom yang di-pivot (long-to-wide)aggfunc
: fungsi-fungsi yang digunakan untuk agregasi nilaivalues
(default :mean
, contoh lainnya:count
,sum
,min
,max
,median
,std
,var
atau fungsi lainnya).fill_value
: nilai yang akan diberikan jika terdapat nilaiNaN
pada hasil agregasi (default:None
)margins
: jikaTrue
maka akan ditambahkan 1 kolomAll
untuk setiap variabel yang menjadiindex
maupuncolumns
Selain parameter-parameter di atas, terdapat beberapa parameter lainnya, silahkan cek selengkapnya dokumentasi pandas di https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html.
Contoh di bawah ini menunjukkan hasil tabulasi menggunakan kolom Category
sebagai index
dan menampilkan nilai Sales
. Pada contoh yang pertama, kita tidak menentukan nilai parameter aggfunc
sehingga secara default hasil yang diberikan merupakan nilai rata-rata. Sebagai pembanding, pada Contoh 2 kita menggunakan fungsi sum
untuk memperoleh nilai penjumlahan dari kolom Sales
menurut Category
.
Python
# CONTOH 1 # jika `aggfunc` tidak disediakan # maka secara default menggunakan `mean` (rata-rata) result_1 = pd.pivot_table(data=data, index='Category', values='Sales') print(result_1) # CONTOH 2 # nilai untuk parameter `aggsfunc` menggunakan `sum` result_2 = pd.pivot_table(data=data, index="Category", values='Sales', aggfunc="sum") print(result_2)
# OUTPUT Sales Category Furniture 361.496113 Office Supplies 180.360798 Technology 434.522614 Sales Category Furniture 451508.6452 Office Supplies 643707.6870 Technology 470587.9910
Contoh 3 di bawah ini menampilkan tabulasi yang mirip dengan contoh sebelumnya, namun dengan beberapa fungsi agregasi sekaligus yaitu count
, min
, max
, mean
, dan sum
. Hasil ini memberikan informasi berupa jumlah transaksi, nilai transaksi terkecil dan terbesar, nilai rata-rata transaksi serta total transaksi berdasarkan kategori produk yang dibeli (kolom Category
).
Python
# CONTOH 3 # agregasi dengan beberapa fungsi sekaligus result_3 = pd.pivot_table(data=data, index='Category', values='Sales', aggfunc=["count", "min", "mean", "max", "sum"]) print(result_3)
# OUTPUT count min mean max sum Sales Sales Sales Sales Sales Category Furniture 1249 2.328 361.496113 4439.174 451508.6452 Office Supplies 3569 0.836 180.360798 5455.960 643707.6870 Technology 1083 1.980 434.522614 9099.930 470587.9910
Parameter index
dapat berisi beberapa kolom sekaligus. Jika argumennya lebih dari 1 kolom, maka dapat menggunakan format list
. Pada Contoh 4, kita menghitung nilai penjualan (kolom Sales
) yang dibagi menurut kategori produk (kolom Category
) serta metode pembayaran (kolom Payment Mode
).
Python
# CONTOH 4 # agregasi menurut 2 `index` result_4 = pd.pivot_table(data=data, index=['Category', 'Payment Mode'], values='Sales', aggfunc="sum") print(result_4)
# OUTPUT Sales Category Payment Mode Furniture COD 175547.7113 Cards 103642.7592 Online 172318.1747 Office Supplies COD 275190.5750 Cards 145156.9340 Online 223360.1780 Technology COD 216679.4650 Cards 95593.4180 Online 158315.1080
Dengan cara yang sama seperti sebelumnya, maka kita dapat mengunakan beberapa fungsi agregasi sekaligus. Contoh 5 berikut ini menunjukkan hasil agregasi yang mirip dengan contoh 4, namun dengan tambahan informasi banyaknya transaksi menurut kategori produk (kolom Category
) dan metode pembayaran (kolom Payment Mode
).
Python
# CONTOH 5 # agregasi dengan 2 `index` dan 2 fungsi sekaligus result_5 = pd.pivot_table(data=data, index=['Category', 'Payment Mode'], values='Sales', aggfunc=["count", "sum"]) print(result_5)
# OUTPUT count sum Sales Sales Category Payment Mode Furniture COD 511 175547.7113 Cards 284 103642.7592 Online 454 172318.1747 Office Supplies COD 1474 275190.5750 Cards 771 145156.9340 Online 1324 223360.1780 Technology COD 468 216679.4650 Cards 229 95593.4180 Online 386 158315.1080
Pada contoh-contoh sebelumnya, kita melakukan agregasi dengan hasil masih dalam format “long”. Dengan mengisi nilai parameter columns
dapat diperoleh hasil tabulasi dalam format “wide” yang lebih mudah dibaca. Contoh 6 berikut ini mirip seperti Contoh 4 , namun alih-alih menjadikan kolom Payment Mode
sebagai argumen untuk index
kita menjadikannya sebagai argumen bagi parameter columns
atau sebagai kolom pivot.
Hasil pivot seperti ini membuat setiap jenis metode pembayaran menjadi kolom tersendiri. Informasi yang disajikan masih sama namun format tabulasi ini lebih mudah dibaca dibandingkan hasil pada Contoh 4.
Python
# CONTOH 6 # menggunakan `indeks` + `columns` result_6 = pd.pivot_table(data=data, index='Category', columns = "Payment Mode", values='Sales', aggfunc="sum") print(result_6)
# OUTPUT Payment Mode COD Cards Online Category Furniture 175547.7113 103642.7592 172318.1747 Office Supplies 275190.5750 145156.9340 223360.1780 Technology 216679.4650 95593.4180 158315.1080
Hal yang sama juga berlaku jika terdapat beberapa fungsi agregasi pada aggfunc
, sehingga kita juga dapat merubah format pada Contoh 5 menggunakan kode berikut ini:
Python
# CONTOH 7 # menggunakan `indeks` + `columns` + multiple `aggfunc` result_7 = pd.pivot_table(data=data, index='Category', columns = "Payment Mode", values='Sales', aggfunc=["count", "sum"]) print(result_7)
# OUTPUT count sum Payment Mode COD Cards Online COD Cards Online Category Furniture 511 284 454 175547.7113 103642.7592 172318.1747 Office Supplies 1474 771 1324 275190.5750 145156.9340 223360.1780 Technology 468 229 386 216679.4650 95593.4180 158315.1080
Kita dapat pula menampilkan agregasi untuk beberapa nilai sekaligus, dimana setiap nilai dapat ditentukan fungsi agregasinya masing-masing. Caranya adalah dengan menentukan kolom-kolom untuk parameter values
dalam bentuk list
. Selain itu, kita dapat menentukan fungsi agregasinya masing-masing menggunakan dictionary
sebagai nilai bagi parameter aggfunc
.
Pada contoh berikut, kita melakukan agregasi untuk nilai Quantity
dan Sales
menurut Category
dan Payment Mode
. Fungsi agregasi yang digunakan untuk kolom Quantity
dan Sales
adalah sum
. Keduanya disimpan dalam bentuk dictionary
dan menjadi argumen bagi parameter aggfunc
.
Hasil pivot menunjukkan nilai banyaknya unit produk (kolom Quantity
) dan nilai penjualan (kolom Sales
) yang dibagi menurut Category
dan Payment Mode
.
Python
# CONTOH 8 # menggunakan `indeks` + `columns` + multiple `values` result_8 = pd.pivot_table(data=data, index='Category', columns = "Payment Mode", values=['Quantity', 'Sales'], aggfunc={'Quantity': "sum", 'Sales': "sum"}) print(result_8)
# OUTPUT Quantity Sales Payment Mode COD Cards Online COD Cards Online Category Furniture 1846 1079 1706 175547.7113 103642.7592 172318.1747 Office Supplies 5631 2991 5003 275190.5750 145156.9340 223360.1780 Technology 1770 833 1458 216679.4650 95593.4180 158315.1080
Pivot table yang lebih kompleks
Contoh 9 di bawah ini menunjukkan tabulasi menggunakan 2 kolom sebagai index
, 1 kolom sebagai kolom pivot columns
serta 1 kolom untuk values
. Hasil tabulasi akan memberikan informasi jumlah unit produk yang dibeli (kolom Quantity
) yang dikelompokkan menurut Category
dan Sub-Category
(sebagai index
) serta Payment Mode
(sebagai pivot columns
).
Python
# CONTOH 9 # menggunakan multiple `indeks` + `columns` result_9 = pd.pivot_table(data=data, index=['Category', 'Sub-Category'], columns = "Payment Mode", values='Quantity', aggfunc='sum') print(result_9)
# OUTPUT Payment Mode COD Cards Online Category Sub-Category Furniture Bookcases 185 113 176 Chairs 527 288 473 Furnishings 851 506 776 Tables 283 172 281 Office Supplies Appliances 466 228 356 Art 688 401 690 Binders 1461 795 1414 Envelopes 207 112 144 Fasteners 212 82 246 Labels 314 189 308 Paper 1324 687 1063 Storage 782 418 630 Supplies 177 79 152 Technology Accessories 776 363 622 Copiers 67 33 42 Machines 122 45 83 Phones 805 392 711
Sebagai penutup bagian ini kita akan membuat tabulasi yang melibatkan 2 kolom sebagai index
, 2 kolom sebagai columns
serta 1 kolom sebagai values
dengan fungsi agregasi sum
. Hasil tabulasi akan memberikan informasi berupa jumlah unit produk yang dibeli (kolom Quantity
) yang dibagi menurut Category
dan Sub-category
(sebagai index
) serta Segment
dan Payment Mode
sebagai pivot columns
.
Python
# CONTOH 10 # menggunakan multiple `indeks` + multiple `columns` result_10 = pd.pivot_table(data=data, index=['Category', 'Sub-Category'], columns = ["Segment", "Payment Mode"], values='Quantity', aggfunc="sum") print(result_10)
# OUTPUT Segment Consumer Corporate Home Office Payment Mode COD Cards Online COD Cards Online COD Cards Online Category Sub-Category Furniture Bookcases 110.0 54.0 112.0 52.0 59.0 43.0 23.0 NaN 21.0 Chairs 314.0 135.0 216.0 150.0 101.0 174.0 63.0 52.0 83.0 Furnishings 450.0 241.0 414.0 261.0 142.0 224.0 140.0 123.0 138.0 Tables 116.0 79.0 120.0 93.0 68.0 109.0 74.0 25.0 52.0 Office Supplies Appliances 241.0 101.0 200.0 182.0 91.0 104.0 43.0 36.0 52.0 Art 373.0 231.0 368.0 188.0 104.0 192.0 127.0 66.0 130.0 Binders 664.0 373.0 746.0 497.0 235.0 412.0 300.0 187.0 256.0 Envelopes 107.0 59.0 61.0 76.0 23.0 62.0 24.0 30.0 21.0 Fasteners 109.0 45.0 125.0 42.0 23.0 84.0 61.0 14.0 37.0 Labels 145.0 102.0 192.0 83.0 46.0 52.0 86.0 41.0 64.0 Paper 647.0 336.0 548.0 392.0 209.0 304.0 285.0 142.0 211.0 Storage 347.0 202.0 335.0 240.0 150.0 170.0 195.0 66.0 125.0 Supplies 83.0 42.0 85.0 67.0 22.0 54.0 27.0 15.0 13.0 Technology Accessories 407.0 160.0 308.0 221.0 134.0 218.0 148.0 69.0 96.0 Copiers 42.0 9.0 8.0 9.0 5.0 28.0 16.0 19.0 6.0 Machines 47.0 16.0 38.0 52.0 18.0 20.0 23.0 11.0 25.0 Phones 427.0 157.0 352.0 192.0 152.0 236.0 186.0 83.0 123.0
Pada dasarnya, kita dapat membuat berbagai tabulasi dengan mengatur kombinasi kolom-kolom pada parameter index
, columns
, values
serta aggfunc
. Namun tentu saja semakin kompleks tabulasi yang dibuat maka semakin sulit pula untuk dibaca. Oleh karena itu dalam pembuatan tabulasi menggunakan pivot_table
sebaiknya tetap mempertimbangkan faktor kompleksitas tersebut.
Selamat mencoba!!!
Tutorial Pandas