Cemre Acar
Python ile Eksik Veri Analizi

Python ile Eksik Veri Analizi

Geçtiğimiz yazılarda Python ile Aykırı Veri Analizi üzerine bazı çalışmalar yapmış ve aykırı verilerimizi silmeyi ya da yerine değişkenin ortalamasını atamayı sağlamıştık. Python ile Aykırı Gözlem Analizi ve Python ile Aykırı Değerleri Çözüme Kavuşturmak adlı yazılarımı okumadıysanız linklerden ulaşabilirsiniz. 
Bugün de veri setimizdeki eksik olan (NaN,Null,Na) verilerimizi nasıl tespit ederiz, veri setinden nasıl silebiliriz ve var olduğu değişkenin ortalamasını eksik olan gözlem birimine nasıl atayabiliriz sorularına değiniyor olacağız. 

Kütüphanelerin ve Verisetinin Dahil Edilmesi

Veri seti olarak daha önceden hazırlamış olduğum küçük bir .csv dosyası mevcut buradan indirebilirsiniz. Ancak indirmek istemezseniz de NumPy arrayleri kullanarak siz de benzer bir veri seti oluşturup DataFrame haline getirebilirsiniz.
Ben yazının daha da uzamaması adına o işlemleri daha önceden yaptım. ( Önceki yazılarda örnekler ile veri setleri oluşturmuştuk.)

import numpy as np
import pandas as pd

my_dataset = pd.read_csv("/Users/cmracar/Desktop/EksikVeriData.csv")
my_dataset
  Motor Yakıt KM
0 2000 Dizel 233640.0
1 2500 Benzin NaN
2 1300 Benzin 102312.0
3 1600 Dizel 89000.0
4 1600 NaN 23450.0
5 2000 Dizel 45550.0
6 1300 Benzin 223023.0
7 1300 Benzin NaN
8 1300 Dizel 12320.0
9 1500 Dizel NaN
10 1600 Benzin 78000.0
11 1500 NaN 142100.0
12 2000 Dizel 212300.0


Eksik Verileri Tespit Edelim

Eksik olan gözlem birimlerimize .isnull() fonksiyonu ile kolayca ulaşabiliyoruz. Bu fonksiyon bize True ya da False şeklinde yanıtlar basmakta biz değişkenler içerisindeki True ifadelerini .sum() fonksiyonu ile hesaplatabiliriz.

my_dataset.isnull().sum()

Sonucun Çıktısı :
Motor 0
Yakıt 2
KM 3

Sonuç olarak Yakıt ve KM değişkenlerimizde eksik veriler olduğunu gördük. Burada hem sayısal hem de kategorik değişkenler üzerinde neler yapabileceğimizi görmüş olacağız. İlk olarak genel bir silme işlemi olan .dropna() ile başlayalım aslında her zaman kullandığımız çok basit bir fonksiyon.

my_dataset.dropna()

Buradaki işlemin ardından verisetimizi tekrar görüntülediğimizde eksik verilerin kalıcı olarak silinmedğini görüyor olacağız. Bunun için .dropna() fonksiyonunun inplace argümanını True olarak aktif etmemiz gerekmekte.

my_dataset.dropna(inplace=True)

Sayısal Değişkende Eksik Verilerin Ortalama ile Doldurulması

Bu işlemi aykırı gözlem analizi yazımızda da yapmıştık. Bu işlem de oldukça basit bir işlem. İlk olarak bir değişkenin nasıl yakalndığını ve nasıl ortalama aldığımızı hatırlayalım.

my_dataset["KM"].mean()

Şimdi de KM değişkenini yakalayıp .fillna() yani boşlukları doldur fonksiyonu ile değer atamalıyız.

my_dataset["KM"].fillna(my_dataset["KM"].mean())

Yukarıdaki işleme mean() yerine median() ya da mode() gibi ihtiyaca göre farklı fonksiyonlar da uygulanabilir.

Yukarıdaki gibi bir doldurma işlemini tüm değişkenler üzerinde uygulamak istersek .apply() fonksiyonu ile lambda işlemi gerçekleştirmemiz gerekiyor. Bu örneğimizde tek bir sayısal değişkenimizde eksik veri olduğundan uygulamayacağız ancak örnek olarak göstermeyi uygun buldum.

your_dataset.apply(lambda x : x.fillna(x.mean() , axis= 0))


Kategorik Değişkende Eksik Verilerin Doldurulması

İlk olarak belirtmekte yarar var kategorik değişkenlerde NaN değer var ise kategorik değişkenin mode'u alınır (Kaynak: Geleceği Yazanlar Turkcell) ve mode'u NaN değere atanır. Bu durumda ilk olarak Yakıt değişkenimizi yakalayıp mode'unu almalıyız.

my_dataset["Yakıt"].mode()

Ardından da çıkan sonucu Yakıt değişkenindeki eksik gözlemlere doldurmalıyız.

my_dataset["Yakıt"].fillna(my_dataset["Yakıt"].mode()[0])

Burada dikkat ettiyseniz mode() fonksiyonu ardından bir [0] şeklinde index belirttik. Object tipinde bir veri olduğu için index numarası vererek eksik alanlara atamış olduk.

Ek olarak bazen değişkenlerdeki eksik verileri bir önceki ya da bir sonraki satır ile atama işlemlerine ihtiyaç duyulabilir. Bu şekilde bir ihtiyaç olması durumunda fillna() fonksiyonunun method argümanını kullanırız.

Önceki değer ile atama için ;

your_dataset.fillna(method="ffill")

Sonraki değer ile atama için ;

your_dataset.fillna(method="bfill")

Python ile Eksik Veri Analizi adlı yazımı burada sonlandırıyorum. İlerleyen günlerde Makine Öğrenmesine giriş mahiyetinde yazılar ile blog yazmaya devam edeceğim. Ek olarak bu çalışmayı Jupyter Notebook üzerinde hazırladım ve o belgeye de Portfolio kısmından erişebilirsiniz. Sağlıkla Kalın.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.