Kurs
Verinizin kalitesi, doğrudan analizinizin ve model performansınızın doğruluğunu etkiler. Neden? Çünkü ham veriler sıklıkla tutarsızlıklar, hatalar ve sonuçları çarpıtıp hatalı içgörülere yol açabilecek ilgisiz bilgiler içerir. Veri ön işleme bu sorunu hafifletmenin bir yoludur. Yani, ham veriyi temiz ve yapılandırılmış bir formata dönüştürme sürecidir.
Bu blog yazısında şunları ele alacağım:
- Veri ön işleme nedir?
- Veri ön işlemeye adımları
- Örneklerle veri ön işleme teknikleri
- Veri ön işleme araçları
- Veri ön işleme için en iyi uygulamalar
Haydi başlayalım!
Veri Ön İşleme Nedir?
Veri ön işleme, veri hazırlamanın temel bir yönüdür. Ham veriye, daha ileri analiz veya işleme görevleri için hazır hale getirmek amacıyla uygulanan her türlü işlemi ifade eder.
Geleneksel olarak veri ön işleme, veri analizinde vazgeçilmez bir ön adımdı. Ancak son dönemde bu teknikler, makine öğrenimi ve yapay zeka modellerini eğitmek ve bu modellerden çıkarımlar yapmak için de uyarlanmıştır.
Dolayısıyla veri ön işleme, aşağıdaki gibi görevlerde verinin daha verimli ve doğru biçimde işlenebileceği bir formata dönüştürülmesi süreci olarak tanımlanabilir:
- Veri analizi
- Makine öğrenimi
- Veri bilimi
- Yapay zeka
Veri Ön İşlemede Adımlar
Veri ön işleme; veri kalitesi, yapı ve alaka düzeyiyle ilgili belirli zorlukları ele alan birkaç adımdan oluşur.
Genellikle şu sırada ilerleyen bu temel adımlara bakalım:
Adım 1: Veri temizleme
Veri temizleme, verideki hataları veya tutarsızlıkları tespit edip düzeltme sürecidir; amaç verinin doğru ve eksiksiz olmasını sağlamaktır. Hedef, analizi veya model performansını çarpıtabilecek sorunları gidermektir.
Örneğin:
- Eksik değerlerle başa çıkma: Ortalama/mod atama, silme veya yordayıcı modeller gibi stratejiler kullanarak eksik veriyi doldurma ya da kaldırma.
- Yinelenenleri kaldırma: Her bir kaydın benzersiz ve ilgili olmasını sağlamak için yinelenen kayıtları eleme.
- Tutarsız biçimleri düzeltme: Tutarlılığı korumak için biçimleri standartlaştırma (ör. tarih biçimleri, karakter dizisi yazımı).
Python'da nasıl göründüğüne bir örnek:
# Creating a manual dataset
data = pd.DataFrame({
'name': ['John', 'Jane', 'Jack', 'John', None],
'age': [28, 34, None, 28, 22],
'purchase_amount': [100.5, None, 85.3, 100.5, 50.0],
'date_of_purchase': ['2023/12/01', '2023/12/02', '2023/12/01', '2023/12/01', '2023/12/03']
})
# Handling missing values using mean imputation for 'age' and 'purchase_amount'
imputer = SimpleImputer(strategy='mean')
data[['age', 'purchase_amount']] = imputer.fit_transform(data[['age', 'purchase_amount']])
# Removing duplicate rows
data = data.drop_duplicates()
# Correcting inconsistent date formats
data['date_of_purchase'] = pd.to_datetime(data['date_of_purchase'], errors='coerce')
print(data)

Yukarıdaki kodun çıktısı
Adım 2: Veri bütünleştirme
Veri bütünleştirme, birleştirilmiş bir veri kümesi oluşturmak için verileri birden fazla kaynaktan bir araya getirmeyi içerir. Bu, veriler farklı kaynak sistemlerden toplandığında sıklıkla gereklidir.
Veri bütünleştirmede kullanılan bazı teknikler şunlardır:
- Şema eşleştirme: Tutarlılığı sağlamak için farklı kaynaklardaki alanların ve veri yapılarının hizalanması.
- Veri tekilleştirme: Birden fazla veri kümesi arasında yinelenen kayıtların belirlenip kaldırılması.
Örneğin birden fazla veritabanından müşteri verimiz olduğunu varsayalım. Bunu tek bir görünümde şöyle birleştiririz:
# Creating two manual datasets
data1 = pd.DataFrame({
'customer_id': [1, 2, 3],
'name': ['John', 'Jane', 'Jack'],
'age': [28, 34, 29]
})
data2 = pd.DataFrame({
'customer_id': [1, 3, 4],
'purchase_amount': [100.5, 85.3, 45.0],
'purchase_date': ['2023-12-01', '2023-12-02', '2023-12-03']
})
# Merging datasets on a common key 'customer_id'
merged_data = pd.merge(data1, data2, on='customer_id', how='inner')
print(merged_data)

Yukarıdaki kodun çıktısı
Adım 3: Veri dönüştürme
Veri dönüştürme, veriyi analiz, makine öğrenimi veya madencilik için uygun biçimlere çevirir.
Örneğin:
- Ölçekleme ve normalleştirme: Sayısal değerleri ortak bir ölçeğe getirmek, uzaklık ölçütlerine dayanan algoritmalar için sıklıkla gereklidir.
- Kategorik değişkenleri kodlama: Kategorik veriyi, tek-sıcak (one-hot) veya etiket kodlama teknikleriyle sayısal değerlere dönüştürme.
- Özellik mühendisliği ve çıkarımı: Model performansını iyileştirmek için yeni özellikler oluşturma veya önemli olanları seçme.
scikit-learn kullanarak Python'da nasıl göründüğü:
from sklearn.preprocessing import StandardScaler, OneHotEncoder
# Creating a manual dataset
data = pd.DataFrame({
'category': ['A', 'B', 'A', 'C', 'B'],
'numeric_column': [10, 15, 10, 20, 15]
})
# Scaling numeric data
scaler = StandardScaler()
data['scaled_numeric_column'] = scaler.fit_transform(data[['numeric_column']])
# Encoding categorical variables using one-hot encoding
encoder = OneHotEncoder(sparse_output=False)
encoded_data = pd.DataFrame(encoder.fit_transform(data[['category']]),
columns=encoder.get_feature_names_out(['category']))
# Concatenating the encoded data with the original dataset
data = pd.concat([data, encoded_data], axis=1)
print(data)

Yukarıdaki kodun çıktısı
Adım 4: Veri indirgeme
Veri indirgeme, temel bilgiyi korurken özellik veya kayıt sayısını azaltarak veri kümesini sadeleştirir. Bu, doğruluktan ödün vermeden analizi ve model eğitimini hızlandırır.
Veri indirgeme teknikleri şunları içerir:
- Özellik seçimi: Analize veya model performansına en çok katkı sağlayan özelliklerin seçilmesi.
- Temel bileşen analizi (PCA): Bir boyut indirgeme tekniği olup veriyi daha düşük boyutlu bir uzaya dönüştürür.
- Örnekleme yöntemleri: Temsili örnekler seçerek veri kümesinin boyutunu küçültme; büyük veri kümeleriyle başa çıkmak için yararlıdır.
Python'da boyut indirgemeyi böyle uygularız:
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest, chi2
# Creating a manual dataset
data = pd.DataFrame({
'feature1': [10, 20, 30, 40, 50],
'feature2': [1, 2, 3, 4, 5],
'feature3': [100, 200, 300, 400, 500],
'target': [0, 1, 0, 1, 0]
})
# Feature selection using SelectKBest
selector = SelectKBest(chi2, k=2)
selected_features = selector.fit_transform(data[['feature1', 'feature2', 'feature3']], data['target'])
# Printing selected features
print("Selected features (SelectKBest):")
print(selected_features)
# Dimensionality reduction using PCA
pca = PCA(n_components=2)
pca_data = pca.fit_transform(data[['feature1', 'feature2', 'feature3']])
# Printing PCA results
print("PCA reduced data:")
print(pca_data)

Yukarıdaki kodun çıktısı
Örneklerle Yaygın Veri Ön İşleme Teknikleri
Ham veriyi ön işlemek, analiz veya makine öğrenimi modellerine uygun hale getirmek için gereklidir. Süreçteki adımları da ele aldık.
Bu bölümde, ön işleme aşamasında karşılaşılan yaygın sorunları ele almak için çeşitli teknikleri inceleyeceğiz. Ayrıca, görsel veya metin veri kümeleri gibi belirli bağlamlarda sentetik veri oluşturmada yararlı bir yöntem olan veri artırmayı da keşfedeceğiz.
Eksik veriyi ele alma
Eksik veriler, bir makine öğrenimi modelinin veya analizin performansını olumsuz etkileyebilir. Eksik değerlerle etkili biçimde başa çıkmak için çeşitli stratejiler vardır:
- Atama (imputation): Bu teknik, eksik değerleri eldeki verinin ortalaması, medyanı veya modu gibi hesaplanmış bir tahminle doldurmayı içerir. Gelişmiş yöntemler arasında, verideki ilişkilerden yararlanarak eksik değerleri öngören yordayıcı modelleme bulunur.
# Note: This is dummy code and not expected to run on its own
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean') # Replace 'mean' with 'median' or 'most_frequent' if needed
data['column_with_missing'] = imputer.fit_transform(data[['column_with_missing']])
- Silme: Eksik değer içeren satır veya sütunları kaldırmak basit bir çözümdür. Ancak, özellikle çok sayıda kayıt eksikse değerli verilerin kaybına yol açabileceği için dikkatli kullanılmalıdır.
data.dropna(inplace=True) # Removes rows with any missing values
- Eksik değerleri modelleme: Eksik veri örüntüsünün daha karmaşık olduğu durumlarda, eksik değerler veri kümesinin geri kalanına dayalı olarak makine öğrenimi modelleriyle tahmin edilebilir. Bu, değişkenler arası ilişkileri hesaba katarak doğruluğu artırabilir.
Aykırı değer tespiti ve kaldırma
Aykırı değerler, verinin geri kalanından önemli ölçüde sapan uç değerlerdir ve tıpkı eksik değerler gibi analizi ve model performansını çarpıtabilir. Aykırı değerleri tespit edip ele almak için çeşitli teknikler kullanılabilir:
- Z-Puan yöntemi: Bu yaklaşım, bir veri noktasının ortalamadan kaç standart sapma uzakta olduğunu ölçer. Belirli bir eşik değeri aşan (ör. ±3 standart sapma) noktalar aykırı kabul edilebilir.
# Note: this is dummy code.
# It won’t work unless a data with a column named “column” is imported
from scipy import stats
z_scores = stats.zscore(data['column']) outliers = abs(z_scores) > 3 # Identifying outliers
- Çeyrekler arası aralık (IQR): IQR, birinci çeyrek (Q1) ile üçüncü çeyrek (Q3) arasındaki aralıktır. Q3'ün 1,5 katı üzerindeki veya Q1'in 1,5 katı altındaki değerler aykırı kabul edilir.
Q1 = data['column'].quantile(0.25)
Q3 = data['column'].quantile(0.75)
IQR = Q3 - Q1
outliers = (data['column'] < (Q1 - 1.5 * IQR)) | (data['column'] > (Q3 + 1.5 * IQR))
- Görsel teknikler: Kutu grafikleri, saçılım grafikleri veya histogramlar gibi görselleştirmeler bir veri kümesinde aykırı değerleri tespit etmeye yardımcı olabilir. Belirlendikten sonra, aykırı değerler etkilerine bağlı olarak kaldırılabilir veya dönüştürülebilir.
Veri kodlama
Kategorik verilerle çalışırken, kategorileri makine öğrenimi algoritmalarının işleyebileceği sayısal temsillere dönüştürmek için kodlama gereklidir. Yaygın kodlama teknikleri şunlardır:
- Tek-sıcak kodlama (one-hot encoding): Daha önce belirtildiği gibi bu yöntem her kategori için ikili sütunlar oluşturur.
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse_output=False)
encoded_data = encoder.fit_transform(data[['categorical_column']])
- Etiket kodlama: Etiket kodlama, her kategoriye benzersiz bir sayısal değer atar. Ancak bu yöntem, doğal bir sırası olmayan kategoriler arasında istenmeyen sıralı bir ilişki oluşturabilir.
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['encoded_column'] = le.fit_transform(data['categorical_column'])
- Sıralı (ordinal) kodlama: Kategorik değişkenlerin düşük, orta, yüksek gibi doğal bir sırası olduğunda kullanılır. Her kategori, sırasını yansıtan bir tam sayıya eşlenir.
from sklearn.preprocessing import OrdinalEncoder
oe = OrdinalEncoder(categories=[['low', 'medium', 'high']])
data['ordinal_column'] = oe.fit_transform(data[['ordinal_column']])
Veri ölçekleme ve normalleştirme
Ölçekleme ve normalleştirme, sayısal özelliklerin benzer bir ölçekte olmasını sağlar; bu, özellikle uzaklık ölçütlerine dayanan algoritmalar (ör. en yakın komşular, SVM) için önemlidir.
- Min-maks ölçekleme: Veriyi tipik olarak 0 ile 1 arasında belirtilen bir aralığa ölçekler. Tüm özelliklerin aynı ölçekte olması gerektiğinde kullanışlıdır.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['scaled_column']] = scaler.fit_transform(data[['numeric_column']])
- Standartlaştırma (Z-Puan normalleştirme): Bu yöntem, ortalamayı 0 ve standart sapmayı 1 yapacak şekilde ölçekler; normal dağılmış özelliklerle çalışan modellerin daha iyi performans göstermesine yardımcı olur.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[['standardized_column']] = scaler.fit_transform(data[['numeric_column']])
Veri artırma
Veri artırma, yeni sentetik örnekler oluşturarak bir veri kümesinin boyutunu yapay olarak artırma tekniğidir. Bu, özellikle derin öğrenim modellerinde büyük miktarda verinin gerektiği görsel veya metin veri kümeleri için faydalıdır.
- Görsel (image) artırma: Görselleri döndürme, çevirme, ölçekleme veya gürültü ekleme gibi teknikler, modelin genelleme yeteneğini artıran varyasyonlar üretir.
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
augmented_images = datagen.flow_from_directory('image_directory', target_size=(150, 150))
- Metin artırma: Metin verisi için yöntemler arasında eş anlamlıla değiştirme, rastgele ekleme ve bir cümleyi başka bir dile çevirip tekrar özgün dile çevirerek varyasyonlar oluşturan geri çeviri bulunur.
import nlpaug.augmenter.word as naw
# install nlpaug here: https://github.com/makcedward/nlpaug
aug = naw.SynonymAug(aug_src='wordnet')
augmented_text = aug.augment("This is a sample text for augmentation.")
Veri Ön İşleme Araçları
Veri işlemesini saf Python koduyla uygulayabilseniz de, çeşitli görevleri ele almak ve genel süreci daha verimli kılmak için güçlü araçlar geliştirilmiştir. İşte birkaç örnek:
Python kütüphaneleri
Python'da veri ön işlemesi için epeyce uzmanlaşmış kütüphane vardır. En popüler 3 tanesi:
- Pandas: Python'un en yaygın kullanılan veri düzenleme ve temizleme kütüphanesidir. Başta DataFrame ve Series olmak üzere esnek veri yapıları sunar; bu sayede yapılandırılmış veriyi verimli biçimde işleyip düzenlemenize olanak tanır. Pandas; eksik veriyi ele alma, veri kümelerini birleştirme, veriyi filtreleme ve yeniden şekillendirme gibi işlemleri destekler.
import pandas as pd
# Load a sample dataset
data = pd.DataFrame({
'name': ['John', 'Jane', 'Jack'],
'age': [28, 31, 34]
})
print(data)

Yukarıdaki kodun çıktısı
- NumPy: Sayısal hesaplamalar için temel bir kütüphanedir. Büyük, çok boyutlu dizileri ve matrisleri ve bu diziler üzerinde çalışacak matematiksel işlevleri destekler. NumPy, Pandas gibi daha üst düzey veri işleme kütüphanelerinin sıklıkla temelini oluşturur.
import numpy as np
# Create an array and perform element-wise operations
array = np.array([1, 2, 3, 4])
squared_array = np.square(array)
print(squared_array)
![]()
Yukarıdaki kodun çıktısı
- Scikit-learn: Makine öğrenimi görevleri için yaygın olarak kullanılır; ayrıca ölçekleme, kodlama ve veri dönüştürme gibi çok sayıda ön işleme yardımcı aracı sunar. Ön işleme modülü; kategorik veriyi ele alma, sayısal veriyi ölçekleme, özellik çıkarımı ve daha fazlasına yönelik araçlar içerir.
from sklearn.preprocessing import StandardScaler
# Standardize data
data = [[10, 2], [15, 5], [20, 3]]
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(scaled_data)

Yukarıdaki kodun çıktısı
Bulut platformları
Şirket içi sistemler büyük veri kümelerini etkili biçimde işleyemeyebilir. Böyle durumlarda, bulut platformları dağıtık sistemler genelinde çok büyük miktarda veriyi işlemenizi sağlayan ölçeklenebilir ve verimli çözümler sunar.
Dikkate alabileceğiniz bazı bulut platformu araçları şunlardır:
- AWS Glue: Amazon Web Services tarafından sunulan, tamamen yönetilen bir ETL hizmetidir. Verileri otomatik olarak keşfeder ve düzenler, analitik için hazırlar. Glue veri kataloglamayı destekler ve S3 ile Redshift gibi AWS hizmetlerine bağlanabilir.
- Azure Data Factory: Microsoft'un bulut tabanlı bir veri bütünleştirme hizmetidir. Büyük ölçekli veriler için ETL ve ELT veri hatları kurmayı destekler. Azure Data Factory, kullanıcıların çeşitli hizmetler arasında veri taşımalarına, dönüştürmelerle ön işlemeye tabi tutmalarına ve görsel bir arayüzle iş akışları düzenlemelerine olanak tanır.
Otomasyon araçları
Veri ön işlemenin tekrarlayan adımlarını otomatikleştirmek zaman kazandırır ve hataları azaltır – özellikle makine öğrenimi modelleri ve büyük veri kümeleriyle çalışırken. Yerleşik ön işleme hatları (pipeline) sunan bazı araçlar şunlardır:
- AutoML platformları: AutoML, Otomatikleştirilmiş Makine Öğrenimi'n kısaltmasıdır (ve adının dediğini yapar). Başka bir deyişle, bu platformlar makine öğrenimi iş akışının çeşitli aşamalarını otomatikleştirir. Google'ın AutoML'i, Microsoft'un Azure AutoML'si ve H2O.ai'ın AutoML'i gibi platformlar; özellik seçimi, veri dönüştürme ve model seçimi gibi görevleri minimum kullanıcı müdahalesiyle ele alan otomatik hatlar sağlar.
- scikit-learn'de ön işleme hatları: Scikit-learn sağlar Pipeline sınıfını; bu sınıf ön işleme adımlarını sadeleştirip otomatikleştirmeye yardımcı olur. Birden fazla ön işleme işlemini tek bir yürütülebilir iş akışında uç uca eklemenize olanak tanır ve böylece görevlerin tutarlı biçimde uygulanmasını sağlar:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
# Example Pipeline combining different preprocessing tasks
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder())
])
preprocessor = ColumnTransformer(transformers=[
('num', numeric_transformer, ['age']),
('cat', categorical_transformer, ['category'])
])
preprocessed_data = preprocessor.fit_transform(data)
Veri Ön İşleme için En İyi Uygulamalar
Ön işleme çalışmalarınızın etkinliğini en üst düzeye çıkarmak için en iyi uygulamaları izlemek önemlidir. Bu bağlamda, dikkate almanızı önereceğim bazı uygulamalar şunlardır:
Veriyi anlayın
Ön işlemeye başlamadan önce veri kümesini etraflıca anlamak önemlidir. Elde bulunan verinin yapısını belirlemek için keşifçi veri analizi yapın. Özellikle anlamak istediğiniz noktalar şunlardır:
- Temel özellikler
- Olası anormallikler
- İlişkiler
Veri kümesinin özelliklerini önce anlamadan yanlış ön işleme yöntemleri uygulamanız ve veriyi çarpıtmanız kuvvetle muhtemeldir.
Tekrarlanan adımları otomatikleştirin
Ön işleme sıklıkla tekrarlayan görevleri içerir. Hatlar (pipeline) oluşturarak bu görevleri otomatikleştirmek, tutarlılık ve verimlilik sağlar ve manuel hataların olasılığını azaltır. İş akışlarını sadeleştirmek için scikit-learn gibi araçlardaki ya da bulut tabanlı platformlardaki hatalardan yararlanın.
Ön işleme adımlarını belgelendirin
Açık belgelendirme iki hedefe hizmet eder:
- Yineleme (reproducibility)
- Anlaşılabilirlik (ileride kendiniz için ya da ekibinizdeki diğerleri için).
Her karar, dönüştürme veya filtreleme adımı, gerekçesiyle birlikte kaydedilmelidir. Bu, ekip üyeleri arasında iş birliğini önemli ölçüde güçlendirir ve projelere bıraktığınız yerden devam etmenize yardımcı olur.
Yinelemeli iyileştirmeler
Veri ön işleme tek seferlik bir görev değildir – yinelemeli bir süreç olmalıdır. Modeller geliştikçe ve performanslarına dair geri bildirim sağladıkça, daha iyi sonuçlar elde etmek için bu bilgiyi kullanarak ön işleme adımlarını gözden geçirip iyileştirin. Örneğin, özellik mühendisliği yeni faydalı özellikler ortaya çıkarabilir veya aykırı değer işleme ayarları model doğruluğunu artırabilir – bu geri bildirimi ön işleme adımlarınızı güncellemek için kullanın.
Sonuç
Veri ön işleme, herhangi bir veri projesinin başarısında kritik bir rol oynar. Doğru ön işleme, ham verinin temiz ve yapılandırılmış bir formata dönüştürülmesini sağlar; bu da model ve analizlerin daha doğru, anlamlı içgörüler üretmesine yardımcı olur.
Bu yazıda, veri ön işlemesini uygulamanıza yardımcı olacak çeşitli teknikleri paylaştım. Yine de en önemli nokta, bu sürecin tek seferlik değil yinelemeli bir süreç olduğudur! Sürekli iyileştirme, model performansını artırır ve daha iyi kararlar almanızı sağlar. İyi hazırlanmış bir veri kümesi, başarılı her veri ve yapay zeka girişiminin temelini atar.
Öğrenmeye devam etmek için aşağıdaki mükemmel kaynaklara göz atmanızı öneririm:

