Using Libraries Dplyr for Data Cleanup

Using Libraries Dplyr for Data Cleanup

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 %>% menggunakan df.pipe() atau library dfply)
  • 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

python
pip install siuba pandas

Import Library

python
from siuba import *
from siuba.dply.verbs import *
import pandas as pd

Contoh Dataset

python
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

python
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

python
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

python
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

python
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

python
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

python
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 :

python
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 :

python
# 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.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *