CSV (Comma-Separated Values) adalah bahasa pengantar data paling universal: spreadsheet, database, dan hampir semua aplikasi analitik bisa mengeksport dan mengimpor format ini. Tugas kita sekarang memindahkan angka dari berkas CSV ke workspace MATLAB — menulisnya kembali, lalu mengatasi dua komplikasi klasik: baris header dan pemisah desimal koma. Cakupan chapter ini:
- Menulis dan membaca CSV dengan
readmatrix/writematrix(MATLAB R2019a+) - Padanan klasik
csvread/csvwritedandlmread/dlmwrite - Melewati baris header dan mengganti delimiter
- Membaca CSV sebagai
tablebernama kolom denganreadtable
Anatomi Berkas CSV #
Berkas CSV menyimpan tabel sebagai teks biasa: satu baris berkas = satu observasi, nilai dipisah karakter delimiter (umumnya koma), dan baris pertama sering berisi nama kolom. Tidak ada tipe data yang tersimpan — hanya angka dan teks apa adanya — sehingga pembaca harus menafsirkan ulang: "15000" dibaca sebagai angka, 15000.5 sebagai pecahan. Satu jebakan regional perlu diingat sejak awal:
| Wilayah | Desimal | Delimiter CSV | Contoh satu baris |
|---|---|---|---|
| AS, Inggris | titik | koma | 12,15000.5 |
| Indonesia, Jerman, Prancis | koma | titik koma | 12;15000,5 |
Berkas dari aplikasi berbahasa Indonesia umumnya memakai titik koma sebagai delimiter — kita tangani dengan dlmread/dlmwrite di bawah.
readmatrix dan writematrix: Jalur Modern MATLAB #
Aturannya: readmatrix dan writematrix (keduanya R2019a+) adalah antarmuka baca-tulis yang disarankan MATLAB — otomatis mendeteksi format dari ekstensi .csv, .txt, atau .xlsx. Mekanismenya: readmatrix(namaBerkas) memindai berkas, mendeteksi delimiter dan baris header sendiri, lalu mengembalikan matriks numerik; writematrix(M, namaBerkas) menulis matriks dengan format sesuai ekstensi. Karena Octave tidak memiliki keduanya, contoh memakai guard exist yang memilih jalur modern bila tersedia:
M = [12 15000; 15 16000; 9 17000];
if exist('writematrix') ~= 0
writematrix(M, 'penjualan.csv'); % MATLAB R2019a+
fprintf('ditulis dengan writematrix\n');
else
csvwrite('penjualan.csv', M); % padanan klasik
fprintf('ditulis dengan csvwrite\n');
end
fprintf('berkas tertulis: %d\n', exist('penjualan.csv', 'file'));
if exist('readmatrix') ~= 0
A = readmatrix('penjualan.csv'); % MATLAB R2019a+
fprintf('dibaca dengan readmatrix\n');
else
A = csvread('penjualan.csv'); % padanan klasik
fprintf('dibaca dengan csvread\n');
end
fprintf('roundtrip: %dx%d, A(2,2)=%d\n', size(A, 1), size(A, 2), A(2, 2));
fprintf('identik dengan data asli: %d\n', isequal(A, M));Output yang Dihasilkan (jalur klasik yang aktif saat diuji di Octave — di MATLAB label menjadi writematrix/readmatrix, nilainya sama):
ditulis dengan csvwrite
berkas tertulis: 2
dibaca dengan csvread
roundtrip: 3x2, A(2,2)=16000
identik dengan data asli: 1Mari kita bedah baris-baris kode di atas:
- Baris 3 (
exist('writematrix') ~= 0):existmengembalikan0bila fungsi tidak ada. Di MATLAB R2019a+ guard bernilai benar sehingga jalur modern aktif; di Octave guard bernilai salah sehingga padanan klasik berjalan — satu berkas, dua lingkungan. - Baris 4 (
writematrix(M, 'penjualan.csv')): tiap baris matriks menjadi satu baris berkas, tiap kolom dipisah koma; berkas lama dengan nama sama ditimpa. - Baris 8 (
csvwrite): padanan klasik dengan perilaku penulisan yang setara untuk matriks numerik. - Baris 17 (
isequal(A, M)): roundtrip dinyatakan sukses bila hasil baca identik elemen demi elemen — hasil1berarti tidak ada nilai yang berubah di perjalanan.
csvread dan csvwrite: Padanan Klasik #
csvread/csvwrite adalah fungsi generasi lama yang kini berstatus not recommended di dokumentasi MATLAB, tetapi tetap berguna sebagai padanan lintas-platform. Mekanismenya: csvread(namaBerkas, R, C) membaca mulai dari baris ke-R (indeks dari 0) dan kolom ke-C — cara resmi melewati header:
fid = fopen('jualan_header.csv', 'w');
fprintf(fid, 'unit,harga\n');
fprintf(fid, '%d,%d\n', M.'); % tulis per baris observasi
fclose(fid);
if exist('readmatrix') ~= 0
B = readmatrix('jualan_header.csv'); % header terdeteksi otomatis
else
B = csvread('jualan_header.csv', 1, 0); % mulai baris ke-2, kolom ke-1
end
fprintf('dengan header: %dx%d, B(3,2)=%d\n', size(B, 1), size(B, 2), B(3, 2));Output yang Dihasilkan:
dengan header: 3x2, B(3,2)=17000Mari kita bedah baris-baris kode di atas:
- Baris 2-3 (
fprintfke berkas): header ditulis manual sebagai baris pertama, diikuti data per observasi;M.'ditranspose karenafprintfmembaca elemen kolom demi kolom. - Baris 9 (
csvread('jualan_header.csv', 1, 0)): argumen1, 0berarti mulai dari baris kedua (indeks 0 = baris pertama), kolom pertama — barisunit,hargaterlewati dan hasilnya murni angka 3×2. - Baris 7 (
readmatrix): jalur modern tidak butuh argumen geser karenareadmatrixmendeteksi baris teks ber-header secara otomatis dan melewatkannya.
dlmread dan dlmwrite untuk Delimiter Lain #
Berkas bertitik-koma tidak bisa dibaca csvread karena fungsi tersebut terpaut pada koma. Mekanismenya: dlmread(namaBerkas, delimiter) dan dlmwrite(namaBerkas, M, 'delimiter', ..., 'precision', ...) menerima delimiter apa pun:
dlmwrite('data_titikoma.csv', [3.14159 2.71828], ...
'delimiter', ';', 'precision', '%.4f');
D = dlmread('data_titikoma.csv', ';');
fprintf('delimiter titik koma: %.4f dan %.4f\n', D(1), D(2));Output yang Dihasilkan:
delimiter titik koma: 3.1416 dan 2.7183Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
dlmwrite): pasangan name-value'delimiter', ';'mengganti pemisah dan'precision', '%.4f'membulatkan penulisan ke empat angka desimal — nilai3.14159tertulis sebagai3.1416. - Baris 3 (
dlmread): argumen kedua';'memberi tahu pembaca bahwa pemisah kolom adalah titik koma, bukan koma.
Untuk berkas desimal-koma di MATLAB modern, readmatrix juga menerima readmatrix(berkas, DecimalSeparator=",", ThousandsSeparator=".") — opsi name-value yang mengganti penafsiran tanda desimal tanpa mengubah berkasnya.
readtable: CSV dengan Kolom Bernama (MATLAB) #
Data CSV nyata sering berisi kolom teks (nama kasir) berdampingan dengan kolom angka — bentuk yang tidak muat dalam satu matriks numerik. Fungsi readtable (R2013b+) membaca berkas menjadi table: tiap kolom menjadi variabel bernama lengkap dengan tipenya. Kode berikut hanya berjalan di MATLAB:
T = readtable("jualan_header.csv");
T.Properties.VariableNames = {"unitTerjual", "hargaSatuan"};
totalPendapatan = sum(T.unitTerjual .* T.hargaSatuan);
writetable(T, "penjualan_rapi.csv");Output yang Dihasilkan (tampilan Command Window MATLAB untuk T setelah penggantian nama):
T =
3×2 table
unitTerjual hargaSatuan
___________ ___________
12 15000
15 16000
9 17000Mari kita bedah baris-baris kode di atas:
- Baris 1 (
readtable): headerunit,hargadi baris pertama otomatis menjadi nama variabel; teks di kolom lain akan dibaca sebagaicellofchar, bukan diubah menjadiNaN. - Baris 2 (
T.Properties.VariableNames): nama kolom diganti menjadi lebih deskriptif; akses kolom berubah dariT.unitmenjadiT.unitTerjual. - Baris 4 (
writetable): tabel ditulis kembali sebagai CSV lengkap dengan baris header — padanancsvwriteyang sadar nama kolom.
Tipe Data dan Jebakan CSV #
CSV tidak menyimpan tipe: pembaca yang menentukan. csvread/readmatrix mengembalikan matriks numerik — sel kosong menjadi NaN, dan kolom teks tidak bisa dibaca csvread sama sekali. Bila berkas memuat teks campuran, pilihan yang benar adalah readtable (MATLAB) atau textscan dengan format %s (lintas-platform). Bila pemisah desimal berupa koma, berkas harus dibaca sebagai delimiter titik koma seperti contoh dlmread di atas; mencampur DecimalSeparator dengan delimiter koma membuat satu baris berisi dua makna sekaligus dan hasilnya tidak terbaca.
Berkas contoh.m pada bagian bawah halaman merangkai seluruh roundtrip — tulis-baca dengan guard modern/klasik, header, delimiter titik koma, dan pembersihan berkas demo — dalam satu script yang berjalan utuh di MATLAB maupun Octave.
Ringkasan #
readmatrix/writematrix adalah antarmuka modern untuk CSV numerik, readtable/writetable untuk CSV dengan kolom bernama, dan csvread/csvwrite/dlmread/dlmwrite menjadi padanan klasik yang kompatibel Octave. Pola guard exist membuat satu script memilih jalur yang tersedia. Header diatasi dengan deteksi otomatis (readmatrix), argumen geser (csvread), atau nama variabel (readtable); delimiter titik koma diatasi dengan dlmread/dlmwrite. Format yang menggabungkan angka, teks, dan formula dalam satu workbook — Excel — kita bahas di chapter berikutnya.