Forensic Analytics dengan Pandas – Data Histogram

Kode Lima Detik

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


Cover Photo by Cris DiNoto on Unsplash

4 Replies to “Forensic Analytics dengan Pandas – Data Histogram”

  1. Pingback: Bar Chart Race

Leave a Reply

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