MATLAB'DE VERİ TEMİZLEME VE ÖN İŞLEME YAPMAK

Cadsay15 dk okuma
MATLAB ekranında ham CSV verisinin tabloya yüklenmesi eksik değer ve aykırı nokta tespiti ile temizleme adımlarının görünümü

MATLAB'de veri temizleme, ham ölçümü analize hazır hâle getiren komut zinciridir: içe aktarmadan (readtable, readtimetable) eksik değer doldurmaya (fillmissing), aykırı değer ayıklamaya (rmoutliers), gürültü yumuşatmaya (smoothdata) ve ölçek dönüşümüne (normalize) kadar aynı söz dizimi kurgusuyla art arda dizilir. Burada bu hattı hangi veri tipiyle kuracağınızı, her adımın yöntem seçeneklerini, tüm zinciri tek script'te bağlamayı, görsel doğrulamayı ve sık düşülen tuzakları bulacaksınız.

1. 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; adımların resmi referansı için veri ön işleme dokümantasyonu birinci başvuru kaynağı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 tutar
  • T = readtable('olcum.xlsx', 'Sheet', 'Mayis'); — Excel sayfası seçimi
  • opts = detectImportOptions('olcum.csv'); opts.VariableTypes(3) = {'double'}; — tip otomatik sezilmediğinde elle dayatma
  • TT = 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.

2. 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österir
  • sum(ismissing(T)) — sütun bazlı eksik sayısı
  • standardizeMissing(T, -999) — "-999" gibi koda gömülü eksik göstergesini NaN'a çevirir
  • rmmissing(T) — eksik içeren satırı tamamen siler; veri yeterince büyükse en güvenli seçenek
  • fillmissing(T, 'linear') — lineer interpolasyonla doldurur; zaman serisinde doğal
  • fillmissing(T, 'previous') — bir önceki değerle doldurur; sayaç verisi gibi monotonik seri için uygun
  • fillmissing(T, 'movmean', 5) — beş elemanlı hareketli ortalama ile doldurur; gürültülü ölçümde yumuşatır
  • fillmissing(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.

3. 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öntemMantıkVarsayılan eşikNe zaman uygun
median (varsayılan)Medyandan ölçekli MAD uzaklığı3 MADNormal olmayan dağılım, asimetrik veri
meanOrtalamadan std uzaklığı3 stdYaklaşık normal dağılım
quartilesIQR tabanlı (Tukey kuralı)1.5 IQRÇarpık dağılım, kutu grafiği klasiği
grubbsTek değişkenli hipotez testi0.05 anlamlılıkTek aykırı şüphesi
gesdGenelleştirilmiş Grubbs, iteratif0.05Birden çok aykırı şüphesi
movmedian / movmeanPencereli lokal yöntem3 (ö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.

MATLAB ekranında bir sensör zaman serisinin ham hâli ve isoutlier ile işaretlenmiş aykırı noktaların kırpılmış sürümünün karşılaştırma görünümü

4. 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 agresif
  • smoothdata(x, 'movmedian', 10) — hareketli medyan; aykırıya dayanıklı
  • smoothdata(x, 'gaussian', 15) — Gauss çekirdeği, doğal eğri
  • smoothdata(x, 'lowess', 30) — yerel ağırlıklı regresyon; trend takibi iyi
  • smoothdata(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.

5. Ö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 yapar
  • normalize(x, 'range') — [0, 1] aralığına çeker, min-max yöntemi
  • normalize(x, 'range', [-1 1]) — istenen aralığa çeker
  • normalize(x, 'center') — ortalamayı sıfırlar, ölçek değişmez
  • normalize(x, 'scale') — std=1 yapar, ortalama değişmez
  • normalize(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.

6. 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.

  1. TT = readtimetable('saha.csv'); — zaman damgalı içe aktarma
  2. TT0 = TT; — yedek; sorun çıkarsa karşılaştırma için
  3. TT = standardizeMissing(TT, -999); — cihaza özgü hata kodlarını NaN'a çevir
  4. fprintf('Eksik: %d\n', sum(sum(ismissing(TT)))); — sağlık göstergesi
  5. TT = rmoutliers(TT, 'movmedian', hours(2)); — lokal aykırı temizliği
  6. TT = fillmissing(TT, 'linear'); — boşluk doldurma
  7. TT.basinc = smoothdata(TT.basinc, 'gaussian', 15); — gürültü yumuşatma
  8. TT{:, 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.

7. 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 üste
  • histogram(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 komut
  • heatmap(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.

MATLAB stackedplot çıktısında bir zaman serisinin sıcaklık nem ve basınç sütunlarının temizlik öncesi ve sonrası karşılaştırma görünümü

8. 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ığı: readtable bir hücreyi boş okuduğunda string sütunda "", sayısal sütunda NaN bırakır. ismissing ikisini de yakalar ama manuel karşılaştırma yapılırken farkedilmez. Karşılaştırmaları ismissing ile 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 detectImportOptions sezgi olarak cell'e düşer. opts.VariableTypes ile 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ından X_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.

Sıkça Sorulan Sorular

readtable ve readtimetable arasındaki fark hangi durumda belirleyicidir?

Veri zaman damgalı ve sıra önemli ise readtimetable doğal seçimdir; ilk datetime sütununu satır zamanına yükseltir, retime ile yeniden örnekleme tek satırda olur. Sıra önemsiz veya zaman sütunu yoksa readtable yeterlidir. table elde varsa table2timetable ile sonradan timetable'a yükseltmek mümkün; ama dosyadan doğrudan timetable okumak tip ve indeks tutarlılığı için daha temizdir.

fillmissing yönteminde linear, previous ve movmean seçenekleri ne zaman tercih edilir?

Lineer interpolasyon (linear) düz ve sürekli zaman serilerinde varsayılan iyi seçim. previous bir önceki değerle doldurur ve sayaç verisi, kademeli akış gibi monotonik serilerde uygundur. movmean hareketli ortalama ile doldurur; gürültülü ve dalgalı veride yumuşatıcı etki yapar, ama gerçek sıçramaları da bulanıklaştırır. Kategorik sütunda interpolasyon anlamsız; constant veya mod doldurma kullanılır.

rmoutliers yöntemleri (median, mean, quartiles, grubbs, gesd) hangi dağılıma göre seçilir?

Varsayılan median yöntemi ölçekli MAD kullanır ve normal olmayan, asimetrik dağılımlarda kararlıdır. mean yöntemi ortalama ve std hesabıyla çalışır; yaklaşık normal dağılım varsayar. quartiles Tukey kuralıdır, çarpık dağılıma uygundur. grubbs tek aykırı şüphesi olan normal veride hipotez testi yapar. gesd birden çok aykırı için Grubbs'un iteratif uzantısıdır. Trendli zaman serisinde movmedian global yöntemlerden daha doğru sonuç verir.

Aykırı değer silmek mi kırpmak mı, hangisi daha sağlıklı?

Veri seti büyük ve tek satırın değeri düşükse silmek (rmoutliers) tercih edilir; örnekleme yapay desen sokulmaz. Veri seti küçükse ya da her satır (kalite kontrol parçası, hastane vakası gibi) anlamlıysa silmek bilgi kaybıdır; filloutliers ile clip veya komşu değerle doldurma daha akılcıdır. Karar veri yoğunluğuna ve her satırın iş bağlamındaki değerine göre verilir.

smoothdata penceresi seçimi neye göre yapılır?

Pratik kural: ilgilenilen olayın süresinden daha kısa bir pencere seç. Saniye seviyesi trafik sensöründen dakika trendi istiyorsan 60 elemanlı movmean dakika içi gürültüyü temizler ama dakika trendlerini korur. Çok dar pencere gürültüyü geçirir, çok geniş pencere gerçek sinyali yutar. movmean en hızlı; movmedian aykırıya dayanıklı; gaussian doğal eğri; sgolay sinyalin türev özelliklerini korur.

Normalize işlemi makine öğrenmesi pipeline'ında nasıl uygulanır?

Eğitim ve test ayrımından sonra parametreler yalnızca eğitim setinden hesaplanır, sonra teste uygulanır. MATLAB'de [~, C, S] = normalize(X_train) ile merkez ve ölçek değerleri alınır, X_test_n = normalize(X_test, 'center', C, 'scale', S) ile teste aynı parametreler dayatılır. Aksi durumda test seti bilgisi eğitime sızar ve gerçek dünya performansı şişirilmiş çıkar — klasik veri sızıntısı (data leakage) hatasıdır.

Saat dilimi (time zone) tutarsızlığı timetable'da nasıl çözülür?

Cihaz UTC, raporlama TSİ kabul ediyorsa zaman damgaları üç saat kayar. TT.Properties.RowTimes.TimeZone = 'Europe/Istanbul' satırı zaman damgalarına dilim atar; ardından datetime objesi otomatik dönüşür. Birden fazla kaynaktan gelen veri birleştiriliyorsa hepsini önce UTC'ye çevir, analiz sonunda hedef dilime dönüştür — bu sıra DST (yaz saati) atlamalarını da doğru yönetir.

Sıralama sorusu: aykırı temizleme mi önce yapılır, yumuşatma mı?

Önce aykırı temizleme, sonra yumuşatma. Aksi sırayla aykırı değer smoothdata penceresine yayılır ve etrafındaki temiz değerleri de bozar. Tipik akış: standardizeMissing (kod hata gösterimini NaN'a çevir), rmoutliers veya filloutliers (aykırıyı temizle), fillmissing (NaN'leri doldur), smoothdata (gürültüyü yumuşat), normalize (ölçeği eşitle). Her adım öncesi ham veriyi yedeklemek script'e küçük ama değerli bir alışkanlık ekler.

 CADSAY