Matriks bagus untuk angka murni, tetapi data nyata jarang semurni itu: satu kolom nama produk, satu kolom harga, satu kolom stok, masing-masing dengan tipe dan makna sendiri. Menyimpannya sebagai matriks memaksa kita menghafal “kolom 2 itu harga” — rawan salah dan tidak terbaca manusia. MATLAB menjawabnya dengan table: struktur berkolom bernama yang boleh memuat tipe berbeda, dan timetable yang menambahkan stempel waktu pada tiap baris — fondasi readtable, sortrows, hingga summary.
Membuat table #
Aturannya: table(var1, var2, ...) merangkai variabel berjumlah baris sama menjadi satu tabel, dan 'VariableNames' memberi nama tiap kolom. Mekanismenya: tiap argumen menjadi satu variable tabel — cell array untuk teks, vektor numerik untuk angka — lalu MATLAB melengkapi metadata yang bisa kita baca lewat T.Properties. Kita bangun tabel inventori toko:
namaA = {'Kopi'; 'Teh'; 'Gula'; 'Susu'};
hargaA = [15; 8; 12; 20];
stokA = [120; 200; 80; 50];
T = table(namaA, hargaA, stokA, 'VariableNames', {'Nama','Harga','Stok'})Output yang Dihasilkan:
T = 4×3 table
Nama Harga Stok
________ _____ ____
{'Kopi'} 15 120
{'Teh' } 8 200
{'Gula'} 12 80
{'Susu'} 20 50Mari kita bedah baris-baris kode di atas:
- Baris 1-3 (tiga variabel): ketiganya berukuran 4×1 — syarat wajib table; nama berupa cell array of char (teks panjang bervariasi), harga dan stok kolom numerik.
- Baris 4 (
table(...)): tiga kolom terangkai;'VariableNames'berupa cell array berisi tiga nama. Tanpa opsi ini, MATLAB memakai nama variabel workspace (namaA,hargaA,stokA).
Tampilan Command Window meniru spreadsheet: ukuran 4×3, kepala kolom bernama, garis putus _, teks rata kiri dalam kurung kurawal, angka rata kanan. Tiap barisnya adalah satu observation — satu produk.
Mengakses Data: dot, Kurung Kurawal, Kurung Biasa #
Aturan fundamentalnya: tiga jalur akses dengan TIPE hasil berbeda. Mekanismenya: dot notation mengambil isi satu variable, {} mengambil elemen mentah (array/skalar), dan () mengembalikan potongan table yang tetap utuh:
| Sintaks | Mengembalikan | Tipe hasil |
|---|---|---|
T.Harga | seluruh isi kolom Harga | array 4×1 |
T{2, 'Harga'} | elemen baris 2 kolom Harga | skalar |
T(2, 'Harga') | satu selisah baris-kolom itu | table 1×1 |
T(:, {'Harga','Stok'}) | dua kolom pilihan | table 4×2 |
T(1:2, :) | dua baris pertama | table 2×3 |
T.Harga
fprintf('Rata-rata harga : %.2f\n', mean(T.Harga));
fprintf('Harga baris 2 : %g\n', T{2, 'Harga'});
fprintf('Total stok : %g\n', sum(T.Stok));Output yang Dihasilkan:
ans =
15
8
12
20
Rata-rata harga : 13.75
Harga baris 2 : 8
Total stok : 450Mari kita bedah hasil tersebut:
T.Harga: dot notation mengeluarkan kolom harga sebagai array 4×1 — siap diumpankan kemean,sum, atau mask logis seperti vektor biasa.T{2, 'Harga'}: kurung kurawal menembus pembungkus table dan menyerahkan elemen mentahnya — skalar8; nama kolom boleh dipakai sebagai indeks kolom.mean(T.Harga)dansum(T.Stok): statistik chapter sebelumnya bekerja tanpa perubahan —55/4 = 13.75untuk rata-rata,120+200+80+50 = 450untuk total stok.
Menyeleksi dan Mengurutkan Baris #
Seleksi baris memakai mask logis pada kolom — persis pola filtering Chapter Filtering Data, hanya kolumnya kini bernama:
Tmurah = T(T.Harga < 15, :)Output yang Dihasilkan:
Tmurah = 2×3 table
Nama Harga Stok
________ _____ ____
{'Teh' } 8 200
{'Gula'} 12 80Mekanismenya: T.Harga < 15 menghasilkan logical 4×1; sebagai indeks baris, mask memilih produk Teh dan Gula sementara seluruh kolom (:) ikut terbawa. Pengurutan naik ke level baris dengan sortrows:
TUrut = sortrows(T, 'Harga')
head(T, 2)
tail(T, 2)Output yang Dihasilkan:
TUrut = 4×3 table
Nama Harga Stok
________ _____ ____
{'Teh' } 8 200
{'Gula'} 12 80
{'Kopi'} 15 120
{'Susu'} 20 50
ans = 2×3 table
Nama Harga Stok
________ _____ ____
{'Kopi'} 15 120
{'Teh' } 8 200
ans = 2×3 table
Nama Harga Stok
________ _____ ____
{'Gula'} 12 80
{'Susu'} 20 50sortrows(T, 'Harga') mengurutkan baris menurut kolom Harga menaik — tambahkan 'descend' untuk arah sebaliknya, atau daftar kolom {'Stok','Harga'} untuk pengurutan majemuk. head(T, 2) dan tail(T, 2) mengambil cuplikan awal dan akhir tabel — sangat berguna saat inspeksi tabel besar (defaultnya 8 baris).
Ringkasan Statistik dan Konversi #
Fungsi summary memeriksa seluruh tabel sekali jalan: tipe setiap variable, jumlah data hilang, plus statistik kolom numerik:
summary(T)Output yang Dihasilkan:
T: 4×3 table
Variables:
Nama: cell (4 rows)
Harga: double
Stok: double
Statistics for applicable variables:
NumMissing Min Median Max Mean Std
Harga 0 8 13.5 20 13.75 5.058
Stok 0 50 100 200 112.5 65Blok statistik tersebut menghitung ulang seluruh rumus chapter Statistical Summary — median([8 12 15 20]) = 13.5, std versi sampel — tanpa satu fprintf pun. Arus balik ke dunia matriks dilayani table2array, sedangkan T.Variables adalah jalan pintas untuk tabel yang seluruh kolomnya numerik:
A = table2array(T(:, {'Harga','Stok'}))Output yang Dihasilkan:
A = 4×2
15 120
8 200
12 80
20 50Konversi hanya sah bila seluruh kolom yang diambil sejenis; mencampur kolom teks ke dalam table2array memicu galat, dan untuk tipe campuran MATLAB menyediakan table2cell.
Row Names dan Nilai Nonstandard #
Baris juga bisa bernama — pengganti indeks angka yang jauh lebih mudah dibaca. Mekanismenya: opsi 'RowNames' menempatkan cell array sebagai label baris, dan nama baris ikut terurut saat kita memanggil sortrows. Nilai “hilang” versi kotor — kode sentinel seperti -99 yang lazim dipakai alat pencatat lama — dibersihkan oleh standardizeMissing menjadi penanda standar NaN:
kode = {'P001'; 'P002'; 'P003'; 'P004'};
T2 = table(hargaA, stokA, 'RowNames', kode, 'VariableNames', {'Harga','Stok'})
hargaB = [15; 8; -99; 20];
T3 = table(namaA, hargaB, 'VariableNames', {'Nama','Harga'});
T3B = standardizeMissing(T3, -99)Output yang Dihasilkan:
T2 = 4×2 table
Harga Stok
_____ ____
P001 15 120
P002 8 200
P003 12 80
P004 20 50
T3B = 4×2 table
Nama Harga
________ _____
{'Kopi'} 15
{'Teh' } 8
{'Gula'} NaN
{'Susu'} 20standardizeMissing(T3, -99) mengganti setiap -99 menjadi NaN — dari situ seluruh perangkat NaN dari Chapter Missing Data (mask, isnan, fillmissing) langsung berlaku. Untuk sentinel di kolom teks, sediakan daftar: standardizeMissing(T, {'', 'N/A'}).
Simpan dan Baca: readtable dan writetable #
Table dan file saling melengkapi: writetable(T, 'produk.csv') menulis tabel ke CSV (judul kolom ikut tercantum), dan Tbaca = readtable('produk.csv') membacanya kembali lengkap dengan nama kolom serta tipe yang ditebak otomatis. Kedua fungsi ini adalah pintu masuk dataset nyata — CSV, spreadsheet, teks — dan pembahasan mendalamnya (opsi impor, deteksi tipe, file besar) menunggu di Section Import dan Export Data.
Timetable: table Berstempel Waktu #
Saat tiap baris merekam kejadian pada WAKTU tertentu — sensor, harga saham, log — kita naik kelas ke timetable. Mekanismenya: kolom pertama khusus berisi waktu (datetime), disebut row times, dan seluruh fungsi analisis waktu menyadarinya. Kita rekam suhu sensor yang datang tidak beraturan:
waktu = datetime(2024, 6, 1, [8; 8; 9; 9], [10; 40; 15; 50], 0);
waktu.Format = 'yyyy-MM-dd HH:mm';
suhu = [28.2; 28.8; 30.1; 31.0];
TT = timetable(waktu, suhu, 'VariableNames', {'Suhu'})
TT2 = retime(TT, 'hourly', 'mean')Output yang Dihasilkan:
TT = 4×1 timetable
Time Suhu
____________ ____
2024-06-01 08:10 28.2
2024-06-01 08:40 28.8
2024-06-01 09:15 30.1
2024-06-01 09:50 31.0
TT2 = 2×1 timetable
Time Suhu
____________ _____
2024-06-01 08:00 28.5
2024-06-01 09:00 30.55Mari kita bedah hasil tersebut:
TT: kolomTimemenampungdatetime(formatnya kita atur lewat propertiFormat), dan pengukuran tidak berjarak genap — 30 menit, 35 menit, 35 menit.retime(TT, 'hourly', 'mean'): tabel disampel ulang ke jadwal tetap per jam; dua pengukuran jam 08 (28.2 dan 28.8) dirata-rata menjadi 28.5, dan jam 09 menghasilkan 30.55 — pola split-apply-combine Chapter Grouping Data yang kini dikerjakan menurut WAKTU.- Saudaranya
synchronize:synchronize(TT1, TT2)menyelaraskan dua timetable pada kumpulan waktu yang sama — misalnya sensor suhu 30-menitan digabung dengan sensor tekanan per jam.
Detail datetime, pengindeksan menurut waktu, dan strategi agregasi lanjutan dibahas tuntas di Section Struktur Data MATLAB.
Ringkasan #
table menyimpan observasi berkolom bernama dengan tipe berbeda: dot notation untuk mengambil isi kolom, {} untuk elemen mentah, () untuk sub-table, sortrows untuk mengurutkan baris, summary untuk statistik sekali jalan, dan standardizeMissing membersihkan kode sentinel. timetable menambahkan kolom waktu sehingga retime dan synchronize dapat menyampel ulang serta menyelaraskan data deret waktu. Satu jenis kolom yang belum kita bahas — kategori berlabel seperti rendah/sedang/tinggi — menjadi inti Chapter Categorical Data.