Kategorik ve Sayısal Veriler ( LabelEncoder ve OneHotEncoder)

Kategorik ve Sayısal Veriler ( LabelEncoder ve OneHotEncoder)

Makine Öğrenmesi serimizin önceki yazısında sizlere verilerin okunması ve eksik verileri karşımıza geldiğinde hangi yöntemleri kullanacağımızı anlattım. Bu yöntemleri nasıl kullanıldığını uygulamalı olarak anlattık. Bu yazımız da ise kategorik verileri ele alacağız. Aslında veri kavramı biraz daha kapsamlı ele alacağız.O halde başlayalım :) 

 

Elimize bir veri geldiğinde önce onu tanımamız lazım. Kategorik verileri bu yazımızda biraz tanıyalım. Bir kişinin erkek veya kadın olması,eğitim düzeyi,doğum tarihi... gibi veriler kategorik veriler sınıfına girmektedir. Kategorik veriler arasında matematik işlemler yapılamaz. Sıralamaya koyulamaz. Erkek> kadın gib bir durum söz konusu olamaz.  

 

Not : Bir verinin sayısal mı kategorik veri olduğunu nasıl anlarız ? Posta kodu veya plaka numarası bir sayısal veri midir ? Bunu anlamanın en güzel yolu, kendinize şu soruyu sorun : " Bu sayıların ortalamasını hesaplayabilir miyim ?"  Eğer bir ortalama hesaplayabilirseniz, veriler "sayısal", eğer yapamazsanız,  kategoriktir. Bu sorunun cevabı: " Kategorik Verilerdir."  Rakamlar olsa bile kategorik veridir.

 

Kategorik Veriler  Nominal ve Ordinal olmak üzere 2 kısma ayrılır.

 

İlgili resim

 

Ordinal Veriler :

Veriler arasında bir sıralama yapabildiğimiz fakat ölçemediğimiz verilerdir. Mesela kapı numaraları,plaka numaraları... bu veriler arasında sıralama yaparız.Ama ölçüm yapamayız.

 

Nominal Veriler :

Sıralama ve Ölçüm yapamadığımız verilerdir. Mesela cinsiyet ( erkek/kız ) , saç rengi , nerede yaşadığı... gibi veriler nominal verilerdir. Bu veriler arasında sıralama yapamıyoruz. Sivas > istanbul gibi bir şey mümkün değil.

 

Sayısal Veriler :

 

Şimdi biraz sayısal verilerden bahsedelim. Bence yukarıdaki notlar ile her şeyi anladığınızı umuyorum. Bu yüzden sayısal veriler hakkında birkaç örnek yeterli olacaktır. Sayısal verilere şunlar örnek olabilir : 

 

  • Aylık kazandığım para miktarı

 

  • Yükseklik

 

  • Okul seyahat süresi 

 

Sayısal veriler Oransal ( Ratio ) ve Aralık ( Interval ) olmak üzere 2 ' ye ayrılır.

 

Oransal Veriler :

 

Oransal veriler birbirleriyle orantı kurabilen, matematiksel işlem yapabildiğimiz verilerdir.Mesela  yıllık kazancınız ne kadar, kaç çocuğunuz var, sağlık alanında ağırlık ölçümü, boy ölçümü, fizik bilimindeki ölçümler ağırlık, alan, hacim gibi, ölen hastalanan yaralanan hakkındaki verilerdir.

 

Aralıklı Veriler :

 

Bu veriler matematiksel işlemleri(toplama,çarpma,bölme...) gibi işlemleri kabul etmezler.Mesela sıcaklık,hava durumu,tansiyon ölçümler...  olan verilerdir.

 

Teorik olarak kafanıza birkaç şey anladıysanız yeter. Şimdi uygulamalı olarak göstermeye başlayalım. Bizim amacımız kategorik verileri bir şekilde sayısal verilere dönüştürmektir.  Şimdi elimdeki yeni verileri sizlere göstermek istiyorum. Özellikle daha az veriyle işlem yapıyorum, fakat normalde yğksek miktar da verilerle oynama yaparız. Bu verileri bizlere sunan vizehizmetleri.org sitesine teşekkkür ediyoruz.

 

ülke,yas,cinsiyet
ispanya,40,kız
ispanya,43,kız
ispanya,50,erkek
almanya,23,erkek
almanya,24,kız
almanya,25,erkek
türkiye,30,kız
türkiye,32,erkek
türkiye,35,erkek

 

 

Şimdi biz ülke verilerini sayısal verilere dönüştürmek istesek, ne yapabilriz ? Mesela 1,2,3 diye adlandırsak olur mu ?  Olmaz çünkü 1,2,3 diye adlandırma yaptığımız da bir sıralamaya girebiliyor. Ama ülkeler arasında bunu yapamıyız. Fakat erkek/kız gibi ikili durumlar da işe yarayabilir. ( Nominal veriler kendi içinde tekli seçim ve çoklu seçim olarak 2 ye ayrılır.)  Ülke sayısı çoklu duruma girdiği için 1,2,3..gibi adlandırma yöntemi riskli bir yöntemdir.

 

Bu yüzden kolon bazlı bir çalişma yapıyoruz. Şu şekilde anlatıyım :

   TR   FR   US

1 0 0
0 1 0
0 0 1

  

 Bu tablo da 1 numara o ülkede olduğunu gösteriyor. 1. Satırda ki kişi Türkiyeli, 2.Satırda ki Fransalı 3. Satırdaki bir : Amerikali biri olarak düşünebiliriz. Bu şekilde yaptığımızda sıralama olmadığı için hiçbir sorun olmuyor. Şimdi bunu kodlarla anlatalım.Önce 0,1,2 şekilde giden yöntemi kodlarla nasıl yazacağınız anlatalım.

 

import pandas as pd
veriler = pd.read_csv("veriler.csv")
ulke = veriler.iloc[:,0:1].values    # ülke verileri ile işlem yapacağımız için ülke kolonu(sütun) almamız lazım.
print(ulke)

from sklearn.preprocessing import LabelEncoder  # 0,1,2,3 şeklinde giden yöntemi kullanalım.
le = LabelEncoder()
ulke[:,0] = le.fit_transform(ulke[:,0])   # lei.fit_transform komutu ise verilerin değerlerini değiştirip uyguluyoruz.
print(ulke)

from sklearn.preprocessing import OneHotEncoder  # 0,1 yöntemini kullanalım.
ohe = OneHotEncoder(categorical_features='all')
ulke=ohe.fit_transform(ulke).toarray()
print(ulke)

 

Çıktılar :

 

ilk önce ülke sütun'u almak istemiştik. 

 

['ispanya']
['ispanya']
['ispanya']
['almanya']
['almanya']
['almanya']
['türkiye']
['türkiye']
['türkiye']

 

LabelEncoder Yönteminin Çıktısı :

 

[1]
[1]
[1]
[0]
[0]
[0]
[2]
[2]
[2]

 

OneHotEncoder Yönteminin Çıktısı :

 

[0. 1. 0.]
[0. 1. 0.]
[0. 1. 0.]
[1. 0. 0.]
[1. 0. 0.]
[1. 0. 0.]
[0. 0. 1.]
[0. 0. 1.]
[0. 0. 1.]

 

 Makine Öğrenmesi serimizin diğer yazısında görüşmek üzere....