Data pengukuran yang berulang dalam waktu membawa dua hal sekaligus, yaitu kapan nilai diambil dan berapa nilai yang terbaca. Topik ini membahas penataan data semacam itu dengan tipe timetable, mulai dari konsep data bertanda waktu dan pembuatan timetable dari kolom waktu dan kolom nilai. Pengaturan ulang jadwal memakai retime dan timerange, sedangkan pemodelan deret waktu dapat dikerjakan dengan vektor numerik yang berjalan pada semua implementasi. Setelah membaca topik ini, deret pengukuran seperti catatan suhu tiap lima menit dapat disimpan secara teratur dan diolah berdasarkan waktu sampelnya.
Data bertanda waktu dan konvensi kolom pertama#
Deret waktu tersusun atas waktu sampel dan variabel terukur. Waktu sampel adalah saat pengukuran dilakukan, misalnya menit ke-0, ke-5, dan ke-10, sedangkan variabel terukur adalah nilai yang terbaca pada saat itu, misalnya suhu ruang. Kedua kolom ini harus sejajar: nilai suhu kedua milik waktu kedua, dan setiap pergeseran baris akan memalsukan hubungan keduanya. Konvensi yang berlaku luas menempatkan waktu pada kolom pertama matriks data dan nilai terukur pada kolom-kolom berikutnya, sehingga satu baris selalu mewakili satu peristiwa pengukuran yang utuh.
Konvensi ini muncul dari bentuk dasar MATLAB sebagai bahasa matriks. Fungsi pembaca berkas menghasilkan matriks, fungsi plot memasangkan kolom pertama sebagai sumbu datar dengan kolom kedua sebagai sumbu tegak, dan fungsi agregat merangkum kolom demi kolom. Ketika waktu menempati kolom pertama, seluruh fungsi itu bekerja tanpa penyesuaian tambahan. Kebutuhan yang tidak terlayani oleh matriks biasa adalah perlindungan terhadap kecocokan baris serta operasi yang mengerti satuan waktu. Dua kebutuhan itulah yang dijawab oleh timetable.
Membuat timetable dari kolom waktu dan kolom nilai#
Timetable adalah table yang kolom pertamanya berupa waktu dan diperlakukan khusus. Kolom waktu bertipe datetime, yaitu penanda tanggal dan jam, sehingga satu jadwal dapat memuat pengukuran lintas hari tanpa kehilangan makna. Kolom berikutnya adalah variabel terukur. Fungsi timetable menyatukan keduanya dan menamai kolom waktu secara otomatis sebagai Time.
% tidak-dijalankan
% waktu sampel tiap 5 menit selama satu jam
waktu = datetime(2026, 1, 1, 0, 0, 0) + minutes(0:5:60)';
% nilai suhu yang terukur pada tiap waktu sampel
suhu = [21.5 21.6 21.8 22.1 22.3 22.5 22.4 22.2 22.0 21.9 21.7 21.6 21.5]';
% satukan menjadi satu jadwal
tt = timetable(waktu, suhu);Mengetik tt menampilkan jadwal dua kolom: kolom Time berisi waktu sampel dan kolom suhu berisi nilai terukurnya. Konstruksi datetime(2026, 1, 1, 0, 0, 0) + minutes(0:5:60)' membangun waktu sampel dari satu titik awal ditambah durasi kelipatan lima menit, sehingga jadwal dapat dibuat tanpa menuliskan tiga belas waktu satu per satu. Seluruh kemampuan akses table tetap berlaku, misalnya tt.suhu mengambil kolom nilai dan tt(1:4, :) mengambil empat pengukuran pertama beserta waktunya.
Mengatur ulang jadwal dengan retime dan timerange#
Dua pekerjaan yang paling sering dihadapi pada data bertanda waktu adalah menyamakan jarak sampel dan mengambil potongan pada suatu jendela waktu. Fungsi retime menyampel ulang seluruh jadwal ke jarak waktu baru dengan metode pilihan, misalnya interpolasi linear untuk data yang berubah halus. Fungsi timerange membentuk jendela waktu dua sisi yang dapat dipakai untuk memotong jadwal seperti memotong baris matriks.
% tidak-dijalankan
% sampel ulang setiap 15 menit dengan interpolasi linear
tt15 = retime(tt, 'regular', 'linear', 'TimeStep', minutes(15));
% potong jadwal pada jendela menit ke-10 sampai ke-40
jendela = timerange(waktu(3), waktu(8));
tt(jendela, :)
% urutkan baris berdasarkan waktu sampel
sortrows(tt)Penyampelan ulang menjadi lima belas menit menghasilkan jadwal baru yang lebih pendek dengan nilai antara yang dihitung dari data asli, sehingga dua sumber data dengan jarak sampel berbeda dapat disandingkan. Jendela waktu bekerja seperti pengindeksan baris namun dengan menyebut batas waktunya, bukan nomor barisnya, sehingga potongan tetap benar ketika baris ditambah atau dihapus. Fungsi sortrows untuk timetable mengurutkan berdasarkan waktu sampel dan menjadi langkah pembersihan pertama untuk data yang datang tidak berurutan dari alat pencatat.
Memodelkan deret waktu dengan vektor numerik#
Pemodelan deret waktu tanpa timetable kembali pada konvensi kolom pertama: waktu menjadi vektor numerik dan nilai terukur menjadi vektor pendampingnya. Vektor waktu t berisi menit pengukuran dari nol sampai enam puluh dengan jarak lima menit, dan vektor suhu berisi tiga belas nilai terukur yang sejajar dengannya.
t = (0:5:60)';
suhu = [21.5 21.6 21.8 22.1 22.3 22.5 22.4 22.2 22.0 21.9 21.7 21.6 21.5]';
size(t)
size(suhu)ans =
13 1
ans =
13 1Kedua vektor berukuran sama sehingga pasangan waktu dan nilai terjaga oleh dimensi itu sendiri. Penggabungan [t suhu] membentuk matriks data dengan konvensi kolom pertama waktu, dan empat baris pertamanya memperlihatkan bentuk data yang sudah tertata.
data = [t suhu];
data(1:4, :)ans =
0 21.5000
5.0000 21.6000
10.0000 21.8000
15.0000 22.1000Analisis deret pada bentuk ini memakai fungsi vektor biasa. Fungsi diff menghitung selisih antar sampel berurutan, dan selisih itu membuka pertanyaan seperti kenaikan suhu terbesar yang pernah terjadi sepanjang pengukuran. Posisi hasil max dipetakan kembali ke t untuk mengetahui menit ke berapa kenaikan itu terjadi, dan diff pada vektor waktu memeriksa bahwa jarak sampel memang seragam.
selisih = diff(suhu);
[maks, pos] = max(selisih);
fprintf('kenaikan terbesar %.1f derajat setelah menit ke-%d\n', maks, t(pos));
fprintf('jarak sampel rata-rata %.0f menit\n', mean(diff(t)));kenaikan terbesar 0.3 derajat setelah menit ke-10
jarak sampel rata-rata 5 menitKenaikan terbesar sebesar 0,3 derajat terjadi sesudah menit ke-10, sesuai data yang memang naik paling curam dari 21,8 menjadi 22,1. Selisih ke-i milik jarak antara sampel ke-i dan ke-i+1, sehingga pembacaan posisinya harus memperhitungkan pergeseran satu langkah itu. Kelemahan vektor numerik juga terlihat di sini: menit hanyalah angka, tidak membawa tanggal dan jam, dan keseragaman jarak sampel harus diperiksa manual karena tidak ada mekanisme yang menjaganya.
Alur lengkap dari waktu sampel ke ringkasan#
Skrip berikut merangkai pemodelan deret waktu secara utuh: membangun vektor waktu, membangun vektor suhu, menggabungkannya menjadi matriks berkonvensi kolom pertama, lalu menghitung kenaikan terbesar dari selisih antar sampel. Skrip ini berjalan pada kedua implementasi dan dapat disalin apa adanya.
% deret_suhu.m: deret waktu suhu dengan waktu pada kolom pertama
% waktu sampel tiap 5 menit selama satu jam
t = (0:5:60)';
% nilai suhu yang terukur pada tiap waktu sampel
suhu = [21.5 21.6 21.8 22.1 22.3 22.5 22.4 22.2 22.0 21.9 21.7 21.6 21.5]';
% konvensi kolom pertama waktu, kolom berikutnya nilai terukur
data = [t suhu];
fprintf('ukuran data: %d baris, %d kolom\n', size(data, 1), size(data, 2));
disp('empat baris pertama:');
disp(data(1:4, :));
% selisih antar sampel
selisih = diff(suhu);
[maks, pos] = max(selisih);
fprintf('kenaikan terbesar %.1f derajat setelah menit ke-%d\n', maks, t(pos));ukuran data: 13 baris, 2 kolom
empat baris pertama:
0 21.5000
5.0000 21.6000
10.0000 21.8000
15.0000 22.1000
kenaikan terbesar 0.3 derajat setelah menit ke-10Matriks data berukuran tiga belas baris karena jarak lima menit selama satu jam menghasilkan tiga belas waktu sampel, termasuk titik awal dan titik akhirnya. Skrip ini memadai sebagai titik awal karena seluruh analisis deret dasar sudah dapat dikerjakan. Ketika data berpindah ke MATLAB dengan kebutuhan jadwal lintas hari atau penyatuan banyak sumber, strukturnya tinggal dipindahkan ke timetable tanpa mengubah makna kolomnya. Waktu pada kolom pertama menjadi datetime, matriks menjadi timetable, dan fungsi diff manual digantikan retime serta timerange.
Kesalahan umum#
- Waktu disimpan sebagai teks. Label seperti
'00:05'tampak rapi namun tidak dapat dihitung selisihnya, sehingga diff gagal atau menghasilkan perilaku yang tidak berarti. Simpan waktu sebagai angka menit pada vektor numerik, atau sebagai datetime dan duration pada timetable, agar pengurangan waktu tetap bermakna. - Membaca posisi hasil diff tanpa pergeseran. Selisih ke-i menghubungkan sampel ke-i dengan sampel ke-i+1, sehingga selisih pada posisi satu terjadi antara menit ke-0 dan ke-5, bukan pada menit ke-0 saja. Kesalahan pembacaan satu langkah membuat laporan waktu menjadi salah lima menit. Petakan posisi hasil ke
t(pos)dengan kesadaran bahwa kenaikan itu terjadi setelah titik tersebut. - Data yang tidak terurut. Pengukuran dari alat pencatat kadang datang tidak berurutan sehingga diff menghasilkan nilai negatif yang membingungkan ringkasan. Urutkan deret berdasar waktu lebih dahulu dengan sortrows pada timetable atau
[~, urutan] = sort(t)pada vektor numerik sebelum menghitung selisih.
Ringkasan#
- Deret waktu terdiri atas waktu sampel dan variabel terukur yang harus sejajar baris demi baris, dengan konvensi waktu menempati kolom pertama.
- Timetable menyatukan kolom waktu bertipe datetime dengan kolom nilai, lalu menyediakan retime untuk penyampelan ulang dan timerange untuk pemotongan jendela waktu.
- Pemodelan dengan vektor numerik
tdansuhuberjalan pada semua implementasi, dengan diff untuk selisih antar sampel dan pemeriksaan keseragaman jarak sampel. - Posisi hasil diff bergeser satu langkah karena setiap selisih milik jarak antara dua sampel berurutan.
Referensi#
- timetable — MathWorks — Rujukan tipe timetable beserta pembuatannya dari kolom waktu dan kolom nilai.
- retime untuk timetable — MathWorks — Rujukan penyampelan ulang jadwal dengan metode interpolasi.
- timerange — MathWorks — Rujukan pembentukan jendela waktu untuk memotong jadwal.
- diff — MathWorks — Rujukan fungsi diff untuk selisih antar elemen berurutan.