Tabulasi Data dengan Pivot Table Pandas

Tabulasi Data dengan Pivot Table Pandas
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 transaksi
  • Segment: kategori dari kustomer
  • Payment Mode: jenis pembayaran yang digunakan untuk transaksi
  • Ship Mode: jenis pengiriman yang digunakan
  • Category: kategori produk yang dibeli
  • Sub-Category: sub kategori produk yang dibeli
  • Quantity: jumlah unit produk yang dibeli
  • Sales: 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-agregasi
  • values: kolom-kolom pada data yang di-agregasi
  • index: kolom-kolom yang menjadi kriteria pengelompokan
  • columns: kolom-kolom yang di-pivot (long-to-wide)
  • aggfunc: fungsi-fungsi yang digunakan untuk agregasi nilai values (default : mean, contoh lainnya: count, sum, min, max, median, std, var atau fungsi lainnya).
  • fill_value: nilai yang akan diberikan jika terdapat nilai NaN pada hasil agregasi (default: None)
  • margins: jika True maka akan ditambahkan 1 kolom All untuk setiap variabel yang menjadi index maupun columns

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.

Tabulasi menurut 1 kolom

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

Tabulasi menurut 1 kolom dengan beberapa fungsi

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

Tabulasi menurut 2 kolom atau lebih

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

Pivot table menurut 2 kolom (1 Index dan 1 columns)

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

Pivot table menurut beberapa kolom nilai

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!!!

You may also like...

Leave a Reply

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

Daftar Isi