python, tutorial

Panduan Praktis Penggunaan Pandas - Bagian 2

#

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()

tutorial-penggunaan-praktis-pandas-201

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()

tutorial-penggunaan-praktis-pandas-202

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()

tutorial-penggunaan-praktis-pandas-203

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())

tutorial-penggunaan-praktis-pandas-204

 

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()

tutorial-penggunaan-praktis-pandas-205

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()

tutorial-penggunaan-praktis-pandas-206

 

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()

tutorial-penggunaan-praktis-pandas-207

 

Menghitung rata-rata rainfall untuk setiap time_zone

df.groupby('time_zone')[['rainfall']].mean()

tutorial-penggunaan-praktis-pandas-208

 

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'))

tutorial-penggunaan-praktis-pandas-209

 

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'))

tutorial-pandas-210

 

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'))

tutorial-penggunaan-praktis-pandas-211

 

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'))

tutorial-pandas-212

 

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()

tutorial-pandas-213

 

df.count()

tutorial-penggunaan-praktis-pandas-214

 

Untuk melakukan penghapusan kolom dapat dilakukan dengan perintah drop()

df = df.drop(columns=['expenses_urban'])
df.count()

tutorial-penggunaan-praktis-pandas-215

 

Merubah nama kolom, misalkan nama kolom dirubah ke dalam bahasa Indonesia

df.rename(
            columns={"province": "propinsi", "rainfall": "curah_hujan"},
            inplace = True)

df.count()

tutorial-penggunaan-praktis-pandas-216

 

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

tutorial-penggunaan-praktis-pandas-217

 

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()

tutorial-penggunaan-praktis-pandas-218

 

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))

tutorial-penggunaan-praktis-pandas-219

 

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")

tutorial-penggunaan-praktis-pandas-220

 

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")

tutorial-penggunaan-praktis-pandas-221

 

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 !

Contributor