Veri Ön İşleme-1: Nümerik Nitelikler için Boş Değerleri Doldurmak (Python & R )
Bu yazımızda Python geliştirme ortamına veri setini nasıl indireceğiz ve indirdikten sonra bağımlı ve bağmsız değişkenlere nasıl atayacağımızdan bahsedeceğim. Mavi renkli kodlar komutları, siyah renkli kodlar sonuçları göstermektedir. Öncelikle temel kütüphanelerimizi indirelim:
import numpy as np import matplotlib.pyplot as plt import pandas as pd
Pandas read_csv metodu yardımıyla veri setimizi indirelim: Veri setine buradan ulaşabilirsiniz.
dataset = pd.read_csv('Purchase_Prediction_Data.csv')
Veri setimizde kaç kayıt var count()
metoduyla öğrenelim:
dataset.count() Country 10 Age 9 Salary 9 Purchased 10 dtype: int64
Bazı sütunlar 10 bazı sütunlar 9 saydı. Bu şu anlama gelir; 9 sayan sütunlarda boşluk var. Şimdi veri setimizi tablo halinde bir göz atalım. Bunun için head()
metodunu kullanacağım. head()
varsayılan olarak ilk beş satırı gösterir. Ancak bizim verimizde 10 satır var. O halde head(10)
demeliyiz ki ilk 10 satırı göstersin. Burada veri seti linkini paylaşmıyorum. Basit bir metin editörüne bunları yazıp .csv uzantılı olarak kaydedebilirsiniz.
dataset.head(10) Country Age Salary Purchased 1 Spain 27.0 48000.0 Yes 6 Spain NaN 52000.0 No 2 Germany 30.0 54000.0 No 5 France 35.0 58000.0 Yes 3 Spain 38.0 61000.0 No 9 France 37.0 67000.0 Yes 0 France 44.0 72000.0 No 7 France 48.0 79000.0 Yes 8 Germany 50.0 83000.0 No 4 Germany 40.0 NaN Yes
Verimiz hakkında biraz konuşalım. Verimiz 10 satır ve 4 sütundan oluşuyor. Sütunlar Country, Age ve Salary belirleyici, bağımsız niteliklerimizi oluştururken son sütun Purchased satınalmanın gerçekleşip gerçekleşmediği bilgisini tutan hedef niteliği oluşturuyor. Nitelik yerine değişken desek de olur aslında.
Şimdi bağımsız değişkenlerimizi X değişkenimize atayalım ve nitelikler matrisi (feature matrix) oluşturalım:
X = dataset.iloc[:,:-1].values
Yukarıda gördüğümüz köşeli parantez içindeki ilk iki nokta satırları; ikinci iki nokta sütunları temsil eder. -1 ise en son sütun hariç tüm sütunları al demektir. Indeks soldan sağa 0,1,2.. diye devam ederken sağdan sola -1, -2,-3… şeklinde devam eder.
X array([['France', 44.0, 72000.0], ['Spain', 27.0, 48000.0], ['Germany', 30.0, 54000.0], ['Spain', 38.0, 61000.0], ['Germany', 40.0, nan], ['France', 35.0, 58000.0], ['Spain', nan, 52000.0], ['France', 48.0, 79000.0], ['Germany', 50.0, 83000.0], ['France', 37.0, 67000.0]], dtype=object)
Bağımlı değişkenimize kendi sütunundaki değerleri atayalım ve bağımlı değişken vektörü (dependent variable vector) oluşturalım:
y = dataset.iloc[:,3].values array(['No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes'], dtype=object)
Yukarıdaki köşeli parantez içini umarım anlamışızdır. ilk iki nokta tüm satırları al, 3 ise sütunlardan sadece indeks numarası 3 olan sütunu al anlamına gelmektedir.
Kayıp Verileri Scikit-Learn Imputer Sınıfı ile Tamamlamak
Veri setimizi incelediğimizde içinde iki tane kayıp veri (nan yazılı yerler) olduğunu görebiliyoruz. Güzel ve zevkli makine öğrenmesi modelleri geliştirmek için kullanılan veri kalitesi çok önemli. Çalıştığınız veri berbat ise hangi modeli kullanırsanız kullanın adam akıllı bir sonuç vermeyecek ve bu da sizin ağzınızın tadını kaçıracaktır. Güzel veri ile çalıştığınızda, gerçekten tadına doyum olmaz makine öğrenmesi maceraları yaşayabilirsiniz. Kötü veri frengi hastalığı gibi sizi bu meslekten soğutmaya sebep olabilir. Bu sebeple makine öğrenmesi/veri madenciliği yolculuğunda veri ön hazırlığı gerçekten çok önemli bir aşama. Mevcut parçalarla eksikleri tamamlayarak adeta tarihi bir eser restorasyonu titizliğinde çalışmak gerekir. Aşağıdaki kod ile Imputer sınıfından imputer adında bir nesne yaratıyoruz. Bu sınıfın bir çok parametresinden en çok kullanılanları missing_values
: kayıp değerin ne olduğu yani nerelerin doldurulacağı, strategy kayıp değerlerin yerine ne koyayım ortalamasını mı alayım, ortancasını mı ne yapayımın cevabı, axis
ise bu işleri yaparken satırı mı baz alayım yoksa sütunu mu? 0 sütun, 1 satır demektir.
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
Nesnemizi oluşturduktan sonra boşluk doldurma işine başlayalım. imputer nesnemizi fit metodunu kullanarak gerçek veriyle buluşturuyoruz. Daha sonra transform metodunu kullanarak X bağımsız değişkenler matrisimizin ilgili yerlerine dönüştürdüğümüz değerleri aktarıyoruz.
imputer = imputer.fit(X[:,1:3]) # 1. sütun ve 2. sütun 3 dahil değil X[:,1:3] = imputer.transform(X[:,1:3])
Bakalım X’imize ne gibi değişiklikler olmuş:
X array([['France', 44.0, 72000.0], ['Spain', 27.0, 48000.0], ['Germany', 30.0, 54000.0], ['Spain', 38.0, 61000.0], ['Germany', 40.0, 63777.77777777778], ['France', 35.0, 58000.0], ['Spain', 38.77777777777778, 52000.0], ['France', 48.0, 79000.0], ['Germany', 50.0, 83000.0], ['France', 37.0, 67000.0]], dtype=object)
Kırmızıya boyadığımız yerlerde göreceğiniz gibi sütun ortalamalarını alıp boşluklara atadık.
Kayıp Verileri R Dilinde Tamamlamak
Şimdi aynı işlemleri R dilinde de yapalım. R-Studio’yu açıyorum ve kodluyorum: (setwd()
) ile çalışma dizninizi ayarlamayı unutmayın 🙂
dataset = read.csv('Purchase_Prediction_Data.csv') dataset\$Age = ifelse(is.na(dataset\$Age), ave(dataset\$Age, FUN = function(x) mean(x, na.rm = TRUE)), dataset\$Age)
Sonucu görelim:
dataset Country Age Salary Purchased 1 France 44.00000 72000 No 2 Spain 27.00000 48000 Yes 3 Germany 30.00000 54000 No 4 Spain 38.00000 61000 No 5 Germany 40.00000 NA Yes 6 France 35.00000 58000 Yes 7 Spain 38.77778 52000 No 8 France 48.00000 79000 Yes 9 Germany 50.00000 83000 No 10 France 37.00000 67000 Yes
Gördüğümüz gibi Age sütununda boş olan değer sütun ortalamasıyla dolduruldu. Aynı işlemi Salary sütunu için de yapalım:
dataset\$Salary = ifelse(is.na(dataset\$Salary), ave(dataset\$Salary, FUN = function(x) mean(x, na.rm = TRUE)), dataset\$Salary) dataset Country Age Salary Purchased 1 France 44.00000 72000.00 No 2 Spain 27.00000 48000.00 Yes 3 Germany 30.00000 54000.00 No 4 Spain 38.00000 61000.00 No 5 Germany 40.00000 63777.78 Yes 6 France 35.00000 58000.00 Yes 7 Spain 38.77778 52000.00 No 8 France 48.00000 79000.00 Yes 9 Germany 50.00000 83000.00 No 10 France 37.00000 67000.00 Yes
Evet, Salary sütunu için de boşluğumuzu sütun ortalaması ile doldurduk. Aslında bu boşluk doldurma işinin daha bir çok yöntemi var. Bu yöntemler bir yazıya da sığmaz. Ancak bir yazı dizisinde ele almak gerekir. Kısmet olursa böyle bir şey de yazmayı hedefliyorum. Laf aramızda R kodu bana daha karışık geldi, R’cılar duymasın 🙂
Veriyle kalın…
Purchase_Prediction_Data.csv ‘ye nereden ulaşabiliriz?
Acaba veri dosyasını bulabildiniz mi bulduysanız benimle paylaşabilir misiniz?
Merhaba.
Veri seti:
http://datascience.istanbul/data/Purchase_Prediction_Data.csv
Merhaba,
Purchase_Prediction_Data.csv dosyasını nereden indirebilirim?
Merhaba.
http://datascience.istanbul/data/Purchase_Prediction_Data.csv
adresinden ulaşabilirsiniz.
İyi çalışmalar.