MATLAB'DE VERİ TEMİZLEME VE ÖN İŞLEME YAPMAK
Bir rüzgâr ölçüm istasyonundan üç ay boyunca on dakika aralıkla veri geldi. Dosya 13 binin üzerinde satır içeriyor; bazı saatlerde anemometre donmuş, NaN basmış; bazı satırlarda hız 380 km/h gibi fiziksel olarak mümkün olmayan değerler var; sıcaklık sütununda tarih biçimi tutarsız; üstelik bir günde saat dilimi atlamalı kaymış. Modele veya raporlama sayfasına bu hâliyle giren veri yanlış kararlar doğurur. Veri biliminin yarısı analizdir, diğer yarısı veriyi analize hazır hâle getirme disiplinidir.
MATLAB bu temizleme hattını table ve timetable veri tipleri etrafında kurar. İçe aktarma readtable ve readtimetable, eksik veri için ismissing fillmissing rmmissing, aykırı değer için isoutlier filloutliers rmoutliers, gürültü için smoothdata, ölçek için normalize ve rescale komutları aynı söz dizimi kurgusuyla art arda dizilir. Resmi referans için veri ön işleme dokümantasyonu birinci başvuru kaynağıdır.
HAM VERİ HANGİ TİPE ALINMALI?
Temizleme akışının kalitesi veri ham hâlinde içe aktarılırken belirlenir. CSV'yi numerik matrise (csvread, dlmread) okumak eski alışkanlık; modern MATLAB sütun adı, tip karması ve eksik değer sezgisi olan readtable veya zaman damgalı veride readtimetable üzerinden çalışır. Komut tek satır olabilir, ama altta neyin döndüğü farkın yarısıdır.
T = readtable('olcum.csv');— sütun başlıklarını otomatik isim olarak alır, tipleri sezer (datetime, double, string)TT = readtimetable('saha.csv');— ilk datetime sütununu satır zamanı yapar, geri kalanı değişken olarak tutarT = readtable('olcum.xlsx', 'Sheet', 'Mayis');— Excel sayfası seçimiopts = detectImportOptions('olcum.csv'); opts.VariableTypes(3) = {'double'};— tip otomatik sezilmediğinde elle dayatmaTT = table2timetable(T, 'RowTimes', 'zaman');— elde table varsa zaman sütununu satır zamanına yükseltme
Timetable, zaman serisinde sade table'a kıyasla net üstünlük sağlar. retime(TT, 'hourly', 'mean') tek satırda saatlik ortalamaya iner; on dakikalık örneklemden saatlik raporlamaya geçiş elle for döngüsü yazmadan biter. Türk meteoroloji genel müdürlüğü, deprem ölçüm istasyonları ve elektrik dağıtım şirketlerinin SCADA çıktıları gibi zaman damgalı veri setleriyle çalışırken timetable ön işleme süresini düşürür.
EKSİK VERİ NASIL TESPİT EDİLİR VE NE YAPILIR?
Eksik değer iki kaynaktan gelir: cihazın okumayı atlaması (sensör donması, ağ kesintisi) ve içe aktarma sırasında tip uyumsuzluğunun NaN'a düşmesi. İlk adım her zaman tespittir; körü körüne doldurmak yapay desen üretir.
ismissing(T)— mantıksal matris döner, her hücre eksik mi gösterirsum(ismissing(T))— sütun bazlı eksik sayısıstandardizeMissing(T, -999)— "-999" gibi koda gömülü eksik göstergesini NaN'a çevirirrmmissing(T)— eksik içeren satırı tamamen siler; veri yeterince büyükse en güvenli seçenekfillmissing(T, 'linear')— lineer interpolasyonla doldurur; zaman serisinde doğalfillmissing(T, 'previous')— bir önceki değerle doldurur; sayaç verisi gibi monotonik seri için uygunfillmissing(T, 'movmean', 5)— beş elemanlı hareketli ortalama ile doldurur; gürültülü ölçümde yumuşatırfillmissing(T, 'spline')— kübik spline; düz eğri varsayımı yapılan bilimsel veride uygundur
Karar mantığı veri yoğunluğuna bağlıdır. %5 altı eksik varsa interpolasyon güvenlidir; %20 üstü eksiklik o sütunun analize sokulup sokulmayacağını yeniden değerlendirtir. Türk elektrik iletim sistemi operatörü tarafından yayımlanan saatlik tüketim serileri gibi yüksek frekanslı veride 'linear' default seçim olur; gece saatlerindeki düz platolarda 'previous' daha yapısaldır. Bir kategorik sütunda (örneğin trafo arıza nedeni) sayısal interpolasyon anlamsızdır; fillmissing(T, 'constant', "BILINMIYOR") ya da modu hesaplayıp manuel atama tercih edilir.
AYKIRI DEĞER NASIL TESPİT EDİLİR?
Aykırı değer (outlier) seçimi tek bir "doğru yöntem" içermez; verinin dağılımına göre yöntem değişir. isoutlier ve rmoutliers aynı yöntem listesini paylaşır; filloutliers aykırıyı silmek yerine başka bir değerle değiştirmek istendiğinde kullanılır.
| Yöntem | Mantık | Varsayılan eşik | Ne zaman uygun |
|---|---|---|---|
| median (varsayılan) | Medyandan ölçekli MAD uzaklığı | 3 MAD | Normal olmayan dağılım, asimetrik veri |
| mean | Ortalamadan std uzaklığı | 3 std | Yaklaşık normal dağılım |
| quartiles | IQR tabanlı (Tukey kuralı) | 1.5 IQR | Çarpık dağılım, kutu grafiği klasiği |
| grubbs | Tek değişkenli hipotez testi | 0.05 anlamlılık | Tek aykırı şüphesi |
| gesd | Genelleştirilmiş Grubbs, iteratif | 0.05 | Birden çok aykırı şüphesi |
| movmedian / movmean | Pencereli lokal yöntem | 3 (ölçekli) | Trendi olan zaman serisi |
Pencereli yöntem (movmedian) zaman serisindeki gerçek trendi aykırı sanıp atmaktan kurtarır. Bir endüstriyel kompresörün sıcaklık eğrisi gün içinde 30 dereceden 70 dereceye yükseliyorsa global median yöntemi gün ortasındaki yüksek değerleri aykırı işaretler — yanlış. rmoutliers(x, 'movmedian', hours(2)) son iki saatin medyanına bakar, yalnızca lokal sıçramaları yakalar.
Sık sorulan soru: aykırıyı silmek mi kırpmak mı? Veri seti büyükse silmek (rmoutliers) tercih edilir; küçük örneklemde her satır değerli olduğundan kırpma veya doldurma (filloutliers(x, 'clip') veya filloutliers(x, 'linear')) daha akılcıdır. Türk üretim sektöründe kalite kontrol istasyonundan gelen ölçümlerde her parça önemli olduğundan kırpma yaygındır; yüksek frekanslı sensör verisinde ise silme tercih edilir.

GÜRÜLTÜ AZALTMA — SMOOTHDATA VE PENCERE SEÇİMİ
Sensör verisi neredeyse her zaman gürültü taşır. Gürültü yalnızca aykırı değer değil; sürekli düşük genlikli salınım analiz ve görselleştirmede sinyali bulanıklaştırır. smoothdata bu işin tek satırlık komut hâlidir ve birden fazla yöntemi destekler.
smoothdata(x, 'movmean', 10)— on elemanlı hareketli ortalama; en hızlı, yumuşatma agresifsmoothdata(x, 'movmedian', 10)— hareketli medyan; aykırıya dayanıklısmoothdata(x, 'gaussian', 15)— Gauss çekirdeği, doğal eğrismoothdata(x, 'lowess', 30)— yerel ağırlıklı regresyon; trend takibi iyismoothdata(x, 'sgolay', 7)— Savitzky-Golay; sinyalin türev özelliklerini koruma istendiğinde
Pencere genişliği seçimi yumuşatmanın derecesini belirler. Çok dar pencere gürültüyü geçirir; çok geniş pencere gerçek sinyal değişimini de yutar. Pratik kural: ilgilenilen olayın süresinden kısa pencere seç. Akıllı şehir projelerinde trafik akış sensörlerinden gelen saniye seviyesi veriden dakika seviyesi rapor üretirken 60 elemanlı movmean, dakika içindeki gürültüyü temizleyip dakika trendlerini korur.
Bir başka pratik karar: yumuşatmadan önce mi aykırı temizlenir, sonra mı? Sıralama önemlidir. Önce rmoutliers veya filloutliers ile uçları kes, sonra smoothdata ile yumuşat. Aksi sırayla aykırı değer pencereye yayılır ve civarındaki temiz değerleri de bozar.
ÖLÇEK DÖNÜŞÜMÜ — NORMALIZE VE RESCALE
Birden fazla değişken aynı modele girecekse ölçek farkı sonuçları kirletir. Bir basınç sütunu 100 ile 1000 arasında, sıcaklık -20 ile 50 arasında değer alıyorsa, mesafe tabanlı analizler (kümeleme, regresyon, sinir ağı) basınca aşırı ağırlık verir. Ölçek dönüşümü bu eşitsizliği giderir.
normalize(x)— varsayılan z-score: ortalama 0, std 1 yaparnormalize(x, 'range')— [0, 1] aralığına çeker, min-max yönteminormalize(x, 'range', [-1 1])— istenen aralığa çekernormalize(x, 'center')— ortalamayı sıfırlar, ölçek değişmeznormalize(x, 'scale')— std=1 yapar, ortalama değişmeznormalize(x, 'medianiqr')— medyan/IQR robust standardizasyon, aykırıya dayanıklırescale(x, 0, 100)— ham min-max dönüşümü, hedef aralık parametre
Z-score klasik istatistik standardıdır ve makine öğrenmesi pipeline'ının çoğunda varsayılan tercihtir. Veri ağır asimetrik veya yoğun aykırıya sahipse 'medianiqr' daha kararlıdır; ortalama ve std aykırıdan etkilenirken medyan ve IQR etkilenmez. Türk finans sektöründe BIST hisse fiyat serileri gibi log-normal tabanlı verilerde önce log(x) dönüşümü uygulanır, ardından z-score; bu sıra dağılımı simetrikleştirir.
BÜTÜN HATTI BİR SCRIPT'TE BAĞLAMAK
Tek tek komutlar öğrenilince sıra hattı bir araya getirmeye gelir. Aşağıdaki sekiz adımlık iskelet, bir saha veri setini ham CSV'den temiz tabloya götürür ve aynı kodu her yeni dosya geldiğinde tekrar koşturur.
TT = readtimetable('saha.csv');— zaman damgalı içe aktarmaTT0 = TT;— yedek; sorun çıkarsa karşılaştırma içinTT = standardizeMissing(TT, -999);— cihaza özgü hata kodlarını NaN'a çevirfprintf('Eksik: %d\n', sum(sum(ismissing(TT))));— sağlık göstergesiTT = rmoutliers(TT, 'movmedian', hours(2));— lokal aykırı temizliğiTT = fillmissing(TT, 'linear');— boşluk doldurmaTT.basinc = smoothdata(TT.basinc, 'gaussian', 15);— gürültü yumuşatmaTT{:, 2:end} = normalize(TT{:, 2:end});— sayısal sütunları z-score
Bu sekiz satır, her hafta gelen yeni dosya için tek bir function'a sarılır. function TTclean = veritemizle(yol) imzasıyla başlar, içeride yukarıdaki adımlar koşar, çıktıda hem temiz timetable döner hem de bir özet raporu (eksik sayısı, atılan satır sayısı, ölçek istatistikleri) disp ile yazılır. Bir teknik ekipte saatler süren manuel Excel temizliğinin yerini iki dakikalık veritemizle('yenisaha.csv') çağrısı alır.
GÖRSEL DOĞRULAMA — TEMİZLİĞİN İSPATI
Sayı tablosu doğru görünebilir ama görsel kontrolü atlanan akıştan herkes pişman olur. Temizleme adımlarının her birini öncesi-sonrası grafik ile doğrulamak ekstra zaman değil sigortadır.
plot(TT0.zaman, TT0.sicaklik); hold on; plot(TT.zaman, TT.sicaklik);— ham ve temiz üst üstehistogram(TT.basinc)— dağılımı görmek; normalize sonrası simetrik olmalıboxplot(TT{:, 2:end})— sütunlar arası ölçek karşılaştırmasıstackedplot(TT)— timetable için çok değişkenli zaman serisi görünümü; tek komutheatmap(corrcoef(TT{:, 2:end}))— sütunlar arası korelasyonun ön kontrolü
stackedplot özellikle çoklu değişken bulunan timetable'larda gözle inceleme için yapılmış komuttur; her sütun ayrı eksende ama aynı zaman çizgisinde gösterilir. Bir HVAC sisteminin sıcaklık, nem, basınç ve güç tüketimi sütunlarının saatlik davranışını tek bir komutla yan yana görmek, manuel subplot kurmaktan çok daha hızlıdır.

HANGİ TUZAKLARA SIK DÜŞÜLÜR?
Temizleme akışını ilk kuran ekibin sık takıldığı altı nokta vardır. Bunları baştan bilmek günler değil saatler kazandırır.
- NaN ile boş dize karışıklığı:
readtablebir hücreyi boş okuduğunda string sütunda"", sayısal sütundaNaNbırakır.ismissingikisini de yakalar ama manuel karşılaştırma yapılırken farkedilmez. Karşılaştırmalarıismissingile yap. - Yanlış yönde aykırı temizleme:
rmoutliers(T)tabloda her sütun için ayrı eşik hesaplar ama satırı bütün siler. Bir sütundaki tek aykırı yüzünden o satırın tüm sütun değerleri kaybolur. Karar bilinçli verilmeli. - Saat dilimi tutarsızlığı: Cihaz UTC, rapor TSİ (UTC+3) kabul ediyorsa zaman damgaları kayar.
TT.Properties.RowTimes.TimeZone = 'Europe/Istanbul';ile açıkça ayarla. - Tip karması: Bir sütunda sayı ve metin karışmışsa
detectImportOptionssezgi olarakcell'e düşer.opts.VariableTypesile elle dayatmak ön işleme zincirini stabil kılar. - Normalize'ı eğitim/test ayrımından önce uygulama: Makine öğrenmesi için veri ayrılacaksa normalize parametreleri (mean, std) yalnızca eğitim setinden hesaplanır, sonra teste uygulanır.
[~, C, S] = normalize(X_train);ardındanX_test_n = normalize(X_test, 'center', C, 'scale', S); - Yedek almamak:
backup = T;tek satırdır, geri dönüş kolaylığı sağlar. Pahalı bir adımı geri almak için tüm script'i tekrar koşturmaktan iyidir.
Veri ön işleme bir kez yazılıp kenara konacak bir iş değil, sürekli bakım gerektiren bir disiplindir. Sahaya sürülen cihaz değişir, ölçüm aralığı güncellenir, yeni bir sütun eklenir — temizleme function'ı sürüm kontrolü altında tutulur, her değişiklik commit edilir. Mühendislik veya analitik departmanında bu hattı sağlam kuran ekipler için uygulamalı matlab eğitimi programları teori ile saha pratiğini birleştiren bir başlangıç olur; tablo, timetable, ön işleme zinciri ve görsel doğrulama adımları gerçek veri setleri üzerinden uçtan uca kurgulanır.
Veri biliminin değeri sonuçta bir karara dönüşür: bir cihaz değiştirilecek mi, bir tarife güncellenecek mi, bir parametre revize edilecek mi? Bu kararın güveni temiz veriden gelir. MATLAB'in readtable ile başlayıp normalize ile biten kısa söz dizimi, kararı hızlandırmak için tasarlanmış bir disiplin sunar — kullanan ekip için doğru sıra bir kez yerleşti mi gerisi tekrar eden komutlar dizisidir.



