Ketika menangani dataset di dunia nyata, kita tidak bisa mengharapkan dataset selalu sesuai dengan yang kita inginkan. Kadang-kadang, data perlu diubah menjadi format lain agar lebih mudah ditangani. Salah satu caranya adalah dengan mengubah data dengan format wide menjadi format long.
Kita sering menemui data dalam format wide; setiap baris adalah data, dan kolom adalah fitur data. Mari saya beri contoh dengan menggunakan dataset product sales data dari Kaggle (Lisensi: CC BY-NC-SA 4.0) oleh Soumyadipta Das.
import pandas as pd
df = pd.read_csv('time series data.csv')
df.head()
Dalam dataset di atas, setiap baris adalah waktu terjadinya penjualan. Di sisi lain, kolom adalah jenis produk dan kategori pendukung lainnya (price, temperature).
Dataset di atas sudah bagus, tetapi mungkin sulit jika kita ingin melakukan agregasi pada level produk. Itu sebabnya kita bisa mengubah data menjadi format long untuk memudahkan analisis. Untuk melakukannya, kita bisa menggunakan fungsi melt dari Pandas.
Fungsi Pandas Melt
Fungsi Pandas melt digunakan untuk mengubah dataset dari format wide menjadi format long. Apa itu dataset format long? Ini adalah dataset di mana barisnya adalah data dari kombinasi variabel dan nilai-nilainya.
Secara teknis, kita melakukan unpivoting pada dataset untuk mendapatkan dataset dengan lebih sedikit kolom dan lebih banyak baris. Mari coba fungsi melt untuk memahami lebih baik.
pd.melt(df)
Kita mendapatkan dataset format long dari output di atas. Dataset tersebut hanya berisi dua kolom; variable, yang merupakan nama kolom dalam dataset format wide, serta value, yang merupakan nilai data untuk setiap baris dalam format wide.
Sebagai contoh, kolom t sekarang diperlakukan sebagai observasi data sebanyak jumlah baris dalam dataset asli dengan nilai-nilai yang sesuai. Pada dasarnya, fungsi melt menyediakan pasangan key-value dari data format wide.
Sekarang kita bisa membuat kategori berdasarkan pada level produk. Bandingkan dengan format wide yang tidak akan bisa kita lakukan karena produk pada data format wide menjadi nama kolom. Mari kita coba melakukannya dengan fungsi melt.
pd.melt(
df,
id_vars=["t"],
value_vars=["ProductP1", "ProductP2"],
var_name="Product",
value_name="Sales",
)
Dalam kode di atas, kita menentukan kolom t sebagai pengidentifikasi data dan ProductP1 dengan ProductP2 sebagai kategori. Untuk memudahkan pembacaan, kita mengubah nama variabel menjadi Product dan nilainya menjadi Sales.
Sekarang, dengan kode di atas, untuk setiap jangka waktu t, kita mendapatkan dua kategori Produk berbeda dengan nilainya masing-masing. Ini membuat analisis dataset lebih intuitif karena perbandingan kelompok lebih eksplisit.
Kita juga bisa melting dataset dengan metode DataFrame. Kode ini bekerja sama persis dengan contoh di atas.
df.melt(
id_vars=["t"],
value_vars=["ProductP1", "ProductP2"],
var_name="Product",
value_name="Sales",
)
Anda bisa memilih preferensi metode melting data tergantung pada pipeline data Anda. Tidak ada perbedaan sama sekali dalam hasil antara kedua metode tersebut.
Juga dimungkinkan untuk menambahkan lebih banyak pengidentifikasi ke dataset yang sudah di-melting. Untuk melakukannya, kita hanya perlu menentukan semua pengidentifikasi yang dimaksud dalam parameter id_vars. Misalnya, saya akan menambahkan kolom price sebagai pengidentifikasi tambahan.
pd.melt(
df,
id_vars=["t", "price"],
value_vars=["ProductP1", "ProductP2"],
var_name="Product",
value_name="Sales",
)
Hasilnya adalah kolom t dan price sebagai pengidentifikasi dataset. Metode di atas akan berguna ketika Anda memiliki beberapa key dalam dataset format wide yang tidak ingin Anda hapus.
Untuk referensi lebih lanjut tentang fungsi melt Pandas, Anda bisa mengunjungi dokumentasi Pandas.
Kesimpulan
Data format long terkadang lebih disukai dibandingkan data format wide. Kadang-kadang, yang ini kita analisis adalah kolom, dan satu-satunya cara untuk mendapatkannya adalah dengan melakukan unpivoting pada data. Dengan menggunakan fungsi melt dari Pandas, kita berhasil mengubah data format wide menjadi format long yang berisi kombinasi key-value dari nama kolom dan nilai-nilai dari data asli.
Comments