Belajar menggunakan Pivot Table di Python
Bila kalian telah membaca teknik agregasi untuk mendapatkan sebuah informasi mengenai Sum, average, count, max, dan minimal atas sebuah grup data itu disebut dengan pivot table https://softscients.com/2020/06/10/mempercepat-query-jutaan-basis-data-menggunakan-agregasi/
Namun ada teknik/cara lain yang bisa digunakan khusus menangani pivot table pada data berbentuk data frame pada python yaitu menggunakan package seaborn. Bagi kalian yang sudah menggunakan Anaconda, tentu sudah terinstall secara default, yang bisa dicek via pip. Berikut hasil cek versi seaborn
C:\Users\mulka>pip show seaborn Name: seaborn Version: 0.10.1 Summary: Seaborn: statistical data visualization Home-page: http://seaborn.pydata.org Author: Michael Waskom Author-email: mwaskom@nyu.edu License: BSD (3-clause) Location: c:\programdata\anaconda3\lib\site-packages Requires: numpy, scipy, matplotlib, pandas
Terlihat seaborn yang digunakan dengan versi 0.8. Namun kalau belum ada, kalian perlu install menggunakan perintah via pip pip install seaborn
Mengenal Seaborn
Searborn merupakan package yang bertujuan untuk mempermudah pengguna python dalam membuat visualisasi data dengan core engine dari matplotlib terutama dalam menyajikan data statistik http://seaborn.pydata.org/. Kalau kalian menggunakan matplotlib dan pandas akan secara manual sekali membuat visualisasi data, apalagi data tersebut bersifat kategorikal. Nah keunggulan dari seaborn yaitu mempermudah pivot table. Contohnya sebagai berikut
total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4 5 25.29 4.71 Male No Sun Dinner 4 6 8.77 2.00 Male No Sun Dinner 2 7 26.88 3.12 Male No Sun Dinner 4 8 15.04 1.96 Male No Sun Dinner 2 9 14.78 3.23 Male No Sun Dinner 2 >>>
Data yang kita inginkan yaitu berapa sih sebaran data untuk total_bills yang diberikan pada hari Thru, Frid, Sat, Sun? Kode sangat singkat sekali yaitu
import seaborn as sns import matplotlib.pyplot as plt tips = sns.load_dataset("tips") sns.catplot(x="day", y="total_bill", jitter=False, data=tips)
Bekerja menggunakan Pivot Table
Menggunakan dataset tips diatas, kita akan mencoba membuat gambaran datasetnya. Kita cek dulu berapa sih total data recordnya?
len(tips)
Didapatkan angka 244 record,
Pivot Table Count()
Pertanyaan selanjutnya? Yaitu berapa jumlah/count/frekuensi pengunjung berdasarkan jenis kelamin: male / female?
tips.groupby('sex').count()
Didapatkan informasi sebagai berikut
total_bill tip smoker day time size sex Male 157 157 157 157 157 157 Female 87 87 87 87 87 87
Artinya dari 244 data, pengunjung berjenis kelamin Male sebanyak 157 record dan Female sebanyak 87, dapat disimpulkan bahwa ternyata male malah banyak yang pergi ke restoran dibandingkan female. Kita perjelas lagi, di hari apa male dan female sering pergi?
tips.groupby(['sex','day'])['tip'].aggregate('count').unstack()
hasil
day Thur Fri Sat Sun sex Male 30 10 59 58 Female 32 9 28 18
Dapat disimpulkan male banyak pergi ke restoran pada hari satuday dan female pada Thursday atau menggunakan function pivot_table
tips.pivot_table('size',index='sex',columns='day',aggfunc={'size':'count'})
hasil
day Thur Fri Sat Sun sex Male 30 10 59 58 Female 32 9 28 18
Aggfunc bisa diisi dengan ‘sum’, ‘mean’, ‘count’, ‘min’, ‘max’ dan yang lainnya
Pivot Table Sum()
Pertanyaan selanjutnya yaitu berapa grand total total_bill untuk masing-masing male dan female? Kita ingin tahu apakah Male banyak keluarkan uang juga untuk pergi ke restoran?
tips.groupby('sex')['total_bill'].sum()
hasil
sex Male 3256.82 Female 1570.95
Male juga banyak keluarkan uang untuk pergi ke restoran sebanyak 3256.82. Lebih detailnya menggunakan function pivot_table
tips.pivot_table('total_bill',index='sex',columns='day',aggfunc={'total_bill':'sum'})
hasil
day Thur Fri Sat Sun sex Male 561.44 198.57 1227.35 1269.46 Female 534.89 127.31 551.05 357.70