makaleler / Python Programlama / Python Eksik Veriler ve Çözümler

Python Eksik Veriler ve Çözümler

30.07.2018 15:21:45

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; +[url]http://www.grapeshot.co.uk/crawler.php)[/url]"
"","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; +[url]http://www.google.com/bot.html)[/url]"
"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.

yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda