Format Panjang dan Lebar

Prinsip tidy data, perbedaan format panjang dan lebar, serta kapan masing-masing dipakai.

Daftar isi

Satu dataset dapat disusun menjadi tabel panjang maupun tabel lebar, dan kedua susunan itu memengaruhi kemudahan analisis berikutnya. Topik ini membahas prinsip tidy data, perbedaan bentuk panjang dan bentuk lebar pada log sensor suhu tiga ruangan, serta pertimbangan memilih bentuk untuk agregasi, plot, dan laporan. Setelah membaca, keputusan mengubah bentuk tabel dapat diambil secara sadar sebelum menggunakan pivot, melt, stack, unstack, dan crosstab.

Tiga aturan tidy data#

Tidy data adalah konvensi penyusunan tabel yang menuntut setiap variabel menempati satu kolom, setiap pengamatan menempati satu baris, dan setiap unit observasi menempati satu tabel. Variabel adalah besaran yang dicatat, misalnya waktu, ruang, dan suhu. Pengamatan adalah satu kejadian terukur, misalnya satu bacaan sensor pada satu waktu untuk satu ruang. Unit observasi adalah jenis objek yang diamati, dan pada jalur ini unitnya adalah satu bacaan sensor.

Prinsip tersebut dirangkum sebagai berikut:

  • setiap variabel menempati satu kolom
  • setiap pengamatan menempati satu baris
  • setiap unit observasi menempati satu tabel

Ketiga aturan itu tampak sederhana tetapi sering dilanggar ketika laporan disusun untuk manusia. Tabel yang berisi satu kolom per ruangan melanggar aturan pertama karena variabel ruang tersebar pada nama-nama kolom. Pelanggaran semacam ini tidak menghentikan analisis, tetapi menyulitkan operasi umum seperti menyaring baris untuk satu ruangan tertentu atau mengagregasi seluruh ruangan sekaligus. Konvensi tidy data menyelesaikan masalah itu dengan menyimpan kategori pada kolom tersendiri, sehingga setiap operasi cukup membaca nilai kolom tersebut.

Bentuk panjang pada data mini#

Format panjang menyimpan setiap pengamatan sebagai satu baris yang terdiri atas kolom identitas, kolom kategori, dan kolom nilai. Jalankan potongan kode berikut pada data mini enam baris, yaitu bacaan suhu dua titik waktu untuk tiga ruangan.

python Data mini log sensor dalam bentuk panjang
import pandas as pd

panjang = pd.DataFrame({
    "waktu": ["08:00", "08:00", "08:00", "08:15", "08:15", "08:15"],
    "ruang": ["Lab A", "Lab B", "Ruang Arsip", "Lab A", "Lab B", "Ruang Arsip"],
    "suhu_c": [23.5, 22.8, 21.0, 23.9, 22.6, 20.9],
})
panjang.to_csv("mini_log.csv", index=False)  # disimpan agar blok berikutnya cukup membaca berkas ini
print(panjang)
text Keluaran
   waktu        ruang  suhu_c
0  08:00        Lab A    23.5
1  08:00        Lab B    22.8
2  08:00  Ruang Arsip    21.0
3  08:15        Lab A    23.9
4  08:15        Lab B    22.6
5  08:15  Ruang Arsip    20.9

Kolom ruang menyimpan kategori sebagai data biasa, sehingga menambah ruang baru hanya berarti menambah baris tanpa mengubah struktur tabel. Nilai waktu sengaja diulang pada beberapa baris karena satu titik waktu memuat tiga pengamatan, satu untuk setiap ruang. Susunan seperti ini terlihat bertele-tele bagi manusia, tetapi justru bentuk inilah yang dituntut oleh groupby, penyaringan baris, dan sebagian besar fungsi plot. Diagram berikut merangkum hubungan kedua bentuk beserta fungsi pengubahnya.

Hubungan bentuk panjang dan bentuk lebarBentuk panjangBentuk lebarwakturuangsuhu_c08:00Lab A23.508:00Lab B22.808:00Ruang Arsip21.008:15Lab A23.9waktuLab ALab BRuang Arsip08:0023.522.821.008:1523.922.620.9pivotmelt
Hubungan bentuk panjang dan bentuk lebar beserta fungsi pengubahnya

Bentuk lebar hasil pivot#

Format lebar menempatkan setiap kategori pada kolom tersendiri, sehingga satu baris memuat satu titik waktu beserta seluruh bacaannya. Fungsi pivot melakukan perubahan itu melalui tiga argumen utama, yaitu index sebagai baris, columns sebagai sumber nama kolom baru, dan values sebagai pengisi sel. Baca kembali data mini dari berkasnya, lalu putar menjadi tabel lebar.

python Memutar data mini ke bentuk lebar dengan pivot
import pandas as pd

panjang = pd.read_csv("mini_log.csv")
lebar = panjang.pivot(index="waktu", columns="ruang", values="suhu_c")
print(lebar)
text Keluaran
ruang  Lab A  Lab B  Ruang Arsip
waktu
08:00   23.5   22.8         21.0
08:15   23.9   22.6         20.9

Nilai unik pada kolom ruang, yaitu Lab A, Lab B, dan Ruang Arsip, menjadi nama kolom baru, sedangkan kolom waktu menjadi indeks baris. Setiap sel kini menyimpan satu suhu dan jumlah barisnya tinggal dua, sesuai jumlah titik waktu yang unik. Perbandingan antarruangan terbaca menyamping tanpa penyaringan apa pun, dan itulah kegunaan utama bentuk lebar.

Memilih bentuk sesuai kebutuhan#

Bentuk panjang menjadi pilihan utama untuk agregasi dan analisis karena kolom kategorinya tersedia sebagai data biasa. Bentuk lebar menjadi pilihan utama untuk laporan karena pembaca manusia membandingkan nilai secara menyamping. Baca kembali data mini, lalu jalankan agregasi berikut untuk melihat alasannya.

python Rata-rata suhu per ruang dengan groupby
import pandas as pd

panjang = pd.read_csv("mini_log.csv")
print(panjang.groupby("ruang")["suhu_c"].mean())
text Keluaran
ruang
Lab A          23.70
Lab B          22.70
Ruang Arsip    20.95
Name: suhu_c, dtype: float64

Satu panggilan groupby langsung menghasilkan rata-rata per ruang tanpa langkah tambahan. Operasi yang sama pada bentuk lebar menuntut pemilihan kolom satu per satu karena kategori tertanam pada nama kolom, bukan pada nilai data. Sebaliknya, laporan bagi petugas gedung lebih mudah dibaca dalam bentuk lebar karena ketiga ruangan terlihat berdampingan pada satu baris waktu. Panduan pemilihannya dirangkum sebagai berikut:

  • gunakan bentuk panjang untuk groupby, penyaringan per kategori, dan plot multi-seri
  • gunakan bentuk lebar untuk laporan, tabel ringkasan, dan pemeriksaan visual menyamping
  • ubah bentuk melalui pivot dan melt alih-alih menyalin data secara manual

Ringkasan#

  • Tidy data menuntut satu variabel satu kolom, satu pengamatan satu baris, dan satu unit observasi satu tabel.
  • Bentuk panjang menyimpan kategori sebagai nilai kolom sehingga siap untuk groupby dan plot multi-seri.
  • Bentuk lebar menyimpan kategori sebagai nama kolom sehingga nyaman untuk laporan dan perbandingan menyamping.
  • pivot mengubah panjang menjadi lebar, sedangkan melt mengubah lebar menjadi panjang sebagaimana dibahas pada topik melt.

Referensi#