Veri Ön İşleme: Yapay Zekâ İçin Veriyi Hazırlamak

Aşağıdaki makale yaklaşık 2 saatlik ders için tasarlanmıştır. İçinde anlatım, örnekler, kod uygulaması, mini alıştırmalar ve ders sonunda yapılabilecek bir laboratuvar çalışması bulunuyor.


1. Derse Başlarken: Yapay Zekâ Veriyi Nereden Öğrenir?

Yapay zekâ hakkında konuşurken genellikle şu kavramlarla karşılaşırız:

  • Makine öğrenmesi
  • Derin öğrenme
  • Yapay sinir ağları
  • Büyük veri
  • Model eğitimi
  • Tahmin

Fakat bütün bu süreçlerin temelinde çok daha basit bir şey vardır:

Veri.

Bir yapay zekâ modeline binlerce öğrenci kaydı verirsek model bu verilerden bazı ilişkileri öğrenebilir.

Örneğin:

Yaş Çalışma Saati Devam Not
19 5 90 78
20 7 95 85
21 2 60 45
22 8 98 92

Model bu verileri kullanarak çeşitli tahminler yapabilir.

Fakat veriler şöyle olursa:

Yaş Çalışma Saati Devam Not
19 5 90 78
20 ? 95 85
21 iki 60 45
22 8 98 -

artık problem ortaya çıkar.

Çünkü:

  • ? ne anlama geliyor?
  • iki neden sayı olarak değil metin olarak yazılmış?
  • - eksik veri mi?
  • Aynı öğrenci birden fazla kez kaydedilmiş olabilir mi?
  • Yaş sütunundaki bütün değerler gerçekten sayısal mı?

İşte burada veri ön işleme devreye girer.


2. Veri Ön İşleme Nedir?

Veri ön işleme, ham verinin analiz ve makine öğrenmesi için uygun hâle getirilmesi işlemidir.

Basitçe:

HAM VERİ
↓
İnceleme
↓
Temizleme
↓
Dönüştürme
↓
Kontrol
↓
ANALİZE HAZIR VERİ

Başka bir ifadeyle:

Veri ön işleme = Ham veriyi kullanılabilir bilgiye dönüştürme hazırlığıdır.




3. Neden Veri Temizlemek Zorundayız?

Gerçek dünyadaki veriler genellikle düzenli değildir.

Örneğin bir okul sisteminden alınan CSV dosyasında:

ad,yas,bolum,not
Ahmet,20,Bilgisayar,75
Ayşe,21,Bilgisayar,88
Mehmet,,Elektrik,65
Fatma,22,Bilgisayar,
Ahmet,20,Bilgisayar,75

Burada birkaç problem görüyoruz.

Problem 1 – Eksik değer

Mehmet'in yaşı yok.

Fatma'nın notu yok.

Problem 2 – Tekrarlanan kayıt

Ahmet iki kez bulunuyor.

Problem 3 – Veri tipi

Yaş ve not sayı olmalı.

Problem 4 – Tutarsızlık

Gerçek verilerde aynı bilgi farklı biçimlerde bulunabilir.

Örneğin:

Bilgisayar
bilgisayar
BİLGİSAYAR
Bilgisayar Mühendisliği

Bunların gerçekten aynı kategori olup olmadığına karar vermek gerekir.


4. Pandas Nedir?

Python'da tablo biçimindeki verilerle çalışmak için en önemli kütüphanelerden biri Pandas'tır.

Pandas özellikle:

  • CSV okumak,
  • Excel verileriyle çalışmak,
  • veri temizlemek,
  • filtrelemek,
  • gruplamak,
  • istatistik hesaplamak

için kullanılır.

Kütüphaneyi şöyle içeri aktarabiliriz:

import pandas as pd

Buradaki:

pd

Pandas için kullandığımız kısa isimdir.


5. CSV Dosyası Nedir?

CSV, Comma-Separated Values ifadesinin kısaltmasıdır.

Türkçeye kabaca:

Virgülle ayrılmış değerler

şeklinde çevrilebilir.

Örneğin:

ad,yas,bolum,not
Ahmet,20,Bilgisayar,75
Ayşe,21,Bilgisayar,88
Mehmet,19,Elektrik,65

Bir CSV dosyasını Pandas ile okumak oldukça kolaydır:

import pandas as pd
df = pd.read_csv("ogrenciler.csv")

Burada:

df

bir DataFrame olur.

DataFrame'i elektronik tablodaki bir tablo gibi düşünebiliriz.

ad yas bolum     not
0 Ahmet 20     Bilgisayar 75
1 Ayşe 21     Bilgisayar 88
2 Mehmet 19     Elektrik 65

6. İlk İş: Veriyi Tanımak

Veriyi temizlemeye başlamadan önce verinin nasıl göründüğünü anlamamız gerekir.

En temel komut:

df.head()

İlk 5 satırı gösterir.

Örneğin:

print(df.head())

Benzer şekilde son satırlara bakabiliriz:

df.tail()

7. Veri Kümesinin Boyutunu Öğrenmek

Kaç satır ve kaç sütun olduğunu görmek için:

df.shape

Örneğin:

(1000, 6)

sonucu:

1000 satır, 6 sütun

olduğunu gösterir.

Öğrencilere burada şu soruyu yöneltebilirsiniz:

“1000 öğrencilik bir veri setinde 6 sütun varsa toplam kaç hücre vardır?”

Cevap:

1000 × 6 = 6000

8. Sütunları Görmek

Veri setindeki sütunları görmek için:

df.columns

Örneğin:

Index(['ad', 'yas', 'bolum', 'not', 'devam', 'sinif'], dtype='object')

9. Veri Tiplerini Kontrol Etmek

Veri ön işlemenin en önemli aşamalarından biri veri tiplerini kontrol etmektir.

Bunun için:

df.dtypes

Örneğin:

ad object
yas int64
bolum object
not float64
devam int64

Burada:

  • int64 → tam sayı
  • float64 → ondalıklı sayı
  • object → genellikle metin

anlamına gelir.


10. Neden Veri Tipleri Önemlidir?

Şöyle bir veri düşünelim:

yas
---
19
20
21
22

Bunlar sayıysa:

df["yas"].mean()

ile ortalamayı hesaplayabiliriz.

Ama Pandas yaşları şöyle algılarsa:

"19"
"20"
"21"
"22"

bunlar metin olabilir.

Bu durumda sayısal işlemlerde problem yaşayabiliriz.

İşte bu nedenle:

Verinin yalnızca değerlerine değil, veri tiplerine de bakmalıyız.


11. Eksik Değerler

Gerçek veri setlerinde en sık karşılaşacağımız problemlerden biri eksik değerlerdir.

Örneğin:

ad yas not
Ahmet 20 75
Ayşe 21 88
Mehmet NaN 65
Fatma 22 NaN

Buradaki:

NaN

genellikle eksik veya mevcut olmayan değeri ifade eder.


12. Eksik Değerleri Bulmak

Pandas ile:

df.isnull()

kullanabiliriz.

Daha kullanışlı olan yöntem:

df.isnull().sum()

Örneğin:

ad 0
yas 1
not 1
bolum 0

Bu bize:

  • yas sütununda 1 eksik
  • not sütununda 1 eksik

olduğunu gösterir.


13. Eksik Verilerle Ne Yapabiliriz?

Eksik veri gördüğümüzde hemen silmek doğru değildir.

Önümüzde birkaç seçenek vardır.

1. Satırı silmek

df.dropna()

Eksik değer bulunan satırları kaldırır.

Örneğin:

Ahmet 20 75
Ayşe 21 88
Mehmet NaN 65
Fatma 22 NaN

şu hâle gelebilir:

Ahmet 20 75
Ayşe 21 88

14. Eksik Değeri Ortalama ile Doldurmak

Örneğin notların bir tanesi eksikse:

df["not"] = df["not"].fillna(df["not"].mean())

Burada:

df["not"].mean()

notların ortalamasını hesaplar.

Ardından:

fillna()

eksik değeri bu ortalamayla doldurur.


15. Her Eksik Veri Silinmeli mi?

Hayır.

Bu önemli bir noktadır.

Örneğin 1 milyon satırlık bir veri setimiz olduğunu düşünelim.

1000 satırda eksik veri varsa:

1.000.000 → toplam kayıt
1.000 → eksik kayıt

Bütün satırları silmek veri kaybına yol açabilir.

Bu nedenle veri biliminde:

Eksik veriyi silmeden önce neden eksik olduğunu anlamaya çalışırız.


16. Tekrar Eden Veriler

Bir başka problem duplicate, yani tekrar eden kayıtlardır.

Örneğin:

ad yas not
Ahmet 20 75
Ayşe 21 88
Ahmet 20 75
Mehmet 19 65

Ahmet iki kez kayıtlıdır.

Bunu kontrol etmek için:

df.duplicated()

kullanabiliriz.

Toplam tekrar sayısını görmek için:

df.duplicated().sum()

17. Tekrarlanan Kayıtları Silmek

Tekrar eden satırları kaldırmak için:

df = df.drop_duplicates()

Sonrasında veri setimiz:

Ahmet 20 75
Ayşe 21 88
Mehmet 19 65

şeklinde olur.


18. Ancak Dikkat!

Her tekrar gerçekten hata değildir.

Örneğin:

Ahmet 20 Bilgisayar
Ahmet 20 Bilgisayar

iki farklı ders kaydı olabilir.

Bu nedenle:

Duplicate gördüğümüzde otomatik olarak silmek yerine verinin anlamını kontrol etmeliyiz.

Bu, öğrencilerin veri analizi açısından öğrenmesi gereken çok önemli bir düşünme becerisidir.


19. Veri Tipi Dönüştürme

Bazen verinin tipi yanlış olabilir.

Örneğin:

yas
---
"19"
"20"
"21"
"22"

Bu değerler metin olarak okunmuş olabilir.

Bunu sayıya çevirmek için:

df["yas"] = pd.to_numeric(df["yas"])

kullanabiliriz.


20. Sayıya Dönüştürülemeyen Değerler

Daha gerçekçi bir örnek:

yas
---
19
20
yirmi bir
22

Burada:

yirmi bir

sayısal değildir.

Dönüştürürken:

df["yas"] = pd.to_numeric(
df["yas"],
errors="coerce"
)

kullanabiliriz.

errors="coerce" sayesinde dönüştürülemeyen değerler:

NaN

hâline gelir.

Sonrasında bu eksik değerlerle ayrıca ilgilenebiliriz.


21. Bir Veri Setini Baştan Sona Temizlemek

Şimdi gerçek bir örnek üzerinden ilerleyelim.

Örneğin:

ad,yas,bolum,not
Ahmet,20,Bilgisayar,75
Ayşe,21,Bilgisayar,88
Mehmet,,Elektrik,65
Fatma,22,Bilgisayar,
Ahmet,20,Bilgisayar,75

Python programımız:

import pandas as pd
df = pd.read_csv("ogrenciler.csv")
print(df.head())
print(df.shape)
print(df.dtypes)

22. Eksik Verileri Kontrol Edelim

print(df.isnull().sum())

Örneğin:

ad 0
yas 1
bolum 0
not 1

çıktısını alabiliriz.


23. Tekrarlanan Verileri Kontrol Edelim

print(df.duplicated().sum())

Sonuç:

1

ise bir tane tekrar eden kayıt vardır.


24. Tekrarlanan Kayıtları Temizleyelim

df = df.drop_duplicates()

25. Eksik Notları Dolduralım

Örneğin eksik notları ortalamayla doldurabiliriz:

df["not"] = df["not"].fillna(df["not"].mean())

26. Eksik Yaşları Dolduralım

Yaş sütununda da ortalama kullanılabilir:

df["yas"] = df["yas"].fillna(df["yas"].mean())

Ancak burada öğrencilerin dikkatini şu noktaya çekmek gerekir:

Ortalama ile doldurmak tek doğru yöntem değildir.

Bazı durumlarda:

  • medyan,
  • en sık değer,
  • başka bir kaynaktan veri,
  • model tabanlı tahmin

kullanılabilir.

Bu derste temel yöntemi öğreniyoruz.


27. Veri Tiplerini Kontrol Edelim

print(df.dtypes)

Gerekirse:

df["yas"] = pd.to_numeric(df["yas"])
df["not"] = pd.to_numeric(df["not"])

28. Son Kontrol

Temizleme işlemlerinden sonra tekrar kontrol ederiz:

print(df.isnull().sum())
print(df.duplicated().sum())
print(df.dtypes)

Burada önemli bir veri bilimi alışkanlığı kazanıyoruz:

Temizledim demek yetmez; temizliği kontrol etmek gerekir.


29. Temizlenmiş Veriyi Kaydetmek

Temizlenmiş veri setini yeni bir CSV dosyasına aktarabiliriz:

df.to_csv("ogrenciler_temiz.csv", index=False)

Buradaki:

index=False

Pandas'ın DataFrame indeksini ayrıca CSV'ye yazmasını engeller.

Artık elimizde:

ogrenciler.csv
↓
Veri temizleme
↓
ogrenciler_temiz.csv

şeklinde bir süreç vardır.


30. Veri Ön İşleme Döngüsü

Öğrencilerin aklında şu modeli oluşturmak oldukça faydalı olacaktır:


Bu yapı daha sonra makine öğrenmesi projelerinde tekrar tekrar karşımıza çıkacaktır.


31. Neden Bu Konu Yapay Zekâ Kursunda?

Burada öğrencilerin yalnızca Pandas komutlarını ezberlemesini istemiyoruz.

Asıl hedef şu düşünceyi kazandırmaktır:

Yapay zekâ modelinden önce verinin kalitesini düşünmeliyiz.

Örneğin bir öğrencinin notu:

85

yerine:

850

olarak girilmişse model bu veriyi doğru kabul edebilir.

Benzer şekilde:

20
21
22
120

şeklindeki yaş verisinde 120 büyük ihtimalle hatalıdır.

Dolayısıyla:

Temiz veri → daha güvenilir analiz → daha güvenilir model

şeklinde bir ilişki vardır.

Ancak önemli bir ayrıntı:

Temiz veri, tek başına iyi bir yapay zekâ modeli garantilemez.

Modelin algoritması, özellik seçimi, veri miktarı, veri dağılımı ve değerlendirme yöntemi de önemlidir.


32. Öğrenciler İçin Temel Pandas Komutları

Bu dersin sonunda öğrencilerin aşağıdaki komutları tanıması yeterlidir:

İşlem                Pandas
CSV oku        pd.read_csv()
İlk satırlar        df.head()
Son satırlar        df.tail()
Boyut        df.shape
Sütunlar        df.columns
Veri tipleri        df.dtypes
Eksik veri        df.isnull()
Eksik sayısı        df.isnull().sum()
Tekrar kontrolü        df.duplicated()
Tekrar sayısı        df.duplicated().sum()
Tekrarları sil        df.drop_duplicates()
Eksikleri sil        df.dropna()
Eksikleri doldur        df.fillna()
Sayıya dönüştür        pd.to_numeric()
CSV kaydet        df.to_csv()

33. Uygulama: Öğrenci Veri Setini Temizleyelim

Şimdi öğrencilerin bilgisayarında gerçekleştirebileceği küçük bir uygulama yapalım.

Veri seti

ogrenciler.csv

ad,yas,bolum,not
Ahmet,20,Bilgisayar,75
Ayşe,21,Bilgisayar,88
Mehmet,,Elektrik,65
Fatma,22,Bilgisayar,
Ahmet,20,Bilgisayar,75
Zeynep,19,Elektrik,92

Görev 1

CSV dosyasını Pandas ile okuyun.

import pandas as pd
df = pd.read_csv("ogrenciler.csv")

Görev 2

İlk 5 satırı gösterin.

print(df.head())

Görev 3

Veri setinin boyutunu bulun.

print(df.shape)

Görev 4

Veri tiplerini inceleyin.

print(df.dtypes)

Görev 5

Eksik değerleri bulun.

print(df.isnull().sum())

Görev 6

Tekrar eden kayıtları bulun.

print(df.duplicated().sum())

Görev 7

Tekrarları temizleyin.

df = df.drop_duplicates()

Görev 8

Eksik yaşları ortalama yaşla doldurun.

df["yas"] = df["yas"].fillna(df["yas"].mean())

Görev 9

Eksik notları ortalama notla doldurun.

df["not"] = df["not"].fillna(df["not"].mean())

Görev 10

Son veri setini kontrol edin.

print(df)
print(df.isnull().sum())
print(df.duplicated().sum())

Görev 11

Temizlenmiş veriyi kaydedin.

df.to_csv(

    "ogrenciler_temiz.csv",

    index=False

)


34. Bir Adım Daha: Öğrenci Verisini Sorgulama

Temizleme sonrasında veri üzerinde basit sorular sorabiliriz.

Örneğin:

80'in üzerinde not alan öğrenciler kimler?

df[df["not"] > 80]

Veya:

Bilgisayar bölümündeki öğrenciler kimler?

df[df["bolum"] == "Bilgisayar"]

Bu noktada öğrenciler şunu fark eder:

Veri temizleme, veri analizinin başlangıç noktasıdır.


35. Sınıf İçi Tartışma

Öğrencilere aşağıdaki soruları yöneltebilirsiniz:

Soru 1

Bir veri setinde 10.000 kayıt var ve 50 tanesinde eksik değer bulunuyor.

Hepsini silmek doğru mudur?

Beklenen düşünce:
Her zaman değil. Eksik verilerin dağılımı ve neden oluştuğu incelenmelidir.


Soru 2

Bir öğrencinin yaşı:

18

yerine:

180

olarak girilmiş.

Bu bir eksik veri problemi midir?

Hayır.

Bu bir hatalı/anormal veri problemidir.


Soru 3

Aşağıdaki iki kayıt aynı mıdır?

Ahmet,20,Bilgisayar,80
Ahmet,20,bilgisayar,80

Teknik olarak satırlar farklıdır.

Ama semantik olarak aynı öğrenciyi temsil ediyor olabilir.

Bu nedenle veri temizleme sadece kod yazmak değildir.

Verinin anlamını anlamak gerekir.


36. Yapay Zekâ ile Bağlantı

Bu noktada öğrencilerden şu soruyu düşünmelerini isteyebilirsiniz:

"Modelimize kötü veri verirsek ne olur?"

Örneğin:

Gerçek veri
↓
Hatalı kayıtlar
↓
Eksik değerler
↓
Yanlış veri tipleri
↓
Model eğitimi
↓
Hatalı sonuçlar

Bu durum veri biliminde bazen:

Garbage In, Garbage Out

olarak ifade edilir.

Yani kabaca:

Kötü veri girerse kötü sonuç çıkabilir.


37. Dersin Ana Mesajı

Bu dersin sonunda öğrencilerin aşağıdaki dört kavramı birbirinden ayırabilmesi gerekir:

1. Eksik veri

NaN

2. Tekrarlanan veri

df.duplicated()

3. Yanlış veri tipi

"20"

yerine:

20

4. Hatalı veri

Yaş = 250

Bu dört problem aynı şey değildir.


39. Ders Sonu Mini Quiz

1. Pandas nedir?

A) Programlama dili
B) Python veri analizi kütüphanesi
C) Veritabanı
D) Yapay zekâ modeli

Cevap: B


2. CSV dosyasını okumak için hangisi kullanılır?

pd.read_csv()

3. Eksik değerleri kontrol etmek için?

df.isnull()

4. Tekrar eden kayıtların sayısını nasıl buluruz?

df.duplicated().sum()

5. Tekrar eden kayıtları silmek için?

df.drop_duplicates()

6. CSV dosyasını kaydetmek için?

df.to_csv()

40. Öğrencinin Ders Sonunda Bilmesi Gerekenler

Ders sonunda öğrencinin şunları yapabilmesi hedeflenmelidir:

✓ CSV dosyasını Pandas ile okuyabilmek
✓ DataFrame kavramını açıklayabilmek
✓ Veri setinin boyutunu ve sütunlarını inceleyebilmek
✓ Veri tiplerini kontrol edebilmek
✓ Eksik değerleri tespit edebilmek
✓ Eksik değerleri uygun bir yöntemle ele alabilmek
✓ Tekrar eden kayıtları bulabilmek
✓ Tekrar eden kayıtları temizleyebilmek
✓ Veri tiplerini dönüştürebilmek
✓ Temizlenmiş veriyi CSV olarak kaydedebilmek
✓ Veri temizlemenin yapay zekâ açısından neden önemli olduğunu açıklayabilmek


Sonuç

Veri analizi ve yapay zekâ çalışmalarında çoğu zaman dikkatimizi model çeker:

Model
Algoritma
Yapay Sinir Ağı
Tahmin

Ancak bütün bu süreçlerden önce daha temel bir aşama vardır:

VERİ
↓
┌──────────────┐
│ İnceleme │
└──────┬───────┘
↓
┌──────────────┐
│ Temizleme │
└──────┬───────┘
↓
┌──────────────┐
│ Dönüştürme │
└──────┬───────┘
↓
┌──────────────┐
│ Analiz │
└──────┬───────┘
↓
┌──────────────┐
│ Görselleştirme│
└──────┬───────┘
↓
┌──────────────┐
│ Yapay Zekâ │
│ Modeli │
└──────────────┘

Bu nedenle öğrencilerin aklında şu cümle kalmalıdır:

“Yapay zekâya model öğretmeden önce veriyi hazırlamayı öğrenmeliyiz.”

Bir sonraki 2 saatlik “Tanımlayıcı İstatistikler” dersine geçildiğinde de öğrenciler artık temizlenmiş veri üzerinde ortalama, varyans ve standart sapmayı hesaplayabilecek bir zemine sahip olacaktır.

Yorumlar

Bu blogdaki popüler yayınlar

Yapay Zekâ Uygulama Alanları

Görsel ve Video Üretiminde Üretken Yapay Zekâ Araçları

AI ve Toplum – Eğitim, Sağlık, Endüstri ve Kamu Hizmetlerinde Yapay Zekâ