Forensic Analytics dengan Pandas – Data Histogram
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') bins = [-80000, 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 27000000] labels = ['<$0', '$0-$1K', '$1K-$2K', '$2K-$3K', '$3K-$4K', '$4K-$5K', '$5K-$6K', '$6K-$7K', '$7K-$8K', '>$8K'] df['bins'] = pd.cut(df['Amount'], bins, labels=labels, include_lowest=True, right=False) a4_dims = (11.7, 8.27) plt.figure(figsize=a4_dims) ax = sns.countplot(x="bins", data=df) ax.set(xlabel='Dollar Intervals in $ Thousands', ylabel='Count') ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x)))) plt.show()
Pengantar
Data Histogram adalah alat bantu visual untuk memahami data yang kita miliki. Kita akan pelajari bagaimana membuat histogram menggunakan data yang kita miliki, dan apa yang kita dapat setelah melihatnya.
Data yang digunakan adalah data pembayaran tagihan dari buku Forensic Analytics-nya Pak Nigrini yang dapat diunduh di sini.
Data Histogram
Tujuan
The Data Histogram ada di Chapter 4, pada Figure 4.2. Kita akan mengubah grafik Excel ini.
Menjadi seperti di bawah ini, menggunakan pandas, matplotlib dan seaborn.
Jika pembaca ingin mengetahui bagaimana membuat histogram di Excel tulisan ini mudah diikuti dan sangat membantu.
Urgensi
Selepas membuat data profile, langkah selanjutnya adalah menggambar histogram dari data yang kita dapatkan. Karena berbentuk visual, kita lebih cepat mencerna informasi yang diberikan, seperti berapa banyak nilai kecil, mayoritas transaksi bernilai berapa atau apakah transaksi bernilai tinggi sering terjadi.
Untuk data keuangan umumnya kita membuat histogram dengan data berupa interval nilai. Banyaknya interval bergantung dari kebutuhan kita dan kadang butuh beberapa percobaan hingga kita menemukan jumlah yang memadai, tidak terlalu banyak sehingga membingungkan namun juga tidak terlalu sedikit yang berisiko kurang informatif.
Langkah Kerja
Kita akan membuat 10 interval pada kolom Amount.
- Kurang dari 0
- Antara 0 sampai 1.000
- Antara 1.000 sampai 2.000
- Antara 2.000 sampai 3.000
- Antara 3.000 sampai 4.000
- Antara 4.000 sampai 5.000
- Antara 5.000 sampai 6.000
- Antara 6.000 sampai 7.000
- Lebih dari 8.000
Sekali lagi, nilai tersebut tidak mutlak, silahkan berimprovisasi sesuai data yang pembaca miliki.
Setelah menentukan interval tersebut lalu kita gunakan matplotlib dan seaborn untuk membuat histogram.
Kode
Bila belum memiliki library yang dibutuhkan, instalasi dapat dilakukan langsung di (Jupyter) Notebook dengan perintah
!pip install pandas !pip install matplotlib !pip install seaborn
Kode di atas hanya cukup sekali saja dieksekusi, untuk selanjutnya dapat dijadikan komentar agar tidak dieksekusi ulang saat menjalankan notebook kembali. Selanjutnya adalah mengimpor library tersebut dan data yang akan digunakan.
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')
Selanjutnya kita ingin mendapatkan deskripsi data pada kolom Amount, yang mencakup berapa nilai terendah dan nilai tertinggi. Ini kita perlukan sebagai acuan mengisi nilai interval terendah dan tertinggi.
df['Amount'].describe()
Nilai tertinggi adalah -71.388 dan tertinggi 26.763.475,78, rentang nilai yang panjang. Kita akan menggunakan dua nilai tersebut sebagai acuan, penulis sendiri akan menggunakan angka -80.000 dan 27.000.000 sebagai interval terendah dan tertinggi. Utamanya kita yakin bahwa interval akan mencakup seluruh rentang yang ada dalam data sehingga tidak terdapat data yang tidak ikut terproses.
bins = [-80000, 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 27000000] labels = ['<$0', '$0-$1K', '$1K-$2K', '$2K-$3K', '$3K-$4K', '$4K-$5K', '$5K-$6K', '$6K-$7K', '$7K-$8K', '>$8K']
Variabel bins berisi rentang nilai yang diterjemahkan, misalnya, -80.000 sampai 0, 0 sampai 1.000 dan seterusnya. Variabel labels berisi label yang akan disematkan, bagian ini perlu agar kita mudah mencerna informasi yang ditampilkan.
df['bins'] = pd.cut(df['Amount'], bins, labels=labels, include_lowest=True, right=False)
Kita menambahkan sebuah kolom baru, bins, pada data. Kolom tersebut berisi diinterval mana data tersebut.
Kode selanjutnya adalah inti dari tulisan ini.
a4_dims = (11.7, 8.27) # ukuran grafik plt.figure(figsize=a4_dims) ax = sns.countplot(x="bins", data=df) ax.set(xlabel='Dollar Intervals in $ Thousands', ylabel='Count') # label plt.show()
Jika ingin label count menggunakan pemisah ribuan, kode dapat ditambahkan menjadi seperti ini.
a4_dims = (11.7, 8.27) # ukuran grafik plt.figure(figsize=a4_dims) ax = sns.countplot(x="bins", data=df) ax.set(xlabel='Dollar Intervals in $ Thousands', ylabel='Count') # label ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x)))) # bagian ini ditambahkan untuk memformat angka plt.show()
Selanjutnya
Terdapat beberapa hal yang dapat kita eksplorasi lebih lanjut setelah melihat histogram di atas. Beberapa pertanyaan menarik yang dapat kita ajukan antara lain.
- Kenapa ada nilai kurang dari nol dan jumlahnya cukup banyak?
- Transaksi apa saja yang bernilai lebih dari USD8.000?
- Mayoritas data ada di interval 0 sampai 1.000, berapa banyak transaksi bernilai kecil, misal bernilai 0 sampai 10? Transaksi kecil tentu menimbulkan pertanyaan mengenai efisiensi karena sumber daya yang digunakan untuk memproses nilai kecil bisa jadi lebih mahal ketimbang nilai transaksinya.
Referensi
- https://www.ablebits.com/office-addins-blog/2016/05/11/make-histogram-excel/
- https://www.drawingfromdata.com/setting-figure-size-using-seaborn-and-matplotlib
- https://preinventedwheel.com/matplotlib-thousands-separator-1-step-guide/
Cover Photo by Cris DiNoto on Unsplash
4 Replies to “Forensic Analytics dengan Pandas – Data Histogram”