Kurs
Analitiklerimiz veya kestirim algoritmalarımız ne kadar gelişmiş olursa olsun, çıktı kalitesi girdideki veriye bağlıdır. Başka bir deyişle, "çöp girerse çöp çıkar".
Tüm bu süreçlerin temelinde veri olduğundan, verinin düzgünce rafine edildiğinden emin olmak için yeterli zaman ayırmak önemlidir.
Veri temizleme, veri bilimi yaşam döngüsünde temel bir süreçtir ve içgörü elde etmeye ve güvenilir yanıtlar üretmeye çalışırken rolü abartılamaz. Gerçek dünyada veri çoğu zaman kirli olur ve veri temizlemeden tamamen kaçınmak mümkün değildir.
Bu yazıda, eksik değerler, yinelenenler ve aykırı değerlerle nasıl başa çıkılacağı gibi bazı önemli kavramları ele alacağız. Daha kapsamlı bir yönerge seti için mutlaka Python ile Veri Temizleme veya R ile Veri Temizleme kursumuzu alın.
Kirli Veriye Ne Sebep Olur?
Basitçe ifade etmek gerekirse, veri temizleme (veya arıtma), veri analizine hazırlık için gereken bir süreçtir. Bu, yinelenen ve eksik kayıtları bulup kaldırmayı ve hatalı kayıtları düzeltmek için veriyi değiştirmeyi içerebilir.
Kirli veri uzun zamandır bir sorun olsa da, son on yılda veri üretiminde üstel bir artış gördük. Yalnızca 2020’de dünya 64 zettabayttan fazla veri üretti; bu, 6,4 trilyon gigabayta eşdeğer. Tüm bu verinin %2’sinden azı saklansa da bu durum, zaten var olan "kirli veri" sorununu şüphesiz daha da büyütüyor. Veri temizleme düzgünce yapılmadan önce, verinin ilk etapta nasıl kirlendiğini anlamak önemlidir. Bu, aşağıdaki yaygın kaynaklardan kaynaklanabilir:
- Veri girişi, kaydı veya kodlama sırasında insan hatası
- Nesnelerin internetinde (IoT) olduğu gibi, arızalı bir algılayıcı cihaz
- Donanım veya yazılım hasarından kaynaklanan bozulma
Temizlemeyi hedeflediğimiz kirli verinin kök nedeninin farkında olmak, veri setimizle ilişkili farklı sorunları sınıflandırmaya imkân veren veri kalitesi ölçütlerini dayatmak için iyi bir temel oluşturur.
Veri Temizleme Neden Bu Kadar Önemli?
Veri temizleme süreci, bir kuruluşun verilerini temizlemek için bir şablon oluşturmaya yardımcı olduğu için önemlidir. Daha önce belirtildiği gibi, her veri analitiği veya veri bilimi süreci çöp girerse çöp çıkar ilkesine tabidir. İhmal edildiğinde, zaman, para ve diğer kaynaklar açısından maliyetli ve hatalı analitik sonuçlar doğurur.
Veri Kalitesi Nedir?
Veri kalitesi, verimizin, hizmet etmesi gereken amaca ne kadar uygun olduğunu nitel ve/veya nicel olarak ölçer. Bu ölçüler, sunulan verinin istenen amaçlarımıza ne kadar uygun olduğunu değerlendirmek için kullanabileceğimiz pratik şablonlardır. Bu veri kalite ölçülerini, verimizi veri bilimi süreçlerine uygun saymak için geçmesi gereken metrik testler olarak düşünün.
Veri kalitesi için ölçütler
- Doğruluk: Doğruluğu doğrulamak için sorulabilecek basit bir soru şudur: Veride yer alan bilgi her ayrıntısıyla doğru şekilde sağlanmış mı? Veriyle, gerçek dünyadaki örüntüleri yaklaşık olarak modellemeye çalışırız; doğruluk, bu yaklaşımların ne kadar gerçeğe uygun olduğunu tanımlar.
- İlgililik: Bu bilgi, ulaşmak istediğimiz nihai hedefe ne kadar katkı sağlıyor?
- Tutarlılık: Bu verinin kaynağı doğrulanmış mı ve içindeki bilgiye güvenilebilir mi? Örneğin, yaşı 15 olan bir müşterinin medeni durumunun evli olarak belirtilmesi gibi.
- Tamlık: Sağlanan veri, hedeflenen amaç için yeterince kapsamlı mı? Bu, eksik veriyle ilişkili yaygın bir sorundur ve bunu çözmenin bir yolu veri kaynağını araştırmaktır.
- Birörneklik: Diyelim ki bir satış sütunumuz var ancak tüm işlemler aynı para birimiyle yapılmamış. Tüm satış değerlerini tek bir para birimine çevirmek zorunlu hale gelir ve birörneklik tam olarak bununla ilgilidir; tüm sistemlerde veri ölçülerinin aynı ölçü birimleriyle belirtilmesini sağlamak.
Veri temizleme ve veri dönüştürme
Veri temizleme ile veri dönüştürme arasında ayrım yapmak önemlidir. Veri dönüştürme, bize sağlanan veriden daha fazla içgörü çıkarmaya yardımcı olabilecek süreçler bütünüdür. Bu süreçler, ham veri biçimini genellikle başka bir biçime dönüştürür; birkaç örnek şunlardır:
- Ön kodlama (Encoding): Kategorik değerleri, sonrasında makine öğrenimi hesaplamalarında kullanılabilecek ikili değerlere dönüştürme sürecidir. Şekil, cinsiyet sütununun kodlanmış hâlinin nasıl görüneceğini gösterir. Hâlâ aynı bilgiyi taşısa da farklı bir biçime dönüştürülmüştür.

- Veri bölütleme (binning): Bucketing olarak da anılır; bu süreç, küçük gözlemlerin etkisini/boyutunu azaltmaya yardımcı olur. Sürekli değerlerin bölütlere (veya kategorilere) gruplanmasını içerir.

- Ölçekleme: Farklı ölçeklerdeki değerleri sabit bir aralığa standartlaştırmaya yardımcı olan, makine öğreniminde yaygın bir tekniktir.

Çoğu veri dönüştürme sürecinde, verinin orijinal gösteriminin değiştirildiğine dikkat edin. Aynı veri olsa da, onu makine öğrenimi veya başka bir amaç için kullanılabilir bir biçime dönüştürmek üzere belirli teknikler uygulanmıştır.
Veri Temizleme Nasıl Yapılır
Yüksek kaliteli veriye ulaşmak için bir dizi yönergeye sahip olmak önemlidir. Bu yönergelere veri temizleme iş akışı denebilir. Temizleme için gereken tüm süreçleri dikkate almamıza yardımcı olurlar. Bu iş akışına dahil süreçler şunlardır:
- Veri keşfi
- Veri temizleme
- Veri doğrulama
- Veri temizleme raporlaması Bazı süreçler Python ile de gösterilecektir
Veri keşfi
Veri keşfi, veride yer alan değişkenleri derinlemesine inceleyerek veriyi anlamakla ilgilidir. Verideki temel sorunları düzgünce ortaya çıkarmak için çeşitli görsel ve toplulaştırma teknikleri gerektirir. Sağlıklı bir keşif için dikkat edilmesi gereken bazı noktalar şunlardır:
Veri Bağlamı
Herhangi bir veriyi temizlemeden önce, verinin bağlamını anlamalıyız. Veri bağlamı, veride yer alan tüm varlıkların kaynağıdır. Verinin nasıl toplandığını çevreleyen koşullar bütününü yakalar; verinin nasıl toplandığı, nasıl ve ne amaçla kullanılabileceğine dair içgörüler sunar.
Bu, temizleme (ve analiz) sırasında neyin kabul edilebilir olduğuna dair yol gösterici bir ışık görevi görür; böylece bu veriden doğru içgörüleri çıkarabiliriz. Verinin nasıl toplandığını açıkça anladıktan sonra, söz konusu veriyi keşfetmemiz gerekir.
Keşifsel Veri Analizi
Keşifsel veri analizi, özet istatistikler ve grafiksel gösterimler yardımıyla örüntüleri keşfetmek, aykırı durumları tespit etmek, hipotezleri test etmek ve varsayımları kontrol etmek amacıyla veri üzerinde ilk incelemeleri yapmaya yönelik kritik bir süreçtir. Keşif olmadan keşif yoktur. Verimizi keşfetmezsek, veri içindeki çeşitli sorunları ortaya çıkarmak zordur.
Örneğin, bize burada sağlanan bir veri seti var. Maliye Departmanı’nın Rolling Sales dosyaları, New York City’de son on iki aylık dönemde satılan 1, 2 ve 4. vergi sınıfındaki mülkleri listeler. Sağlanan Bronx verisini indirecek ve okuyacağız.
#pandas
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#read excel file
df = pd.read_excel("rollingsales_bronx.xls")
#preview data
df.head()

Bu veri çerçevesindeki dikkat çekici sorunlar şunlardır:
- isimsiz sütunlar
- ilk üç satırda eksik değerler
Ancak, veriyi Excel’de keşfetmek, çalışma kitabındaki gerçek tablonun 4. satıra kadar başlamadığını gösteriyor. Bu nedenle, veriyi yeniden okuyup birkaç parametre ayarlamak, hangi satırların atlanacağını ve hangi satırın başlık yapılacağını belirtmemize olanak sağlar:
#we read the data in again but skill 3 rows this time
df = pd.read_excel("rollingsales_bronx.xls", skiprows = 4, header = [0])
df.head()

Verinin artık nasıl görüntülendiğinde belirgin bir değişim var. İlk içe aktarmayı da temizleyebilirdik; ancak veri keşfi, Python’daki veri içe aktarma işlevimize yalnızca birkaç küçük düzenleme ile bize önemli ölçüde zaman kazandırdı.
Veri keşfi, bir soruşturmacı olarak olay yerine girmek gibidir; neyin yerinden oynadığını pasifçe gözlemleriz. Veri temizleme ise suçun kendisini çözmeye yönelik aktif süreçtir.
Veri temizleme
Veri keşfi genellikle veri temizleme süreçleriyle el ele yürür. Verimizdeki sorunları görsel, toplulaştırma veya istatistiksel yollarla ortaya çıkardıktan sonra bunları düzeltmemiz gerekir. Bu aşamada veriler kaldırılabilir, düzeltilebilir veya atama (imputation) yoluyla tamamlanabilir.
Tutarsız Kayıtlar
Tipik bir tutarsız kayıt örneği, bireylerin cinsiyetlerini girmelerinin istendiği bir formdur. Aynı şeyi temsil eden farklı biçimler görebiliriz; örneğin ‘M’, ‘m’, ‘Male’ veya ‘MALE’. Benzer şekilde bu ay ‘aples’, ‘apples’ ya da ‘APPLES’ mı sattık? Bunları tespit etmenin en iyi yolu bir frekans grafiği veya sütundaki tüm değerlerin ayrı bir listesini oluşturmaktır. Tutarsız kayıtlara yönelik bazı işlemler şunlarla sınırlı olmamak üzere şunları içerir:
- Metinleri küçük harfe veya uygun biçimlendirmeye dönüştürme
- Boşlukları kaldırma
- Sütun adlarını yeniden adlandırma
Python örneği: Veri keşfi sırasında içe aktardığımız veri setini kullanarak, sütun adlarının tutarsız şekilde yazıldığına dikkat edin:

Bu büyük bir mesele gibi görünmese de sütun adlarının tutarlı biçimde erişilebilir olması önemlidir. Örneğin, EASE-MENT her kelime arasında kısa çizgi (-) barındırırken diğerlerinde yalnızca boşluk var.
Veri temizlemenin bir parçası da tutarlılığı sağlamaktır. Bunu iki adımda düzeltmeyi deneyelim:
- Kelimeler arasındaki boşlukları alt çizgiyle değiştirin
- Uygun biçimlendirmeye (title case) dönüştürün
# Extract columns
cols = df.columns
# Create empty list for new column names
new_cols = []
# Iterate over each column name to fix issues
for column in cols:
# Convert column name to title case
proper_cols = column.title()
# Replace spaces and hyphens with underscores
proper_cols_hyphen = proper_cols.replace(" ", "_")
clean_col = proper_cols_hyphen.replace("-", "_")
# Append the cleaned column name to the list
new_cols.append(clean_col)
# Display the transformed column names
new_cols
# Replace existing columns in the dataframe with the cleaned list
df.columns = new_cols
# Preview the updated dataframe
df.head()

Veri türleri ve tür dönüştürme
Veri türü, verinin nasıl temsil edildiğidir ve derleyiciye verinin nasıl kullanılacağını söyler. Verinin nasıl temsil edildiği, o veriyle hangi işlemlerin mümkün olduğunu belirler. Bronx verisindeki veri çerçevemizin her sütunundaki veri türlerini ön izleyelim.
#data types
df.dtypes

Not: Artık nokta yöntemiyle (df.Year_Built) sütun adlarını kolayca seçebildiğimize dikkat edin.
Tüm veri türleri yerli yerinde görünüyor; ancak Year_Built sütunu kategorik olmalı. Büyük bir öneme sahip olmasa da toplulaştırma yaptığımızda Year_Built muhtemelen dahil edilecektir.
#Fix Year_Built column
df.Year_Built = df.Year_Built.astype("str")
#Check
df.dtypes

Eksik veriler
Bazen eksik verileri olan gözlemler (satırlar) bulunur ve bazen de tamamen eksik değerlere sahip tüm sütunlar olabilir. Peki böyle durumlarda ne yaparız? Yok mu sayarız? Bu, yağmur yağdığında su sızdıran bir çatıya benzetilebilir.
Eksik değerler, farklı araçlarda farklı şekillerde temsil edilir. Bu temsiller NULL, boş dizgiler, NaN, NA, #NA vb. olabilir. Eksik verilerle başa çıkmada veri bağlamı önemlidir ve verinin neden eksik olduğunu anlamak kritik önemdedir. Eksik verilerle başa çıkmanın iki temel yöntemi vardır:
- Veriyi kaldırma
- Veriye atama (imputation) yapma
Hangi yöntemin kullanılacağına karar vermeden önce, sütunlar genelinde eksik değer örüntülerini incelemek gerekir. Bunları değerlendirmek için görsel ve betimleyici teknikler kullanacağız.
#extract the column names
cols = df.columns
#plot a heatmap of missing values with seaborn
plt.figure(figsize = (10,5))
sns.heatmap(df[cols].isnull())

Grafik görsel olarak şunları gösteriyor:
- Ease_ment sütunundaki tüm değerler ve Apartment_Number sütunundaki değerlerin neredeyse tamamı eksik
- Units ve Square_Feet ile ilgili sütunlarda eksik değerler dağılmış durumda Çok daha büyük veri setleri için bu grafik ideal olmayabilir. Bunu ele almanın bir başka yolu, bu eksik değerlerin fiili veri boyutuna göre ne kadar anlamlı olduğunu incelemektir.
#Get the percentage of missing values in each column missing_pct = round(df.isnull().sum()/len(df) * 100, 1) print(missing_pct)

Ease_Ment ve Apartment_Number sütunlarını düşürecek ve ardından kalan sütunlardaki eksik değerleri değiştireceğiz.
#columns with more than 30% missing values
drop_cols = missing_pct[missing_pct > 30].index
#We can drop these columns with greater than 30 percent missing values
df_new = df.drop(columns = drop_cols)
#Extract columns with mising values between 1 and 30%
replace_cols = missing_pct[(missing_pct > 0) & (missing_pct < 30)].index
#Iterate to replace missing values
for col in replace_cols:
#if column is year built we replace with median otherwise the mean
if col == "Year_Built":
df_new.fillna(df_new[col].median(), inplace = True)
else:
mean_value = df_new[col].mean()
df_new.fillna(mean_value, inplace = True)
df_new.isnull().sum() #preview for missing values

Elbette, eksik değerlerle başa çıkmaya dair daha fazlası var; bu konu, Datacamp’in Python’da Eksik Verilerle Başa Çıkma kursunda ele alınır. Farklı veri setleri, türler ve yapılar farklı ihtiyaçlara sahiptir; dolayısıyla eksik verilerle uğraşmak tüm veri türleri için tek ve net bir süreç değildir. Aşağıdaki görsel, silme veya atama tekniklerinden hangisinin uygulanacağına dair farklı senaryoları göstermektedir.

Yinelenenler
Her gözlem için tek bir doğru kaynak (single source of truth) olduğundan emin olmalıyız. Kullanıcının formu iki kez göndermesi veya veri girişi sırasında yapılan hatalar nedeniyle tek bir müşteri hakkında birden fazla gözleme sahip olduğumuz senaryolar olabilir. Nasıl ortaya çıktığından bağımsız olarak, tek ve eksiksiz bir doğru sürüm geliştirmemiz gerekir. Bu, işletmelerin şunları sağlamasına yardımcı olur:
- Aynı müşteriyi iki kez hedefleyerek zaman ve para israf edilmez
- Güvenilir ve eksiksiz bir doğru sürüm geliştirilir ve analiz sonuçlarına dayanarak güvenilir iş kararları alınabilir.
Aykırı değerler
Aykırı değerler aşırı uçtaki veri noktalarıdır. Genellikle, verideki örüntünün geri kalanıyla uyuşmayan çok düşük veya çok yüksek değerlerdir; örneğin:
- 200 yaşında bir müşteri
- Antarktika bölgesinde 40° Santigrat sensör okuması
Aykırı Değerleri Belirleme Aykırı değerleri, görsel veya istatistiksel tekniklerle belirlemek için farklı yöntemler vardır
-
Veri setini sıralama: Veriyi basitçe sıralayarak, veri setinde veya ilgi duyulan değişkenlerde aykırı değerler kolayca tespit edilebilir. Ancak bu teknik büyük veri setlerinde başarısız olur ve tüm değerleri bir bakışta görmek zor olabilir.
-
Görselleştirme: Kutu grafikleri (boxplot), histogramlar ve saçılım grafikleri gibi görsel teknikler aykırı değerleri tespit etmeyi kolaylaştırabilir.
-
Z-skorlarını kullanma: Verinin normal dağıldığını varsayarak gözlenen bir değerin olağandışılığını nicelleştiren istatistiksel bir tekniktir. Gözlenen değerlerin ortalamanın üzerinde veya altında kaç standart sapma uzaklıkta olduğunu ifade eder.
Aykırı Değer İşleme Süreci Aykırı değer işleme, verimizde temsil edilen aykırı değerleri kaldırma veya değiştirme sürecidir:
- Aykırı değerleri veriden kaldırma: Bu, verinizin alt veya üst X_yüzdelik diliminde (percentile) yer alan değerlerin kaldırılmasını içerebilir. Aşağıdaki durumlarda aykırı değerler kaldırılabilir:
- Verinin yanlış ölçüldüğü bariz olduğunda. Daha önce belirtildiği gibi, aktif bir müşterinin 200 yaşında olması geçerli bir girdi değildir; kaldırılması gereken tipik bir aykırı değer örneğidir.
-
Aykırı değer analiz sonuçlarınızı değiştirmiyorsa bu aykırı değeri düşebilirsiniz. Bu, veri setindeki aykırı değer sayısı toplam veriye kıyasla çok fazla olmadığında da değerlendirilebilir.
-
Aykırı değerleri değiştirme: Bu, bu uç değerlerin ortalama, medyan veya mod değerlerle değiştirilmesini içerir. Aykırı değerlerin sayısı, gerçek veriye kıyasla hatırı sayılır düzeydeyse, aykırı değerleri kaldırmak başarısız olacaktır. Not: Ortalama değerler aykırı değerlere duyarlıdır. Bu nedenle değiştirme için medyan veya mod değeri dikkate almak daha uygundur.
Veri Doğrulama
Veri temizleme tamamlandıktan sonra, veri kalitesini veri keşfi yöntemiyle yeniden değerlendirmek önemlidir. Bu, veri temizleme sürecinin doğruluğunu ve tamlığını doğrulamak, kısmen bir adımı atlamadığımızdan emin olmak ve ayrıca veri bağlamıyla uyumlu olduğumuzu garanti etmek içindir.
Veri temizleme, raporlama ve otomasyon
Raporlama, temizleme sonrası verinin sağlığını ve temizleme sürecinde yer alan adımları belgeleme işini kapsar. Raporlama, benzer gelecekteki veri temizleme ihtiyaçları için bir kılavuz (yeniden üretilebilirlik) olmasını sağlar; böylece ihtiyaç duyulduğunda bu süreç otomatikleştirilebilir.
Otomasyon, veri temizlemenin yeniden üretilebilir olmasını sağlamaktır. Veri temizleme sürecinin büyük kısmı, ihtiyaç hâlinde yalnızca birkaç değişiklikle yeniden kullanılabilecek tekrar kullanılabilir betiklerden oluşur.
Sonuç
Başarılı bir veri temizleme projesi için dikkate almanız gereken unsurları ve veri temizlemeyi ayrıntılı biçimde ele aldık. Veri uzmanlarının tüm veri bilimi projesinin tahminen %60’ını harcadığı, zaman alan bir aşamadır. Bir veri bilimi projesinin sonucunu tek başına belirleyecek temeldir. Farklı kaynaklardan gelen farklı verilerin farklı ihtiyaçları vardır ve süreçleri kullanım senaryonuza uyacak şekilde uyarlamanız gerekir.
Kaynak:
- Veri dönüştürmeyle ilgili görseller, burada bulunan bir Excel çalışma kitabından kırpılmıştır
- Python defteri DataCamp çalışma alanında mevcuttur
