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…

Veri Ön İşleme-1: Nümerik Nitelikler için Boş Değerleri Doldurmak (Python & R )” için 5 yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Fazla kilolardan mı şikayetçisiniz? O halde neden mide küçültme ameliyatı nı denemiyorsunuz. mide küçültme ameliyatı, zayıflamak isteyenler için kesin bir çözüm sunuyor. Üstelik çok kısa bir süre içersinde hayal ettiğiniz kilolara kavuşabilirsiniz.
Caminin önünde ve iki yanında geniş cami halısı dış avlusu olup bunun çevresi pencereli duvarlarla çevrilidir. Bu avulya 3 ü cephede olmak üzere, 8 kapıdan girilir. Şadırvan avlusu, 26 adet granit mermer ve porfir sütuna oturtulmuş, 30 kubbeyle çevrili geniş alandır. Mermer döşemeli bu geniş sahanın ortasında 6 mermer sütunlu şadırvan, sahanın azametini gösterir. Şadırvanın kemerleri, kabartma olarak Rumi geçmelerle ve köşebentleri, kabartma, lale ve karanfil motifleriyle bezelidir. İç avluya, biri cepheden ikisi yandan olmak üzere herbiri merdivenli 3 kapıdan girilmektedir. Bu kapılarla dış avlunun cümle kapısı, ozamana kadar benzeri görülmemiş bronz kapılardır. Kubbeden aşağı doğru indikçe mekan yayılmaktadır. Bu piramidel yükselme ve yayılma sonucunda göz yanlara ve yukarıya doğru aynı mesafelere ulaşmaktadır. Bu özelliklerden dolayı, mekanın neresinde olursanız olun, bütün mekana hakim görüş sağlarsınız. Kubbe yaklaşık olarak 43 metre yükseklikte ve köşeleri pandantifle doldurulmuş 4 muazzam kemer üzerine oturtulmaktadır. Caminin su basmanı üzerinde olması ve kubbe yüksekliği nedeniyle pencereleri oldukça fazladır. Böylece caminin içini süsleyen binlerce çini ve kalem işleri tatlı ışık altında görülmektedir. Caminin içindeki en önemli unsur, ince işçilikle yontulmuş mermerden yapılma mihraptır. Bitişik duvarları, seramik çinilerle kaplanmıştır fakat çevresindeki çok sayıdaki pencere onu daha az ihtişamlı gösterir. Mihrabın sağında, Caminin en kalabalık halinde dahi olsa, herkesin imamı rahatça duyabileceği şekilde dekore edilmiş mimber bulunur. Caminin içi her katında alçak düzeyde olmak üzere 50 farklı lale deseninden üretilmiş 20binden fazla çini ile döşenmiştir. Alt seviyelerdeki çiniler, geleneksel galerideki çinilerin desenleri çiçekler meyveler ve servilerle gösterişli ve ihtişamlıdır.