Pandas adalah modul penting bagi Data Scientist, terutama bagi para Pythonist. Pandas memudahkan hidup kita untuk menyimpan, mengeksplorasi, serta memanipulasi data hanya dengan beberapa baris kode. Namun, ada saat-saat ketika kita ingin menggunakan fungsi untuk mengelola data.
Untuk alasan itu, saya mencoba menulis artikel untuk memperkenalkan Anda pada beberapa atribut buat belajar Pandas Python yang digunakan untuk manipulasi data.
Berikut adalah empat Fungsi Pandas yang wajib diketahui.
1. pipe()
Pandas mendorong kita untuk menggunakan metode chaining untuk memanipulasi data kita. Jika Anda tidak tahu apa itu metode chaining, saya akan menunjukkannya dengan contoh di bawah.
import pandas as pd
import seaborn as sns
mpg = sns.load_dataset('mpg')
#Method Chaining
mpg.head().info()
Metode chaining adalah fungsi kontinu yang dieksekusi dalam baris kode yang sama. Kita menggunakan metode chaining untuk mengurangi jumlah baris yang kita tulis dan menjalankan fungsi dengan lebih cepat.
Bagaimana jika kita ingin merangkai (chaining) fungsi kita? Mari kita lihat contoh sederhana berikut.
#Fungsi untuk mengekstrak car first name dan membuat kolom baru dengan nama car_first_name
def extract_car_first_name(df):
df['car_first_name'] = df['name'].str.split(' ').str.get(0)
return df
#Fungsi untuk menambah my_name setelah car_first_name dan membuat kolom baru dengan nama car_and_name
def add_car_my_name(df, my_name = None):
df['car_and_name'] = df['car_first_name'] + my_name
add_car_my_name(extract_car_first_name(mpg), my_name = 'Cornellius')
mpg.head()
Seperti yang telah kita lihat, kita perlu menjalankan fungsi dalam fungsi lain untuk mendapatkan hasilnya. Berapa lama waktu yang dibutuhkan untuk mengeksekusi fungsi-fungsi ini?
Dibutuhkan 18ms untuk mengeksekusi kode fungsi dalam fungsi. Sekarang, saya akan memperkenalkan metode chaining menggunakan atribut pipe di bawah ini.
mpg.pipe(extract_car_first_name).pipe(add_car_my_name, my_name = 'Cornellius')
Metode chaining dalam objek Pandas memerlukan penggunaan atribut pipe. Setiap fungsi yang ingin kita rangkai dimasukkan dalam atribut pipe. Kita bisa melihat bahwa hasilnya mirip dengan contoh di atas. Bagaimana dengan waktu eksekusi?
Menggunakan atribut pipe untuk metode chaining hanya membutuhkan 6ms. Jelas mana yang lebih cepat. Memang kelihatannya waktu eksekusinya tidak jauh berbeda, namun bayangkan jika kita bekerja dengan big data. Waktu eksekusi akan memainkan peran yang lebih besar. Itulah mengapa disarankan untuk menggunakan pipe ketika melakukan metode chaining pada fungsi kita.
2. apply()
Sebelumnya kita membahas metode chaining untuk seluruh dataset, tetapi bagaimana jika kita ingin menyebarkan (broadcast) fungsi kita secara baris atau kolom? Dalam kasus ini, kita bisa menggunakan atribut apply. Saya akan menunjukkannya dengan contoh di bawah.
import numpy as np
#Memilih kolom numerik kemudian applying fugsi mean pada setiap kolom
mpg.select_dtypes('number').apply(np.mean)
Secara default, fungsi yang kita masukkan dalam atribut apply akan disebarkan ke setiap kolom. Hasilnya adalah series dengan nama kolom sebagai indeks dan nilai output fungsi (dalam hal ini mean) sebagai nilai series.
Kita juga bisa membuat fungsi kita sendiri. Sebenarnya, ini adalah alasan mengapa kita menggunakan atribut apply. Karena kita bisa mengimplementasikan fungsi untuk mengubah data secara kolom atau baris. Saya akan menunjukkan contohnya di bawah ini.
#Membuat fungsi yang menerima dan mengembalikan setiap kolom mejadi rata-rata dibagi dua
def mean_divided_by_2(col):
return (col.mean())/2
mpg.select_dtypes('number').apply(mean_divided_by_2)
Menggunakan fungsi kita sendiri, kita mendapatkan hasil rata-rata setiap kolom dibagi dua. Jika Anda menyadari, fungsi yang saya buat menerima satu parameter yang saya sebut col. Dengan parameter col ini, saya mengembalikan rata-rata setiap kolom dengan menggunakan atribut mean. Ini berarti fungsi yang kita buat untuk atribut apply akan menerima objek series dari setiap kolom. Dengan cara ini, kita bisa menggunakan salah satu metode series dari fungsi kita sendiri.
Bagaimana dengan aplikasi berbasis baris? Ya, kita bisa menerapkan fungsi kita ke dataset yang berbasis baris. Saya akan menunjukkannya dengan contoh sederhana di bawah.
#Menggunakan fungsi print dan mengubah parameter sumbu menjadi 1 agar aplikasi berdasarkan baris
mpg.select_dtypes('number').apply(print, axis =1)
Kita bisa melihat bahwa kita mencetak setiap baris data di mana setiap baris diubah menjadi objek series. Indeks series adalah nama kolom, nilai series adalah nilai di setiap baris, dan nama series adalah nama indeks setiap baris.
Sama seperti sebelumnya, kita bisa membuat fungsi kita sendiri. Saya akan menunjukkan contoh di bawah ini.
#Membuat fungsi klasifikasi. Jika mpg dibawah 18 dan model_year dibawah 75
#akan menghasilkan Old-School lainnya akan menghasilkan New-Scool
def mpg_classification(cols):
if cols['mpg'] <18 and cols['model_year'] <75:
return 'Old-School'
else:
return 'New-School'
#Membuat kolom baru bernama Classification dengan menggunakan input
#fungsi mpg_classificationpada attribut apply
mpg['Classification'] = mpg.apply(mpg_classification, axis = 1)
mpg.head()
Seperti yang telah Anda lihat, sekarang kita memiliki kolom baru yang disebut Classification. Nilainya berdasarkan fungsi mpg_classification yang kita gunakan dalam atribut apply. Dalam kasus data berbasis baris, kita mengulangi setiap baris sehingga fungsi yang kita masukkan diterapkan pada setiap baris. Setiap pengulangan adalah objek series yang terdiri dari nilai baris dengan indeks adalah nama kolom. Pada fungsi di atas, parameter cols akan diisi dengan objek series dari setiap baris; itulah mengapa kita menentukan kolom mana yang digunakan dalam parameter cols (cols[‘mpg’] dan cols[‘model_year’]).
3. agg()
Aggregation atau agg memungkinkan seseorang untuk mengekspresikan beberapa operasi agregasi dalam satu cara yang ringkas. Bagi Anda yang tidak tahu apa itu agregasi, Saya akan menunjukkannya dengan contoh di bawah.
mpg.agg(np.mean)
Agregasi menggunakan satu fungsi sama dengan atribut apply yang kita gunakan sebelumnya. agg menerapkan fungsi ke setiap kolom dan menghasilkan objek series. Yang membuat agg istimewa adalah bagaimana ia dapat mengambil beberapa fungsi.
#Selain fungsi, agg bisa menerima string dari fungsi statistik dasar.
#Selain itu, kita juga dapat mengimplementasikan fungsi kita sendiri di sini.
#Jika kita memiliki banyak fungsi, kita memasukkannya ke dalam list.
mpg.agg(['mean', 'std',mean_divided_by_2])
Dengan beberapa fungsi sebagai input, kita mendapatkan objek Data Frame. Yang menarik dari atribut agg adalah fungsi ini hanya diterapkan pada objek yang valid. Jika fungsi yang kita masukkan tidak dapat menerima jenis data tertentu, itu akan diabaikan.
Mengirimkan objek dictionary ke atribut agg memungkinkan kita menentukan fungsi mana yang diterapkan ke kolom mana.
#Misalnya saya hanya menggunakan kolom mpg dan akselerasi.
#Jika kita meneruskan dictionary ke atribut agg, kita perlu menentukan fungsi yang kita inginkan pada setiap kolom.
mpg[['mpg', 'acceleration']].agg({'mpg': ['mean',mean_divided_by_2], 'acceleration': 'std'})
4. applymap()
Semua atribut yang telah kita pelajari sebelumnya berdasarkan pada keseluruhan dataset atau berbasis kolom/baris. Bagaimana jika kita hanya ingin menerapkan fungsi ke setiap elemen atau nilai? Dalam hal ini, kita akan menggunakan atribut applymap. Saya akan menunjukkannya dengan contoh di bawah.
#Anda juga bisa memasukkan fungsi lambda. Di sini saya membuat fungsi untuk mengubah setiap nilai menjadi objek string dan mengembalikan panjang string
mpg.applymap(lambda x: len(str(x)))
Hasilnya adalah objek Data Frame di mana fungsi yang kita masukkan ke dalam applymap diterapkan pada setiap nilai dalam dataset. Kita juga memiliki atribut map untuk objek series yang setara dengan atribut applymap Data Frame.
#Menggunakan atribut map pada series object
mpg['name'].apply(lambda x: len(str(x)))
Kesimpulan
Pada artikel ini, saya telah menunjukkan empat Fungsi Pandas yang terbukti berguna dalam pekerjaan sehari-hari Data Science, yaitu:
1. pipe
2. apply
3. agg
4. applymap
Semoga bermanfaat!
Artikel ditranslasi oleh: Ahmad Ilham Habibi
Comentários