Eksik Veriler ve Çözüm Yöntemleri (Missing Values)

Eksik Veriler ve Çözüm Yöntemleri (Missing Values)

Makine Öğrenmesi öğrenmek isteyen arkadaşlar bir seri oluşturmaya başlıyorum.Sırayla tüm bölümleri yazılı şekilde anlatacağım. İlk bölüm de data preprocessing ( veri ön işleme ) konusunu işleyeceğiz. Bu yazım da önümüze eksik veriler geldiğinde neler yapmamız gerektiğini anlatacağım. Bu makine öğrenmesi dersi boyunca python dilini kullanacağım. 

 

Başlangıç seviyesi için  Sadi Evren Şeker hocamızın sitesinden sayısal verileri  indirilelim. İlk önce veriler.cvs dosyasını yükleyin.Bir csv dosyasındaki verilieri python programlama dilinde nasıl yazdıracağımızı öğrenelim. Sonra bazi verileri silelim, daha sonra eksik veri yöntemlerini kullanalım.Bu seri boyunca python programlama dilini anlatmayacağım.Öğrenmek için oluşturduğum 2 kaynağı sizlere paylaşacağım. Aşağıdaki linkler den ulaşabilirsiniz.

 

 

 

Verilerin Okunma İşlemleri :

 

İlk önce Pandas kütüphanesini yüklüyoruz. "as" komudu ise sürekli uzun uzun pandas yazmak yerine pd yazmamıza yarıyor. 

Not: Veriler burada uzun uzun cıktığı için verileri biraz kısalltım.Verileri şu şekilde yaptım :

 

ulke,boy,kilo,yas,cinsiyet
tr,130,30,10,e
tr,190,80,25,e
tr,175,90,35,e
us,160,58,39,k
us,162,59,41,k
us,167,62,55,k
fr,159,40,29,k
fr,164,66,32,k
fr,166,56,42,k

 

Kütüphaneleri yükleyelim...

 

import pandas as pd

veriler = pd.read_csv ( " veriler.csv") 

# pd.read_csv komudu csv dosyasını okumamıza yarayan komuttur. 

print (veriler) 

 

Çıktısı :

 

veriler.csv içindeki verileri hepsini yazdırdık.

 

  ulke  boy  kilo  yas cinsiyet
0   tr  130    30   10        e
1   tr  190    80   25        e
2   tr  175    90   35        e
3   us  160    58   39        k
4   us  162    59   41        k
5   us  167    62   55        k
6   fr  159    40   29        k
7   fr  164    66   32        k
8   fr  166    56   42        k

 

Sadace boy sayısal verileri yazdırmak istersek veriler değişkeni içindeki boy verilerini ulaşmamız lazım.

 

boy = veriler[['boy']]  
print(boy) 
kilo = veriler [["kilo"]]            
print(kilo)
boy_kilo = veriler[["boy","kilo"]]  
print(boy_kilo)

 

Boy , Kilo ve boy_kilo  verilerini yazdıralım.

 

Çıktısı :

 

   boy
0  130
1  190
2  175
3  160
4  162
5  167
6  159
7  164
8  166
   kilo
0    30
1    80
2    90
3    58
4    59
5    62
6    40
7    66
8    56
   boy  kilo
0  130    30
1  190    80
2  175    90
3  160    58
4  162    59
5  167    62
6  159    40
7  164    66
8  166    56

 

Eksik Veriler ve Çözümleri :

 

Genelde verinin hatalı okunması, veri kaynağında yaşanan bozulma gibi sorunlar veya bazı verilere erişim zorluğu eksik verilere sebep olabilmektedir.

Imputation (Töhmet) yöntemleri duruma ve beklentilerimize göre çeşitlilik arz eder ve halen üzerinde çalışılmaktadır. Bunlardan çok bilinen bazılarını saymamız gerekirse:

 

  • Sıcak deste (hot deck)

 

  • Soğuk deste (cold deck)

 

  • Liste boyunca silme (listwise deletion)

 

  • Eşlerin silinmesi (pairwise deletion)

 

  • Ortalama töhmet (mean imputation)

 

  • İlkelleme töhmedi (regression imputation)

 

  • Son gözlemin taşınması (last observation carried forward)

 

  • Olasılıksal töhmet (stochastic imputation)

 

  • Çoklu Töhmet (Multiple imputation)

 

Bu yöntemlerden önce ortalama (mean ) alma yöntemini anlatacağım.O zaman başlayalım :)

Önce elimizde eksik veri olması lazım. Önceki kullandığımız verilerdeki kilo verilerden 3 tanesi silelim. ( boş verileri pandas kütüphanesi "NaN" şeklinde gösterecektir.)

 

ulke,boy,kilo,yas,cinsiyet
tr,130,30,10,e
tr,190,80,25,e
tr,175,90,35,e
us,160,,39,k
us,162,,41,k
us,167,62,55,k
fr,159,,29,k
fr,164,66,32,k
fr,166,56,42,k

 

Eksik sayısal verilerin ortalamasını alıp, eksik verilerin yerine yazacağız.

Not : Ortalama alacağımız değerler sayısal veriler olacağı için ülke ve cinsiyet sütünlerini almamamız lazım.Onları devre dışı bırakmamız lazım.

 

eksik_veriler = pd.read_csv( "eksikveriler.csv") 

from sklearn.preprocessing import Imputer 

# sklearn kütüphanesi kullanıyoruz.( Anlamı bilimsel olarak makine öğrenmesi demektir.)

imputer= Imputer(missing_values='NaN', strategy = 'mean', axis=0 ) 

yas = eksik_veriler.iloc[:,1:4].values         

#  iloc alt fonksiyonu bizim kolon(sütünlar) da işlem yapmamıza yarayan bir alt fonksiyondur. 
print(yas)

imputer = imputer.fit(yas[:,1:4])                  # imputer.fit komudu ise mean (ortalama )komudunu verilerimizde uygulamıza yarıyor.
yas[:,1:4] = imputer.transform(yas[:,1:4])   # isminden anlaşıldığı gibi boş verileri yeni değerler ile değiştirmemize yarıyor. 
print(yas)

 

Pandas kütüphanesinde eksik verileri "NaN" ile gösterdiğini söyledik.Missing values eksik değerler(veriler) demek. Eksik verileri tanınladıktna sonra mean(ortalama ) yöntemini kullanmasını söyluyüruz. İşlemlerimizin satır da olmasını istersek axis = 0 diyoruz.Sütun olmasını istersek axis = 1 yapıyoruz.

 

# Eksik verilerimiz :

[130.  30.  10.]
 [190.  80.  25.]
 [175.  90.  35.]
 [160.  nan  39.]
 [162.  nan  41.]
 [167.  62.  55.]
 [159.  nan  29.]
 [164.  66.  32.]
 [166.  56.  42.]
# Mean işlemi yaptığımız verilerin yeni hali:

[130.  30.  10.]
 [190.  80.  25.]
 [175.  90.  35.]
 [160.  64.  39.]
 [162.  64.  41.]
 [167.  62.  55.]
 [159.  64.  29.]
 [164.  66.  32.]
 [166.  56.  42.]

 

 

Diğer yöntemleri yakın zaman da sayfaya yükleyeceğim. Okuduğunuz için teşekkür ederiz.