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 Not19 5 90 7820 7 95 8521 2 60 4522 8 98 92
Model bu verileri kullanarak çeşitli tahminler yapabilir.
Fakat veriler şöyle olursa:
Yaş Çalışma Saati Devam Not19 5 90 7820 ? 95 8521 iki 60 4522 8 98 -
artık problem ortaya çıkar.
Çünkü:
?ne anlama geliyor?ikineden 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,notAhmet,20,Bilgisayar,75Ayşe,21,Bilgisayar,88Mehmet,,Elektrik,65Fatma,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:
BilgisayarbilgisayarBİLGİSAYARBilgisayar 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 pdBuradaki:
pdPandas 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,notAhmet,20,Bilgisayar,75Ayşe,21,Bilgisayar,88Mehmet,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:
dfbir DataFrame olur.
DataFrame'i elektronik tablodaki bir tablo gibi düşünebiliriz.
ad yas bolum not0 Ahmet 20 Bilgisayar 751 Ayşe 21 Bilgisayar 882 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 = 60008. 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 objectyas int64bolum objectnot float64devam 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---19202122
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 notAhmet 20 75Ayşe 21 88Mehmet NaN 65Fatma 22 NaN
Buradaki:
NaNgenellikle 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 0yas 1not 1bolum 0
Bu bize:
yassütununda 1 eksiknotsü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 75Ayşe 21 88Mehmet NaN 65Fatma 22 NaN
şu hâle gelebilir:
Ahmet 20 75Ayş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ıt1.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 notAhmet 20 75Ayşe 21 88Ahmet 20 75Mehmet 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 75Ayşe 21 88Mehmet 19 65
şeklinde olur.
18. Ancak Dikkat!
Her tekrar gerçekten hata değildir.
Örneğin:
Ahmet 20 BilgisayarAhmet 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---1920yirmi bir22
Burada:
yirmi birsayı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:
NaNhâ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,notAhmet,20,Bilgisayar,75Ayşe,21,Bilgisayar,88Mehmet,,Elektrik,65Fatma,22,Bilgisayar,Ahmet,20,Bilgisayar,75
Python programımız:
import pandas as pddf = 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 0yas 1bolum 0not 1
çıktısını alabiliriz.
23. Tekrarlanan Verileri Kontrol Edelim
print(df.duplicated().sum())Sonuç:
1ise 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=FalsePandas'ı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:
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:
85yerine:
850olarak girilmişse model bu veriyi doğru kabul edebilir.
Benzer şekilde:
202122120
ş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,notAhmet,20,Bilgisayar,75Ayşe,21,Bilgisayar,88Mehmet,,Elektrik,65Fatma,22,Bilgisayar,Ahmet,20,Bilgisayar,75Zeynep,19,Elektrik,92
Görev 1
CSV dosyasını Pandas ile okuyun.
import pandas as pddf = 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?
Soru 2
Bir öğrencinin yaşı:
18yerine:
180olarak 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,80Ahmet,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
NaN2. Tekrarlanan veri
df.duplicated()3. Yanlış veri tipi
"20"yerine:
204. Hatalı veri
Yaş = 250Bu dört problem aynı şey değildir.
39. Ders Sonu Mini Quiz
1. Pandas nedir?
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:
Sonuç
Veri analizi ve yapay zekâ çalışmalarında çoğu zaman dikkatimizi model çeker:
ModelAlgoritmaYapay 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
Yorum Gönder