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…

Yazar Hakkında
Toplam 180 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (5 yorum)
Ahmet Öz
Ahmet Öz Yanıtla
- 00:41

Purchase_Prediction_Data.csv ‘ye nereden ulaşabiliriz?

    Ebru
    Ebru Yanıtla
    - 08:53

    Acaba veri dosyasını bulabildiniz mi bulduysanız benimle paylaşabilir misiniz?

      Erkan ŞİRİN
      Erkan ŞİRİN Yanıtla
      - 21:54
Ebru
Ebru Yanıtla
- 09:23

Merhaba,
Purchase_Prediction_Data.csv dosyasını nereden indirebilirim?

    Erkan ŞİRİN
    Erkan ŞİRİN Yanıtla
    - 21:45

    Merhaba.
    http://datascience.istanbul/data/Purchase_Prediction_Data.csv
    adresinden ulaşabilirsiniz.
    İyi çalışmalar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara