Preprocessing, Data Import, Missing Values

Kategori: Machine Learning , 23 Kasım 2019 , JanFranco


Machine Learning algoritmalarını kullanabilmek için elimizdeki veriyi, o algoritmaya uygun hale getirmemiz gerekebilir. Ki genellikle gerekir. Tabi uygun hale getirmeden önce ilk olarak veriyi import etmemiz gerekli. Elimizdeki veri bir .csv dosyası. Açılımı comma seperated values yani virgül ile ayrılmış değerlerdir. Veri kümesini github hesabımdaki machine-learning-tutorials klasörünün altındaki data klasöründe bulabilirsiniz. Bir ön işlemeden önce ilk olarak veriyi anlamamız gerekir. Veriyi incelediğimzide ilk satırda sütun, kolon başlıklarını görüyoruz, sırasıyla 'ulke', 'boy', 'kilo', 'yas', 'cinsiyet'. Ülke ve cinsiyet değerleri string değerken diğer değerler integer değerlerdir. 3 ülkeden insanların fiziksel özelliklerinin bulunduğu bir veriseti elimizde. Şimdi veriyi import edelim. Bunun için pandas kütüphanesinin read_csv methodunu kullanacağız. pandas kütüphanesini ve daha sonradan kullanacağımız numpy kütüphanesini dahil edelim:


import numpy as np
import pandas as pd
Buradaki as pd ifadesi pandas kütüphanesi pd ismiyle çağırılacak demektir. Şimdi methodu kullanalım:


df = pd.read_csv("veriler.csv")
Burada veriler.csv dosyasını okuduk ve df değişkenine atadık. veriler.csv dosyası proje dosyaları ile aynı yerde bulunduğundan direk olarak böyle çağırabildik. Ancak farklı bir adreste ise o adresin yolunu yazabiliriz. Örneğin masaüstündeyse read_csv("C:/Users/ErenS/.../veriler.csv") şeklinde çağırabilirdik. Bazı değerleri inceleyelim:


height = df[['boy']]
heightAndWeight = df[['boy', 'kilo']]

print(heightAndWeight)
print("************")
print(df)
print("************")

>>

    boy  kilo
0   130    30
1   125    36
2   135    34
3   133    30
4   129    38
5   180    90
6   190    80
7   175    90
8   177    60
9   185   105
10  165    55
11  155    50
12  160    58
13  162    59
14  167    62
15  174    70
16  193    90
17  187    80
18  183    88
19  159    40
20  164    66
21  166    56
************
   ulke  boy  kilo   yas cinsiyet
0    tr  130    30  10.0        e
1    tr  125    36  11.0        e
2    tr  135    34  10.0        k
3    tr  133    30   9.0        k
4    tr  129    38  12.0        e
5    tr  180    90  30.0        e
6    tr  190    80  25.0        e
7    tr  175    90  35.0        e
8    tr  177    60  22.0        k
9    us  185   105  33.0        e
10   us  165    55  27.0        k
11   us  155    50  44.0        k
12   us  160    58   NaN        k
13   us  162    59  41.0        k
14   us  167    62  55.0        k
15   fr  174    70  47.0        e
16   fr  193    90   NaN        e
17   fr  187    80  27.0        e
18   fr  183    88  28.0        e
19   fr  159    40  29.0        k
20   fr  164    66  32.0        k
21   fr  166    56  42.0        k
************
df['boy'] yerine df[['boy']] şeklinde bir çağırım yapmamızın sebebi df değişkeninin listeleri tutan bir liste olmasından kaynaklı. Yani ['boy'] bir listedir. df değişkeninde ['boy'], ['kilo'] şeklinde listeler vardır. pandas kütüphanesi satırlara otomatik olarak index vermektedir. 12. ve 16. satırlara baktığımızda yas sütünundaki verilerin NaN şeklinde olduğunu görüyoruz. NaN, Not a Number anlamına geliyor. Buradaki veriler eksik demektir. Eksik veriler ile karşılaştığımızda yapılabilecek, izlenecek bir çok yol mevcuttur. En çok kullanılan iki yöntem, eksik verinin olduğu satırı silmek ve o sütundaki değerlerin ortamalasını alıp eksik veriyi o ortalama ile doldurmaktır. Diğer yöntemler de mevcuttur birazdan göreceğiz. Burada eksik verileri ortalama bularak dolduralım. Bunun için sklearn kütüphanesindeki SimpleImputer methodunu kullanacağız:


from sklearn.impute import SimpleImputer
SimpleImputer bir sınıftır. O sınıftan bir obje üretelim:


imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
Burada constructor için iki değer gönderdik. Eksik verileri ve stratejiyi tanımladık. Daha önceki sklearn versiyonlarında missing_values kısmında 'NaN' yazıyorduk. Yeni versiyonlarda np.nan yazmamız gerekli. Eksik verileri sayısal değerlere uygulayacağız. Sayısal değerleri çekelim:


numeric = df.iloc[:, 1:4].values
print(numeric)
print("****************")

>>

[[130.  30.  10.]
 [125.  36.  11.]
 [135.  34.  10.]
 [133.  30.   9.]
 [129.  38.  12.]
 [180.  90.  30.]
 [190.  80.  25.]
 [175.  90.  35.]
 [177.  60.  22.]
 [185. 105.  33.]
 [165.  55.  27.]
 [155.  50.  44.]
 [160.  58.  nan]
 [162.  59.  41.]
 [167.  62.  55.]
 [174.  70.  47.]
 [193.  90.  nan]
 [187.  80.  27.]
 [183.  88.  28.]
 [159.  40.  29.]
 [164.  66.  32.]
 [166.  56.  42.]]
****************
Şimdi eksik verileri dolduralım:


numeric[:, 1:4] = imputer.fit_transform(numeric[:, 1:4])
print(numeric)
print("****************")

>>

[[130.    30.    10.  ]
 [125.    36.    11.  ]
 [135.    34.    10.  ]
 [133.    30.     9.  ]
 [129.    38.    12.  ]
 [180.    90.    30.  ]
 [190.    80.    25.  ]
 [175.    90.    35.  ]
 [177.    60.    22.  ]
 [185.   105.    33.  ]
 [165.    55.    27.  ]
 [155.    50.    44.  ]
 [160.    58.    28.45]
 [162.    59.    41.  ]
 [167.    62.    55.  ]
 [174.    70.    47.  ]
 [193.    90.    28.45]
 [187.    80.    27.  ]
 [183.    88.    28.  ]
 [159.    40.    29.  ]
 [164.    66.    32.  ]
 [166.    56.    42.  ]]
****************
Gördüğünüz gibi eksik veriler 28.45 değerleri ile dolduruldu. Ortalama almak dışında medyan alabilirdik. En çok tekrar eden verileri bulup eksik verileri o şekilde doldurabilirdik. Eksik verileri el ile doldurabilirdik. Satırı direk silebilirdik. Bunları SimpleImputer ile yapabiliriz. Detaylı incelemek isterseniz:

https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html


Sonraki Yazı: Data, Encoding
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın