Forensic Analytics dengan Pandas – Periodic Graph
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt pd.options.display.float_format = '{:,}'.format df = pd.read_excel('Chapter4_Figure4pt4_DataOnly.xlsx') df['month'] = pd.DatetimeIndex(df['Date']).month df2 = df.groupby('month', as_index=False)['Amount'].sum() df2['AmountM'] = df2['Amount']/1000000 df2['monthname'] = df2['month'].apply(lambda x: calendar.month_abbr[x]) a4_dims = (11.7, 8.27) plt.figure(figsize=a4_dims) sns.set_style("whitegrid") ax = sns.barplot(x='monthname', y='AmountM', data=df2) ax.set(xlabel='Month', ylabel='Monthly Total ($ millions)') plt.show()
Pengantar
Sama seperti data histogram, periodic graph menyediakan visualisasi yang membantu kita lebih memahami data yang kita miliki. Seperti tulisan terdahulu, data yang digunakan adalah data pembayaran tagihan dari buku Forensic Analytics-nya Pak Nigrini. Data dapat diunduh di sini.
Periodic Graph
Tujuan
The Periodic Graph of the Payments Data pada Chapter 4, Figure 4.3. Dari grafik di bawah ini, dibuat pada Excel.
Menjadi seperti ini, menggunakan pandas, matplotlib dan seaborn.
Membuat grafik seperti ini sama mudahnya di Excel maupun di Pandas (Python). Saat menggunakan Excel, kita dapat terlebih dahulu membuat Pivot Table, kemudian itu kita jadikan acuan saat membuat grafik.
Urgensi
Menggunakan periodic graph kita mendapatkan informasi berperspektif waktu. Transaksi keuangan umumnya meningkat saat akhir tahun sehingga grafik di atas sebenarnya cukup “aneh” karena transaksi pada Desember tidak menjadi yang tertinggi, atau setidaknya tertinggi kedua. Jenis “keanehan” seperti itulah yang dapat kita tangkap menggunakan periodic graph.
Bila kita memiliki data dalam kurun waktu yang lebih panjang, misal alih-alih hanya data setahun, kita punya data 3 tahun terakhir, kita dapat menyandingkan data bulan masing-masing tahun untuk mendapatkan tren selama tahun-tahun tersebut.
Langkah Kerja
Data akan dikelompokkan dalam periode bulanan. Data yang kita gunakan adalah data satu tahun, sehingga tidak perlu difilter tahunnya.
Kode
Mengimpor library dan data yang diperlukan.
import calendar import pandas as pd import seaborn as sns import matplotlib.pyplot as plt pd.options.display.float_format = '{:,}'.format df = pd.read_excel('Chapter4_Figure4pt4_DataOnly.xlsx')
Menambahkan kolom month yang berisi bulan transaksi, berguna saat mengelompokkan data.
df['month'] = pd.DatetimeIndex(df['Date']).month
Buat dataframe kedua yang berisi hasil pengelompokkan berdasarkan bulan. Dari masing-masing kelompok, jumlahkan (sum) kolom Amount. Kemudian tambahkan kolom AmountM, yaitu nilai penjumlahan sebelum kolom Amount dibagi dengan satu juta, ini murni hanya untuk kenyamanan membaca grafik saja. Selain itu tambahkan kolom monthname, juga hanya untuk kenyamanan membaca grafik sehingga dapat dilewatkan jika merasa tidak perlu.
df2 = df.groupby('month', as_index=False)['Amount'].sum() df2['AmountM'] = df2['Amount']/1000000 df2['monthname'] = df2['month'].apply(lambda x: calendar.month_abbr[x])
Tampilkan plot.
sns.barplot(x='month', y='Amount', data=df2)
Jika kita menggunakan kolom Amount maka grafik akan menggunakan nilai 0 sampai 7 dan keterangan 1e7. Bulan ditampilkan dalam angka karena menggunakan kolom month. Untuk tampilan yang lebih “menyenangkan” kita gunakan kolom AmountM dan monthname, dan sedikit memformat grafik.
a4_dims = (11.7, 8.27) plt.figure(figsize=a4_dims) sns.set_style("whitegrid") ax = sns.barplot(x='monthname', y='AmountM', data=df2) ax.set(xlabel='Month', ylabel='Monthly Total ($ millions)') plt.show()
Selanjutnya
Bila pembaca adalah auditor (audit keuangan) yang sedang menentukan sampel, bulan-bulan dengan transaksi tinggi tentu lebih diprioritaskan. Sebaliknya jika tema pemeriksaan adalah kinerja, bisa jadi bulan Mei adalah yang paling menarik.
Menggunakan grafik, keputusan di atas bisa segera diambil, bahkan sesingkat waktu untuk mencerna grafik transaksi tersebut.
Menggunakan data, profesional scepticism kita menjadi lebih terpercaya.