Cara Mudah Membuat Rekap Data di Python

Sharing is caring!

Di dalam proses analisis data, pembuatan rekap data dapat menghasilkan sebuah informasi dari sekumpulan data yang diperoleh. Sebagai contoh, misalkan terdapat data sejumlah 10.000 mahasiswa, di mana dalam data tersebut terdapat gender si mahasiswa. Dengan menggunakan sebuah rekap jumlah mahasiswa berdasarkan gender tersebut, kita bisa mengetahui berapa persentase mahasiswa bergender laki-laki dan juga perempuannya. Lebih banyak manakah antara mahasiswa bergender laki-laki atau perempuan.

Di dalam Python, untuk membuat rekap data sangat mudah sekali dilakukan. Salah satu idenya adalah dengan menggunakan bantuan tipe data dictionary. Tipe data dictionary adalah sebuah tipe data dinamis di dalam Python yang mirip dengan tipe data array asosiatif di dalam PHP, di mana indeks dari dictionary ini adalah berupa key (bisa berupa string atau number). Secara umum struktur dari sebuah dictionary adalah berupa pasangan key dan value, yaitu berbentuk {key1: value, key2: value, ...}. Mirip array asosiatif di dalam PHP bukan?

Selanjutnya, bagaimana memanfaatkan dictionary tersebut untuk membuat rekap data? OK, mula-mula kita buat sebuah dictionary kosong terlebih dahulu. Kemudian, secara satu persatu dengan menggunakan looping kita baca item data dari kumpulan data yang akan dibuat rekapnya. Item data ini nanti akan dikaitkan dengan key dari dictionary yang kita buat tadi. Jika item data yang dibaca tersebut belum menjadi key dari dictionary, maka dijadikan key di dalam dictionary dengan initial valuenya adalah 1. Namun, jika item data sudah menjadi key dari dictionary, maka valuenya diupdate dengan increment 1 (bertambah satu). Demikian proses ini dilakukan berulang-ulang untuk setiap item data hingga selesai. Setelah perulangan selesai, diperolehlah sebuah dictionary yang berupa rekap data.

Perhatikan contoh berikut ini. Misalkan diberikan sebuah data list seperti di bawah ini.

gender = ["L", "P", "P", "L", "P", "P", "P", "L"]

Berdasarkan data list gender di atas, kita akan membuat rekap berapa jumlah laki-laki (L) dan perempuannya (P). Dengan mengimplementasikan ide di atas, kode Python yang dibuat adalah seperti berikut ini.

# membuat empty dictionary
rekapGender = {}

# ambil data gender satu per satu
for data in gender:
    # jika data ada di key rekapGender
    # valuenya bertambah 1 pada key tsb 
    if data in rekapGender:
        rekapGender[data] += 1
    else:
        # jika belum ada, lakukan init value 1 pada key tersebut
        rekapGender[data] = 1

# cetak rekap
print(rekapGender)

Dengan menggunakan script Python di atas, diperoleh hasil rekap {‘L’: 3, ‘P’: 5}, artinya jumlah laki-lakinya 3 dan perempuannya 5. Mudah bukan??

OK.. next.. kita akan implementasikan konsep di atas untuk menganalisis dataset betulan (yang di atas bohongan berarti hehehe… 😀 ). Dataset yang akan kita gunakan untuk analisis adalah data kejahatan di kota Boston dari tahun 2015 s/d 2018 yang diambil dari Kaggle. Dari dataset tersebut, kita ingin mengetahui jenis kejahatan apa yang paling banyak terjadi dalam kurun waktu 3 tahun tersebut.

Langkah pertama, kita import dulu data CSV datasetnya ke Python menggunakan Pandas.

import pandas as pd

# import file datase crime.csv, tipe encoding="ISO-8859-1"
dataCrimes = pd.read_csv('D:/crime.csv', encoding="ISO-8859-1")
# menampilkan 5 baris data pertama
dataCrimes.head()

Oya, untuk proses import CSV di atas sepertinya harus menyertakan tipe encoding “ISO-8859-1” karena ada beberapa karakter yang tidak compatible dengan tipe encoding standar utf-8 sehingga akan muncul error jika tidak menyertakan tipe encoding ISO tersebut. Adapun tampilan dari hasil import di atas adalah sebagai berikut.

Tampilan 5 baris pertama hasil import

Untuk menjawab pertanyaan di awal, yaitu jenis kejahatan apa yang paling banyak terjadi, kita bisa mengolah data yang diambil dari kolom ‘OFFENSE_CODE_GROUP’. Data dari kolom inilah yang nanti kita akan buat rekap jumlah kejahatan per jenisnya. Setelah dibuat rekapnya, barulah disorting secara descending untuk mendapatkan informasi jenis kejahatan yang paling banyak terjadi.

Langkah ke dua adalah mengambil kolom ‘OFFENSE_CODE_GROUP’.

# mengambil data pada kolom offense_code_group
offense = dataCrimes['OFFENSE_CODE_GROUP']

Langkah ke tiga setelah berhasil mendapatkan data pada kolom ‘OFFENSE_CODE_GROUP’ barulah bisa dibuat rekapnya dengan ide di atas.

# proses rekap

rekapOffense = {}
for row in offense:
    if row in rekapOffense:
        rekapOffense[row] += 1
    else:
        rekapOffense[row] = 1

# cetak rekap
print(rekapOffense)

dan… voila… kita dapatkan rekapnya sebagai berikut:

{'Larceny': 25935,
 'Vandalism': 15415,
 'Towed': 11287,
 'Investigate Property': 11124,
 'Motor Vehicle Accident Response': 37132,
 'Auto Theft': 4851,
 'Verbal Disputes': 13099,
 'Robbery': 4624,
 'Fire Related Reports': 1920,
 'Other': 18075,
 'Property Lost': 9751,
 'Medical Assistance': 23540,
 'Assembly or Gathering Violations': 955,
 'Larceny From Motor Vehicle': 10847,
 'Residential Burglary': 5606,
 'Simple Assault': 15826,
 'Restraining Order Violations': 1607,
 'Violations': 6095,
 'Harassment': 4007,
 'Ballistics': 981,
 'Property Found': 3925,
 'Police Service Incidents': 2781,
 'Drug Violation': 16548,
 'Warrant Arrests': 8407,
 'Disorderly Conduct': 2611,
 'Property Related Damage': 912,
 'Missing Person Reported': 3797,
 'Investigate Person': 18750,
 'Fraud': 5829,
 'Aggravated Assault': 7807,
 'License Plate Related Incidents': 560,
 'Firearm Violations': 1777,
 'Other Burglary': 461,
 'Arson': 94,
 'Bomb Hoax': 75,
 'Harbor Related Incidents': 212,
 'Counterfeiting': 1454,
 'Liquor Violation': 1052,
 'Firearm Discovery': 698,
 'Landlord/Tenant Disputes': 968,
 'Missing Person Located': 4958,
 'Auto Theft Recovery': 1051,
 'Service': 285,
 'Operating Under the Influence': 574,
 'Confidence Games': 3147,
 'Search Warrants': 966,
 'License Violation': 1701,
 'Commercial Burglary': 1337,
 'HOME INVASION': 77,
 'Recovered Stolen Property': 1455,
 'Offenses Against Child / Family': 545,
 'Prostitution': 207,
 'Evading Fare': 407,
 'Prisoner Related Incidents': 253,
 'Homicide': 161,
 'Embezzlement': 296,
 'Explosives': 27,
 'Criminal Harassment': 131,
 'Phone Call Complaints': 31,
 'Aircraft': 36,
 'Biological Threat': 2,
 'Manslaughter': 8,
 'Gambling': 8,
 'INVESTIGATE PERSON': 4,
 'HUMAN TRAFFICKING': 7,
 'HUMAN TRAFFICKING - INVOLUNTARY SERVITUDE': 2,
 'Burglary - No Property Taken': 2}

Tampilan rekap di atas masih belum terurut secara descending, sehingga masih belum bisa menjawab pertanyaan. Oleh karena itu langkah terakhir adalah mensortingnya dengan perintah sebagai berikut:

from operator import itemgetter

# sorting descending
sortedRekapOffense = sorted(rekapOffense.items(), key=itemgetter(1), reverse=True)

print(sortedRekapOffense)

Perintah di atas merupakan cara melakukan sorting pada tipe data dictionary secara descending berdasarkan nilai valuenya.

Sehingga hasil akhirnya kita dapatkan data rekap pasca sorting seperti di bawah ini.

[('Motor Vehicle Accident Response', 37132),
 ('Larceny', 25935),
 ('Medical Assistance', 23540),
 ('Investigate Person', 18750),
 ('Other', 18075),
 ('Drug Violation', 16548),
 ('Simple Assault', 15826),
 ('Vandalism', 15415),
 ('Verbal Disputes', 13099),
 ('Towed', 11287),
 ('Investigate Property', 11124),
 ('Larceny From Motor Vehicle', 10847),
 ('Property Lost', 9751),
 ('Warrant Arrests', 8407),
 ('Aggravated Assault', 7807),
 ('Violations', 6095),
 ('Fraud', 5829),
 ('Residential Burglary', 5606),
 ('Missing Person Located', 4958),
 ('Auto Theft', 4851),
 ('Robbery', 4624),
 ('Harassment', 4007),
 ('Property Found', 3925),
 ('Missing Person Reported', 3797),
 ('Confidence Games', 3147),
 ('Police Service Incidents', 2781),
 ('Disorderly Conduct', 2611),
 ('Fire Related Reports', 1920),
 ('Firearm Violations', 1777),
 ('License Violation', 1701),
 ('Restraining Order Violations', 1607),
 ('Recovered Stolen Property', 1455),
 ('Counterfeiting', 1454),
 ('Commercial Burglary', 1337),
 ('Liquor Violation', 1052),
 ('Auto Theft Recovery', 1051),
 ('Ballistics', 981),
 ('Landlord/Tenant Disputes', 968),
 ('Search Warrants', 966),
 ('Assembly or Gathering Violations', 955),
 ('Property Related Damage', 912),
 ('Firearm Discovery', 698),
 ('Operating Under the Influence', 574),
 ('License Plate Related Incidents', 560),
 ('Offenses Against Child / Family', 545),
 ('Other Burglary', 461),
 ('Evading Fare', 407),
 ('Embezzlement', 296),
 ('Service', 285),
 ('Prisoner Related Incidents', 253),
 ('Harbor Related Incidents', 212),
 ('Prostitution', 207),
 ('Homicide', 161),
 ('Criminal Harassment', 131),
 ('Arson', 94),
 ('HOME INVASION', 77),
 ('Bomb Hoax', 75),
 ('Aircraft', 36),
 ('Phone Call Complaints', 31),
 ('Explosives', 27),
 ('Manslaughter', 8),
 ('Gambling', 8),
 ('HUMAN TRAFFICKING', 7),
 ('INVESTIGATE PERSON', 4),
 ('Biological Threat', 2),
 ('HUMAN TRAFFICKING - INVOLUNTARY SERVITUDE', 2),
 ('Burglary - No Property Taken', 2)]

Berdasarkan hasil di atas, tampak bahwa jenis kejahatan paling banyak terjadi di Boston selama kurun waktu tahun 2015 s/d 2018 adalah disebabkan karena kecelakaan kendaraan bermotor (‘Motor Vehicle Accident Response’), diikuti dengan pencurian (‘Larceny’).

OK, mudah bukan?? 😀 Teknik di atas tentunya bukan satu-satunya cara di Python untuk merekap data. Jika Anda punya ide lain, maka silakan share di komentar di bawah ya…

Tinggalkan Komentar