Analisis di MATLAB selalu bermula dari data yang berhasil masuk ke workspace. Topik ini membahas pengimporan data dari berkas: membaca CSV numerik dengan readmatrix, data campuran teks dan angka dengan readcell, padanan lintas implementasi csvread dan dlmread, serta textscan untuk berkas yang memuat baris judul. Setelah membaca topik ini, fungsi pembaca dapat dipilih sesuai bentuk berkas sehingga data mentah pengukuran maupun nilai ujian siap diolah tanpa pengetikan manual.
Membaca data numerik dengan readmatrix#
Fungsi readmatrix membaca satu berkas tabel dan mengembalikan isinya sebagai matriks numerik. Setiap baris berkas menjadi satu baris matriks, setiap kolom berkas menjadi satu kolom matriks, sehingga data hasil pengukuran berkolom seragam langsung siap diolah dengan operasi matriks biasa. Fungsi ini mengenali format dari ekstensi berkasnya, sehingga berkas .csv maupun .xlsx ditangani dengan pemanggilan yang sama. Sel yang kosong atau berisi teks yang tidak dapat dikonversi menjadi angka dilaporkan sebagai NaN, singkatan dari not a number, sehingga letak data yang hilang tetap terlihat pada hasil pembacaan.
% tidak-dijalankan
% baca seluruh isi berkas csv menjadi matriks numerik
M = readmatrix('data-suhu.csv');
% baca lembar pertama berkas excel menjadi matriks
X = readmatrix('pengukuran.xlsx');Nilai balik berupa matriks membuat readmatrix cocok ketika seluruh kolom berkas memang sejenis, misalnya catatan sensor yang seluruhnya berisi angka. Ketika berkas memuat kolom label seperti nama stasiun atau nama peserta ujian, pembacaan menjadi matriks tidak lagi tepat karena teks akan rusak menjadi NaN. Kebutuhan semacam itu dilayani oleh readcell yang dipaparkan pada bagian berikut.
Membaca data campuran dengan readcell#
Fungsi readcell membaca berkas menjadi cell array, yakni array yang setiap selnya dapat menampung nilai dengan tipe berbeda. Satu sel memuat teks, sel di sebelahnya dapat memuat angka, dan keduanya tetap utuh apa adanya. Akses satu nilai dilakukan dengan kurung kurawal berindeks, misalnya C{2, 1} mengambil sel baris kedua kolom pertama. Pola ini menjaga kolom nama tetap berupa teks pada saat kolom nilai sudah dapat diambil sebagai angka.
% tidak-dijalankan
% baca berkas excel yang memuat nama dan nilai ujian
C = readcell('nilai-uji.xlsx');
% ambil nama peserta pada baris kedua kolom pertama
nama = C{2, 1};
% ambil nilai ujian peserta itu pada kolom kedua
nilai = C{2, 2};Konsekuensi dari keleluasaan tipe adalah pemrosesan yang lebih hati-hati. Isi setiap sel perlu diperiksa kelasnya sebelum dipakai dalam perhitungan numerik, dan sel yang kosong tetap kosong sehingga pemeriksaan keberadaan nilai menjadi bagian dari alur pembersihan data. Untuk berkas yang seluruhnya numerik, readmatrix tetap menjadi pilihan yang lebih ringkas.
Padanan lintas implementasi: csvread dan dlmread#
Fungsi csvread membaca berkas CSV yang seluruh isinya numerik dan mengembalikan matriks, sehingga perilakunya sejajar dengan readmatrix untuk kasus berkas numerik murni. Berkas contoh berikut memuat catatan sensor suhu yang diambil tiap lima menit pada dua kolom, yaitu menit pengukuran dan suhu yang terbaca.
0,36.5
5,36.6
10,36.8
15,37.1
20,36.9
25,36.7Pembacaan seluruh isi berkas cukup memanggil csvread dengan satu argumen nama berkas. Ukuran hasilnya menegaskan bahwa enam baris dan dua kolom berkas menjadi matriks dengan bentuk yang sama.
M = csvread('data-suhu.csv')
size(M)M =
0 36.5000
5.0000 36.6000
10.0000 36.8000
15.0000 37.1000
20.0000 36.9000
25.0000 36.7000
ans =
6 2Fungsi dlmread melakukan tugas yang sama dengan dua keleluasaan tambahan, yaitu pembatas kolom dapat ditentukan sendiri dan bagian berkas yang dibaca dapat dibatasi ke satu rentang. Argumen pembatas diikuti dua angka yang menyatakan baris dan kolom awal pembacaan dengan penghitungan mulai dari nol. Pemanggilan berikut membaca berkas yang sama mulai baris ketiga sehingga dua pengukuran pertama dilewati.
D = dlmread('data-suhu.csv', ',', 2, 0)D =
10.000 36.800
15.000 37.100
20.000 36.900
25.000 36.700Hasilnya matriks empat kali dua berisi pengukuran menit ke-10 sampai ke-25. Pembatas koma tetap disebut secara eksplisit karena dlmread tidak mengkhususkan diri pada CSV, sehingga berkas berpembatas spasi, tab, atau titik koma dibaca dengan cara yang sama. Rentang pembacaan berguna ketika berkas memuat catatan panjang dan analisis hanya memerlukan jendela tertentu, tanpa perlu memuat seluruh isi ke memori.
Membaca berkas berjudul dengan textscan#
Berkas data sehari-hari sering memulai isinya dengan baris judul seperti nama kolom. Pembaca csvread tidak memahami baris judul sehingga berkas berikut perlu dibaca dengan fungsi yang dapat melewatinya.
menit,suhu
0,36.5
5,36.6
10,36.8
15,37.1
20,36.9
25,36.7Fungsi textscan membaca dari sebuah pegangan berkas (file handle) yang dibuka dengan fopen. Format %f%f berarti dua angka per baris, opsi HeaderLines melewati satu baris judul, dan opsi Delimiter menetapkan koma sebagai pembatas. Hasilnya berupa cell array yang setiap elemennya menampung satu kolom data. Pegangan berkas wajib ditutup dengan fclose setelah pembacaan selesai.
fid = fopen('catatan-suhu.csv', 'r');
data = textscan(fid, '%f%f', 'HeaderLines', 1, 'Delimiter', ',');
fclose(fid);
menit = data{1};
suhu = data{2};
fprintf('menit suhu\n');
fprintf('%5.0f %.1f\n', [menit'; suhu']);menit suhu
0 36.5
5 36.6
10 36.8
15 37.1
20 36.9
25 36.7Baris judul tidak pernah muncul pada hasil karena dilewati sebelum pembacaan angka dimulai. Format %f%f juga bekerja sebagai penyaring: baris yang tidak sesuai pola dua angka menghentikan pembacaan, sehingga teks yang menyusup di tengah data terdeteksi lebih cepat. Ketika berkas memuat kolom teks, formatnya ditulis dengan %s pada posisi kolom tersebut dan hasilnya tetap berupa kolom tersendiri di dalam cell array. Pola buka, baca, tutup seperti ini menjadi cetak biru untuk semua pembacaan berkas yang butuh kendali penuh atas format.
Alur lengkap dari berkas ke ringkasan#
Pembacaan baru berguna ketika hasilnya segera diolah. Skrip berikut merangkai seluruh langkah dari membaca berkas sampai menghitung ringkasan statistik. CSV dimuat dengan csvread, kolom menit dan kolom suhu dipisahkan lewat pengindeksan kolom, lalu skrip melaporkan banyak sampel, nilai tertinggi, dan rata-rata suhu. Skrip ini dapat dijalankan apa adanya karena berkas data-suhu.csv berada satu folder dengannya.
% impor_suhu.m: membaca berkas csv lalu menghitung ringkasan
% baca seluruh kolom numerik
M = csvread('data-suhu.csv');
% pisahkan menjadi dua kolom: waktu dan nilai terukur
menit = M(:, 1);
suhu = M(:, 2);
fprintf('banyak sampel: %d\n', numel(menit));
fprintf('suhu tertinggi: %.1f derajat\n', max(suhu));
fprintf('rata-rata suhu: %.2f derajat\n', mean(suhu));banyak sampel: 6
suhu tertinggi: 37.1 derajat
rata-rata suhu: 36.77 derajatPemisahan kolom dilakukan setelah pembacaan, bukan saat pembacaan, karena csvread memang mengembalikan satu matriks utuh. Rata-rata 36,77 derajat menegaskan bahwa seluruh isi berkas benar-benar ikut terbaca, karena nilai itu hanya dapat diperoleh dari keenam pengukuran. Pola pisah lalu olah seperti ini bekerja untuk berkas berapa pun banyak kolomnya selama seluruh kolom numerik. Ketika sumber data berganti, hanya baris pertama skrip yang perlu disesuaikan karena seluruh alur berikutnya bekerja atas matriks hasil pembacaan itu.
Memilih fungsi pembaca#
Tabel berikut merangkum fungsi pembaca beserta kegunaannya. Pilihan fungsi yang tepat bergantung pada dua hal, yaitu jenis data di dalam berkas dan kebutuhan kendali atas format pembacaan.
| Fungsi | Keluaran | Kekuatan | Kapan dipakai |
|---|---|---|---|
readmatrix | matriks numerik | format dikenali otomatis | seluruh kolom berupa angka |
readcell | cell array | tiap sel berisi tipe sendiri | kolom campuran teks dan angka |
csvread | matriks numerik | padanan lintas implementasi | CSV numerik murni |
dlmread | matriks numerik | pembatas bebas dan rentang | berkas teks berpembatas selain koma |
textscan | cell array kolom | format dan baris judul diatur sendiri | berkas berjudul atau format khusus |
Fungsi modern readmatrix dan readcell tetap menjadi pilihan utama pada MATLAB karena keduanya mengenali format berkas secara otomatis dan menangani sel kosong dengan teratur. Fungsi klasik csvread, dlmread, dan textscan dipertahankan karena berjalan pada kedua implementasi dan memberi kendali eksplisit atas pembatas, baris judul, serta format kolom. Ketika sebuah skrip ditujukan untuk pembaca yang mungkin memakai implementasi selain MATLAB, fungsi klasik inilah yang menjaga skrip tetap berjalan di mana pun.
Urutan pemeriksaan yang praktis sebelum menulis kode: buka berkas dengan editor teks, lihat apakah baris pertama berupa judul, dan periksa apakah semua kolom berisi angka. Dari hasil pemeriksaan itu, pilih fungsi dengan bentuk keluaran yang paling dekat dengan kebutuhan analisis. Pilihan yang tepat sejak awal menghemat seluruh pekerjaan pembersihan data di langkah-langkah berikutnya. Sebabnya, konversi antara matriks, cell array, dan teks justru sering memakan waktu lebih banyak daripada pembacaan berkasnya.
Kesalahan umum#
- Berkas tidak ditemukan karena path. Fungsi pembaca mencari nama berkas relatif terhadap Current Folder, bukan terhadap folder tempat skrip berada. Skrip yang berjalan baik pada satu folder tiba-tiba gagal ketika dijalankan dari folder lain. Perbaikannya adalah menempatkan berkas data pada folder kerja yang sama, atau menyebut jalur berkas secara lengkap pada pemanggilan fungsi.
- Membaca berkas berjudul dengan csvread. Baris judul
menit,suhutidak dapat dikonversi menjadi angka sehingga csvread mengembalikan baris nol pada posisinya tanpa memicu error apa pun. Hasil seperti itu menyesatkan karena tampak seperti data sah. Gunakan textscan dengan opsi HeaderLines untuk berkas berjudul, atau dlmread dengan baris awal satu. - Lupa opsi Delimiter pada textscan. Format
%f%fpada berkas berpembatas koma tanpa opsi'Delimiter', ','membuat pembacaan berhenti di kolom pertama karena koma tidak dikenali sebagai pemisah. Selalu sertakan opsi pembatas yang sesuai dengan berkas, sebab pembatas bawaan textscan adalah spasi.
Ringkasan#
- readmatrix mengembalikan matriks numerik dari berkas CSV atau Excel dan menandai sel yang gagal dikonversi sebagai NaN.
- readcell mengembalikan cell array yang mempertahankan tipe tiap sel sehingga kolom nama dan kolom angka dapat hidup berdampingan.
- csvread dan dlmread adalah padanan lintas implementasi untuk data numerik, dengan dlmread menambahkan pilihan pembatas dan rentang pembacaan.
- textscan membaca berkas berjudul melalui pegangan berkas, format per kolom, dan opsi HeaderLines, lalu hasilnya diambil per kolom dari cell array.
Referensi#
- readmatrix — MathWorks — Rujukan fungsi readmatrix untuk membaca berkas tabel menjadi matriks.
- readcell — MathWorks — Rujukan fungsi readcell untuk membaca berkas menjadi cell array.
- csvread — MathWorks — Rujukan fungsi csvread untuk membaca CSV numerik.
- dlmread — MathWorks — Rujukan fungsi dlmread beserta argumen pembatas dan rentang.
- textscan — MathWorks — Rujukan fungsi textscan beserta opsi format pembacaan.