Panduan Praktis Penggunaan Pandas ini adalah seri tutorial bagian kedua mengenai Pandas. Pada tutorial Pandas bagian sebelumnya, telah dipelajari tentang cara membaca data, mendapatkan informasi struktur data, memfilter, dan mengurutkan data. Sebelum meneruskan tutorial ini, sangat disarankan untuk mengikuti terlebih dahulu Panduan Praktis Penggunaan Pandas Bagian 1
Pandas adalah sebuah paket library pada python yang digunakan untuk mempermudah dalam mengolah dan menganalisa data-data terstruktur. Pandas merupakan paket penting yang wajib diketahui untuk seorang data engineer, data analyst dan data scientist jika ingin mengolah dan manganalisa data menggunakan python.
Yuk kita selesaikan materi ini supaya dapat segera beraksi menggunakan Pandas !
import pandas as pd
url = "https://raw.githubusercontent.com/project303/dataset/master/data-province-2015.cvs"
df = pd.read_csv(url, sep='\t')
Summarising Data
Pandas menyediakan fungsi statistik agregasi, seperti count, sum, min, max dan lainnya. Fungsi-fungsi ini dapat diterapkan ke kolom. Misalnya fungsi count() seperti yang telah sedikit dibahas pada bagian pertama tulisan ini. Fungsi ini dapat digunakan untuk menghitung jumlah record untuk setiap kolom.
df.count()
Perlu diingat, bahwa fungsi count() hanya menghitung untuk record yang tidak bernilai null. Pada contoh jumlah record untuk setiap kolom adalah sama yaitu 34 dan tidak ada yang memiliki nilai null
Untuk menghitung jumlah record pada sebuah kolom dapat menggunakan perintah berikut
df.rainfall.count()
atau dapat juga ditulis seperti berikut
df['rainfall'].count()
Fungsi lain seperti sum(), min(), max(), mean() dan lain-lain, hampir sama cara penggunaannya
df.sum()
Pada contoh diatas terlihat sesuatu yang agak berbeda, yaitu kolom province dan island. Ini terjadi karena kolom tersebut bukan bernilai numerik
Penggunaan lain dari fungsi statistik dapat dilihat sebagai berikut:
print('Total rainfall \t\t:', df.rainfall.sum())
print('Minimum rainfall value \t:', df.rainfall.min())
print('Maximum rainfall value \t:', df.rainfall.max())
print('Average rainfall value \t:', df.rainfall.mean())
Grouping
Pandas memiliki fungsi groupby() untuk melakukan perhitungan kelompok berdasarkan nilai unik sesuai kolom yang dipilih. Sebagai contoh, akan dilakukan perhitungan jumlah records kolom time_zone dikelompokkan berdasarkan nilai uniknya
df.groupby('time_zone').count()
Dari data diatas, terlihat bahwa time_zone memiliki 3 nilai unik yaitu 1, 2 dan 3
Jika ingin hanya menampilkan kolom tertentu, dapat dituliskan sepeti berikut:
df.groupby("time_zone")["province"].count()
Fungsi summary lain seperti sum, min, max, mean, first, last dapat digunakan pada fungsi groupby() untuk mendapatkan nilai statistik setiap kelompok. Misalkan kita ingin mendapatkan nilai yang pertama untuk setiap time_zone
df.groupby('time_zone').first()
Menghitung rata-rata rainfall untuk setiap time_zone
df.groupby('time_zone')[['rainfall']].mean()
Fungsi groupby() dapat digabungkan dengan fungsi agg(). Sebagai contoh, mengihtung rata-rata rainfall untuk setiap time_zone
df.groupby('time_zone').agg(avg_rainfall=('rainfall', 'mean'))
Untuk melakukan bebrapa perhitungan statistik yang dikelompokkan berdasarkan nilai unik sebuah kolom, dapat dilakukan sebagai berikut
df.groupby('time_zone').agg(
avg_rainfall=('rainfall', 'mean'),
max_rainfall=('rainfall', 'max'),
min_rainfall=('rainfall', 'min'))
Perhitungan aggregasi untuk kolom yang berbeda
df.groupby('time_zone').agg(
avg_rainfall=('rainfall', 'mean'),
min_rainy_day=('rainy_day', 'min'),
max_rainy_day=('rainy_day', 'max'))
Supaya kolom time_zone tidak ditampilkan sebagai index, maka parameter as_index diset False
df.groupby('time_zone', as_index=False).agg(
avg_rainfall=('rainfall', 'mean'),
min_rainy_day=('rainy_day', 'min'),
max_rainy_day=('rainy_day', 'max'))
Transformasi Kolom
Salah satu hal yang sering dilakukan juga adalah menambahkan kolom baru dari hasil terhitungan tertentu. Sebagai contoh kolom expenses_urban adalah hasil penjumlahan kolom expenses_food_urban dan expenses_other_urban
df['expenses_urban'] = df['expenses_food_urban'] + df['expenses_other_urban']
df[['province', 'island', 'expenses_urban', 'expenses_food_urban', 'expenses_other_urban']].head()
df.count()
Untuk melakukan penghapusan kolom dapat dilakukan dengan perintah drop()
df = df.drop(columns=['expenses_urban'])
df.count()
Merubah nama kolom, misalkan nama kolom dirubah ke dalam bahasa Indonesia
df.rename(
columns={"province": "propinsi", "rainfall": "curah_hujan"},
inplace = True)
df.count()
Join Dengan Data Referensi
Pada banyak kasus, kita sering menambahkan kolom dengan data yang baru menggunakan data referensi. Penggunaan data referensi biasanya untuk mempermudah maintenance data, sehingga kita tidak perlu mengubah kode. Sebagai contoh, kita akan menambahkan nama zona, dari data referensi zona waktu.
time_zone_data = {
'time_zone': [1, 2, 3],
'name_zone': ['WIB', 'WITA', 'WIT']}
time_zone_df = pd.DataFrame(time_zone_data, columns = ['time_zone', 'name_zone'])
time_zone_df
Pada kasus nyata, tidak menggunakan data referensi yang dibuat menggunakan kode seperti diatas. Data referensi diperoleh dari database, baik dalam bentuk file ataupun koneksi langsung ke database.
DataFrame diatas memiliki 2 kolom yaitu time_zone yang memiliki type int64 sesuai dengan kolom time_zone pada dataframe df. Kolom kedua adalah nama dari name_zone.
Pada contoh ini akan mentransformasikan time_zone pada dataframe df dengan menambahkan kolom baru yaitu name_zone. Fungsi yang digunakan adalah merge dengan parameter how='left'. Artinya adalah kita akan melakukan left join antara df dan time_zone_df
result_df = pd.merge(df, time_zone_df, on='time_zone', how='left')
result_df[['propinsi', 'curah_hujan', 'time_zone', 'name_zone']].head()
Data Visualisasi
Untuk memvisualisasikan DataFrame kedalam bentuk grafik, dapat menggunakan fungsi plot(), yang secara default menggunakan matplotlib
Contoh dibawah menampilkan grafik garis untuk x adalah propinsi dan y adalah curah hujan
%matplotlib inline
result_df.plot(x="propinsi", y="curah_hujan", rot=90, figsize=(10,5))
Fungsi plot() juga dapat digabungkan dengan fungsi-fungsi aggregasi atau summary
result_df.groupby(['time_zone', 'name_zone'], as_index=False).agg(avg_rainfall=('curah_hujan', 'mean'))\
.plot(x="time_zone", y="avg_rainfall")
Data ditampilkan dalam bentuk grafik batang
result_df.groupby(['time_zone', 'name_zone'], as_index=False).agg(avg_rainfall=('curah_hujan', 'mean'))\
.plot(x="name_zone", y="avg_rainfall", kind="bar")
Penutup
Membaca data, memeriksa, memfilter, mentransformasi dan melakukan join dengan menggunakan Pandas pada python merupakan hal penting dan sering dilakukan oleh seorang data scientist, data analyts maupun data engineer. Mencoba dengan dataset yang lebih komplek merupakan latihan yang dapat membantu untuk membiasakan diri mengolah data menggunakan Pandas.
Artikel ini juga diposting pada medium
Versi notebook dapat diakses pada github
Untuk yang belum pernah menggunakan Python dapat membaca Berkenalan dengan Python
Untuk pelajaran lebih lanjut bisa mengunjungi
Enjoy learning and have fun with data !