Pythontr

husonet | Tarih: 30.07.2018

Python Eksik Veriler ve Çözümler

Python Programlama Dili Makine Öğrenmesi İçin Eksik Verilerin Doldurulması

Eksik veriler genellikle analiz işlemlerinde yorumlanma işlemlerinde en büyük sıkıntıyı oluşturan kısımlardan en önemli konusu diyebiliriz. Bu sebepten dolayı eksik verilerin analizi ve eksik verileri doldurulması için yapabileceğimiz işlemlerden ve yöntemlerden bahsetmeye çalışacağım.


Pandas Kütüphanesi ve Eksik Veriler


Pandas kütüphanesi eksik verilerin tespiti ve doldurulmasıyla ilgili bizim çözümler üretmemize katkı sağlayan en önemli kütühanelerden birtanesidir. Öncelikle eksik veriler konusuna geçmeden önce veri yükleme kısmını okumanızı tavsiye ederim.


Örnek çalışma için yükleme işleminde kullanılacak örnek dosyamız.
"ID","PROTOKOL","REFERER","IP","REQUEST_URL","TARIH","USER_AGENT"
"1","http","direct","37.155.138.123","/makale/python-ile-yazilmis-programlar-456","2018-07-18 23:27:01","Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36 ACHEETAHI/1"
"2","http","direct","195.175.44.123","/makale/debian-qt-kurulumu-3","2018-07-18 23:27:02","Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
"3","https","www.pythontr.com/mcafee-nasil-kapatilir-640","88.230.15.123","/mcafee-nasil-kapatilir-640","2018-07-18 23:27:06","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
"4","https","www.pythontr.com/makale/python-ile-neler-yapilabilir-444","213.74.81.20","/makale/python-ile-neler-yapilabilir-444","2018-07-18 23:27:33","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
"","https","direct","148.64.56.74","/makale/oracle-plsql-foor-dongusu-656","2018-07-18 23:27:52","Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)"
"","https","www.pythontr.com/makale/android-programlama-konum-lokasyon-bulma-388","212.175.91.123","/makale/android-programlama-konum-lokasyon-bulma-388","2018-07-18 23:27:52","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36"
"7","https","www.pythontr.com/makale/opencv-nedir-271","213.74.81.123","/makale/opencv-nedir-271","2018-07-18 23:28:14","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
"8","https","www.pythontr.com/makale/python-sayisal-loto-programi-510","85.103.19.123","/makale/python-sayisal-loto-programi-510","2018-07-18 23:28:30","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 YaBrowser/18.4.1.871 Yowser/2.5 Safari/537.36"
"","https","www.pythontr.com/makale/python-machine-learning-veri-yukleme-655","192.162.242.123","/makale/python-machine-learning-veri-yukleme-655","2018-07-18 23:29:11","Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
"10","https","www.pythontr.com","192.162.242.123","/","2018-07-18 23:29:48","Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
"11","https","www.google.com","31.177.218.123","/makale/arama-ayarlarindaki-tty-modu-nedir-443","2018-07-18 23:30:57","Mozilla/5.0 (Linux; Android 8.0.0; G3221 Build/48.1.A.2.21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Mobile Safari/537.36"
"12","https","www.google.com.tr","94.123.229.123","/makale/sosyal-medya-ne-kadar-guvenli-291","2018-07-18 23:32:43","Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1"
"13","https","www.pythontr.com/mcafee-nasil-kapatilir-640","88.230.15.123","/mcafee-nasil-kapatilir-640","2018-07-18 23:33:13","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
"","http","direct","66.249.75.123","/dolanmis-kablolar-in-sonu-gelebilir-541","2018-07-18 23:33:19","Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
"15","http","direct","195.175.44.123","/makale/debian-qt-kurulumu-3","2018-07-18 23:33:55","Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
"16","https","www.pythontr.com/makale/python-ile-neler-yapilabilir-444","213.74.81.123","/makale/python-ile-neler-yapilabilir-444","2018-07-18 23:34:02","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"

Örnek verilerimizin yüklenmesi
#!/usr/bin/python3                                                              
#-*- coding: utf-8 -*-

import pandas
import numpy
import matplotlib.pyplot
from sklearn.preprocessing import Imputer

ziyaretciler = pandas.read_csv('eksikziyaretciler.csv')

Dosyamızın yüklendiğini kontrol etmek için ziyaretciler.sample(3) methodu ile rastgele üç satır görebiliriz. Pratik bir kullanım sunduğu için ben oldukça sık tercih edebiliyorum.


Eksik Verilerin Analizi


Tüm kolonlarımızdaki "kolon bazında" eksik verilerin toplamlarını aşağıdaki şekilde alabiliriz.


kolon_eksik_deger_toplami = ziyaretciler.isnull().sum()
print(kolon_eksik_deger_toplami)

Bizim sadece ID alanımızda eksikliklerimiz var çıktımız aşağıdaki şekilde olacaktır.


[3 rows x 7 columns]
ID 4
PROTOKOL 0
REFERER 0
IP 0
REQUEST_URL 0
TARIH 0
USER_AGENT 0
dtype: int64

Sadece belirli sutunları eksik verilerini aşağıdaki şekilde alabilirsiniz.


print(kolon_eksik_deger_toplami[1:4])

Bu sutunlarda hiç eksik veri yok!
[3 rows x 7 columns]
PROTOKOL 0
REFERER 0
IP 0
dtype: int64

Toplam kaç adet eksik verimiz var ona bakalım.


toplam_kolon        = numpy.product(ziyaretciler.shape)                         
eksik_veri_toplami = kolon_eksik_deger_toplami.sum()
yuzdesi = (eksik_veri_toplami/toplam_kolon) * 100
print(yuzdesi)

Sonuç 3.571428571428571


Bu eksik veriler mutalaka incelenmeli ve neden olmadığı tespit edilmeli ayrıca mümkünse bu eksik verilerin oluşmaması için önlemler alınmalıdır.


Eksik verilerin çıkartılması


Eksik verileri veri yükleme işlemi yaptıktan sonra NaN olarak gözüktüğünü biliyoruz. Şimdi bu eksik verileri çıkartmak isteyebilirsiniz. Bunun için aşağıdaki kod satırını kullanabilirsiniz.


print(ziyaretciler.dropna())

Satır olarak değilde kolon olarakda bu değerleri silmek isteyebiliriz. Bu kullanımda aşağıdaki şekildedir.


print(ziyaretciler.dropna(axis=1))

Eskik veri barındıran sutunları temizledikten sonra sutun sayılarını orjinal sayılarıyla karşılaştırabiliriz.


eksiklerden_sonra = ziyaretciler.dropna(axis=1)                                 
print(ziyaretciler.shape[1])
print(eksiklerden_sonra.shape[1])

Eksik veriler için default olarak değerler atayarak doldurabiliriz.


print(ziyaretciler.fillna(0))
print(ziyaretciler.fillna('HUSO'))

Çıktı
      ID PROTOKOL                        ...                                        TARIH                                         USER_AGENT
0 1.0 http ... 2018-07-18 23:27:01 Mozilla/5.0 (Linux; Android 7.0; SM-G610F Buil...
1 2.0 http ... 2018-07-18 23:27:02 Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko...
2 3.0 https ... 2018-07-18 23:27:06 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl...
3 4.0 https ... 2018-07-18 23:27:33 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...
4 0.0 https ... 2018-07-18 23:27:52 Mozilla/5.0 (compatible; GrapeshotCrawler/2.0;...
5 0.0 https ... 2018-07-18 23:27:52 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53...
6 7.0 https ... 2018-07-18 23:28:14 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...
7 8.0 https ... 2018-07-18 23:28:30 Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKi...
8 0.0 https ... 2018-07-18 23:29:11 Mozilla/5.0 (Windows NT 6.3; Win64; x64) Apple...
9 10.0 https ... 2018-07-18 23:29:48 Mozilla/5.0 (Windows NT 6.3; Win64; x64) Apple...
10 11.0 https ... 2018-07-18 23:30:57 Mozilla/5.0 (Linux; Android 8.0.0; G3221 Build...
11 12.0 https ... 2018-07-18 23:32:43 Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like...
12 13.0 https ... 2018-07-18 23:33:13 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl...
13 0.0 http ... 2018-07-18 23:33:19 Mozilla/5.0 (compatible; Googlebot/2.1; +http:...
14 15.0 http ... 2018-07-18 23:33:55 Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko...
15 16.0 https ... 2018-07-18 23:34:02 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...

ID PROTOKOL ... TARIH USER_AGENT
0 1 http ... 2018-07-18 23:27:01 Mozilla/5.0 (Linux; Android 7.0; SM-G610F Buil...
1 2 http ... 2018-07-18 23:27:02 Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko...
2 3 https ... 2018-07-18 23:27:06 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl...
3 4 https ... 2018-07-18 23:27:33 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...
4 HUSO https ... 2018-07-18 23:27:52 Mozilla/5.0 (compatible; GrapeshotCrawler/2.0;...
5 HUSO https ... 2018-07-18 23:27:52 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53...
6 7 https ... 2018-07-18 23:28:14 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...
7 8 https ... 2018-07-18 23:28:30 Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKi...
8 HUSO https ... 2018-07-18 23:29:11 Mozilla/5.0 (Windows NT 6.3; Win64; x64) Apple...
9 10 https ... 2018-07-18 23:29:48 Mozilla/5.0 (Windows NT 6.3; Win64; x64) Apple...
10 11 https ... 2018-07-18 23:30:57 Mozilla/5.0 (Linux; Android 8.0.0; G3221 Build...
11 12 https ... 2018-07-18 23:32:43 Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like...
12 13 https ... 2018-07-18 23:33:13 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl...
13 HUSO http ... 2018-07-18 23:33:19 Mozilla/5.0 (compatible; Googlebot/2.1; +http:...
14 15 http ... 2018-07-18 23:33:55 Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko...
15 16 https ... 2018-07-18 23:34:02 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...

Boş olan değerlerin ardından gelen değerlerle doldurmak için aşağıdaki kodları kullanabilirsiniz.


Çıktı
      ID PROTOKOL                        ...                                        TARIH                                         USER_AGENT
0 1.0 http ... 2018-07-18 23:27:01 Mozilla/5.0 (Linux; Android 7.0; SM-G610F Buil...
1 2.0 http ... 2018-07-18 23:27:02 Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko...
2 3.0 https ... 2018-07-18 23:27:06 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl...
3 4.0 https ... 2018-07-18 23:27:33 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...
4 7.0 https ... 2018-07-18 23:27:52 Mozilla/5.0 (compatible; GrapeshotCrawler/2.0;...
5 7.0 https ... 2018-07-18 23:27:52 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53...
6 7.0 https ... 2018-07-18 23:28:14 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...
7 8.0 https ... 2018-07-18 23:28:30 Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKi...
8 10.0 https ... 2018-07-18 23:29:11 Mozilla/5.0 (Windows NT 6.3; Win64; x64) Apple...
9 10.0 https ... 2018-07-18 23:29:48 Mozilla/5.0 (Windows NT 6.3; Win64; x64) Apple...
10 11.0 https ... 2018-07-18 23:30:57 Mozilla/5.0 (Linux; Android 8.0.0; G3221 Build...
11 12.0 https ... 2018-07-18 23:32:43 Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like...
12 13.0 https ... 2018-07-18 23:33:13 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Appl...
13 15.0 http ... 2018-07-18 23:33:19 Mozilla/5.0 (compatible; Googlebot/2.1; +http:...
14 15.0 http ... 2018-07-18 23:33:55 Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko...
15 16.0 https ... 2018-07-18 23:34:02 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2...

Bu konun devamı olarak sklearn kütüphanesinin Imputer konusunu Eksik Veriler 2 olarak işleyeceğimiz konuda görüşmek üzere.