Pendahuluan
dplyr adalah salah satu library paling populer di R untuk manipulasi data, dan kini konsepnya dapat digunakan di Python melalui :
- Pandas (dengan gaya pipe
%>%
menggunakandf.pipe()
atau librarydfply
) - Siuba (library Python yang mengadopsi sintaks dplyr)
Mengapa menggunakan gaya dplyr?
- Kode lebih mudah dibaca (menggunakan “verbs” seperti
filter()
,select()
,mutate()
). - Cocok untuk operasi data yang kompleks dengan chaining (
%>%
). - Populer di kalangan data scientist yang terbiasa dengan R.
Library yang akan kita gunakan :
siuba
(rekomendasi utama untuk dplyr-style di Python)pandas
sebagai fallback
Instalasi dan Persiapan
Instalasi Library
pip install siuba pandas
Import Library
from siuba import * from siuba.dply.verbs import * import pandas as pd
Contoh Dataset
data = { 'ID': [1, 2, 3, 4, 5], 'Nama': ['Andi', 'Budi', None, 'Dedi', 'Eva'], 'Usia': [25, 30, 35, None, 28], 'Nilai': [80, 90, 85, 75, None], 'Kota': ['Jakarta', 'Bandung', 'Jakarta', None, 'Surabaya'] } df = pd.DataFrame(data) print("Data Awal:") print(df)
Output :
ID Nama Usia Nilai Kota 0 1 Andi 25.0 80.0 Jakarta 1 2 Budi 30.0 90.0 Bandung 2 3 None 35.0 85.0 Jakarta 3 4 Dedi NaN 75.0 None 4 5 Eva 28.0 NaN Surabaya
Operasi Dasar dplyr-style
a. select()
– Memilih Kolom
df_selected = df >> select(_.ID, _.Nama, _.Nilai) print("Select ID, Nama, Nilai:") print(df_selected)
Output :
ID Nama Nilai 0 1 Andi 80.0 1 2 Budi 90.0 2 3 None 85.0 3 4 Dedi 75.0 4 5 Eva NaN
b. filter()
– Filter Baris
df_filtered = df >> filter(_.Usia > 25, _.Kota == "Jakarta") print("Usia > 25 dan Kota = Jakarta:") print(df_filtered)
Output :
ID Nama Usia Nilai Kota 0 3 None 35.0 85.0 Jakarta
c. mutate()
– Menambah/Kolom Baru
df_mutated = df >> mutate( Usia_Next_Year = _.Usia + 1, Status = if_else(_.Nilai >= 80, "Lulus", "Gagal") ) print("Data dengan Kolom Baru:") print(df_mutated)
Output :
ID Nama Usia Nilai Kota Usia_Next_Year Status 0 1 Andi 25.0 80.0 Jakarta 26.0 Lulus 1 2 Budi 30.0 90.0 Bandung 31.0 Lulus 2 3 None 35.0 85.0 Jakarta 36.0 Lulus 3 4 Dedi NaN 75.0 None NaN Gagal 4 5 Eva 28.0 NaN Surabaya 29.0 Gagal
Data Cleaning dengan dplyr-style
a. Menangani Missing Values
df_clean = df >> \ mutate( Nama = _.Nama.fillna("Tidak Diketahui"), Usia = _.Usia.fillna(_.Usia.mean()), Nilai = _.Nilai.fillna(0), Kota = _.Kota.fillna("Unknown") ) print("Data setelah handle missing values:") print(df_clean)
Output :
ID Nama Usia Nilai Kota 0 1 Andi 25.0 80.0 Jakarta 1 2 Budi 30.0 90.0 Bandung 2 3 Tidak Diketahui 35.0 85.0 Jakarta 3 4 Dedi 29.5 75.0 Unknown 4 5 Eva 28.0 0.0 Surabaya
b. arrange()
– Sorting Data
df_sorted = df >> arrange(_.Nilai, ascending=False) print("Data diurutkan berdasarkan Nilai (descending):") print(df_sorted)
Output :
ID Nama Usia Nilai Kota 0 2 Budi 30.0 90.0 Bandung 1 3 None 35.0 85.0 Jakarta 2 1 Andi 25.0 80.0 Jakarta 3 4 Dedi NaN 75.0 None 4 5 Eva 28.0 NaN Surabaya
c. summarize()
– Aggregasi Data
summary = df >> \ group_by(_.Kota) >> \ summarize( Rata_Rata_Usia = _.Usia.mean(), Total_Nilai = _.Nilai.sum() ) print("Summary per Kota:") print(summary)
Output :
Kota Rata_Rata_Usia Total_Nilai 0 Bandung 30.0 90.0 1 Jakarta 30.0 165.0 2 None NaN 75.0 3 Surabaya 28.0 NaN
Chaining Operations dengan %>%
Di Python, kita bisa menggunakan >>
sebagai pengganti %>%
di R.
Contoh :
result = ( df >> filter(_.Usia.notna()) >> mutate(Usia_Group = if_else(_.Usia > 30, "Dewasa", "Muda")) >> group_by(_.Usia_Group) >> summarize(Count = _.ID.count()) ) print("Group by Usia:") print(result)
Output :
Usia_Group Count 0 Dewasa 1 1 Muda 3
Kelebihan dan Kekurangan
Kelebihan dplyr-style :
- Kode lebih ekspresif dan mudah dibaca.
- Mirip dengan sintaks R, cocok untuk yang sudah familiar dengan R.
- Mendukung operasi kompleks dengan chaining.
Kekurangan :
- Tidak sepopuler Pandas di Python.
- Dokumentasi lebih terbatas dibanding Pandas.
Alternatif : dplyr-style dengan Pandas
Jika tidak ingin install siuba
, bisa menggunakan Pandas dengan method chaining :
# Contoh gaya dplyr dengan Pandas murni result_pandas = ( df .query("Usia > 25") .assign(Status=lambda x: x["Nilai"].apply(lambda y: "Lulus" if y >= 80 else "Gagal")) .groupby("Kota") .agg({"Usia": "mean", "Nilai": "sum"}) ) print("Hasil dengan Pandas:") print(result_pandas)
Kesimpulan
Fungsi | Kegunaan | Contoh |
---|---|---|
select() |
Memilih kolom | df >> select(_.col1, _.col2) |
filter() |
Filter baris | df >> filter(_.age > 30) |
mutate() |
Menambah kolom baru | df >> mutate(new_col = _.col1 + 1) |
group_by() |
Group data untuk aggregasi | df >> group_by(_.city) |
summarize() |
Aggregasi data | df >> summarize(avg = _.col.mean()) |
Tips :
- Gunakan
siuba
untuk sintaks lebih mirip dplyr. - Untuk performa kritikal, pertimbangkan Pandas murni.