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:

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

text
T = 4×3 table
     Nama        Harga    Stok
    ________     _____    ____
    {'Kopi'}       15      120
    {'Teh' }        8      200
    {'Gula'}       12       80
    {'Susu'}       20       50

Mari kita bedah baris-baris kode di atas:

  1. 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.
  2. 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:

SintaksMengembalikanTipe hasil
T.Hargaseluruh isi kolom Hargaarray 4×1
T{2, 'Harga'}elemen baris 2 kolom Hargaskalar
T(2, 'Harga')satu selisah baris-kolom itutable 1×1
T(:, {'Harga','Stok'})dua kolom pilihantable 4×2
T(1:2, :)dua baris pertamatable 2×3
matlab
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:

text
ans =
    15
     8
    12
    20

Rata-rata harga : 13.75
Harga baris 2    : 8
Total stok       : 450

Mari kita bedah hasil tersebut:

  1. T.Harga: dot notation mengeluarkan kolom harga sebagai array 4×1 — siap diumpankan ke mean, sum, atau mask logis seperti vektor biasa.
  2. T{2, 'Harga'}: kurung kurawal menembus pembungkus table dan menyerahkan elemen mentahnya — skalar 8; nama kolom boleh dipakai sebagai indeks kolom.
  3. mean(T.Harga) dan sum(T.Stok): statistik chapter sebelumnya bekerja tanpa perubahan — 55/4 = 13.75 untuk rata-rata, 120+200+80+50 = 450 untuk total stok.

Menyeleksi dan Mengurutkan Baris #

Seleksi baris memakai mask logis pada kolom — persis pola filtering Chapter Filtering Data, hanya kolumnya kini bernama:

matlab
Tmurah = T(T.Harga < 15, :)

Output yang Dihasilkan:

text
Tmurah = 2×3 table
     Nama        Harga    Stok
    ________     _____    ____
    {'Teh' }        8      200
    {'Gula'}       12       80

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

matlab
TUrut = sortrows(T, 'Harga')
head(T, 2)
tail(T, 2)

Output yang Dihasilkan:

text
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       50

sortrows(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:

matlab
summary(T)

Output yang Dihasilkan:

text
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     65

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

matlab
A = table2array(T(:, {'Harga','Stok'}))

Output yang Dihasilkan:

text
A = 4×2
    15   120
     8   200
    12    80
    20    50

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

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

text
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'}       20

standardizeMissing(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:

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

text
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.55

Mari kita bedah hasil tersebut:

  1. TT: kolom Time menampung datetime (formatnya kita atur lewat properti Format), dan pengukuran tidak berjarak genap — 30 menit, 35 menit, 35 menit.
  2. 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.
  3. 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.