Makine Öğrenmesi - Genel Konular

Kategorik Değerleri Dönüştürme Yöntemi (get_dummies)

Yayın tarihi :13-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

Kategorik değerleri dönüştürme yöntemi (get_dummies), "Pandas" kütüphanesi kullanılarak kategorik verileri kukla veya gösterge değişkenlerine dönüştüren yapılardır.

Sayısal değerler birbirleri ile karşılaştırılabilir(büyük, küçük, eşit vb.) ama kategorik değişkenlerin birbirlerine üstünlükleri konusunda böyle bir karşılaştırma yapılamamaktadır. Örneğin; bir arabanın fiyatı başka bir araba fiyatı ile karşılaştırılabilirken, arabanın markasını diğer arabanın markası ile karşılaştırma durumunda belirli bir üstünlük olmayacaktır. X markası mı daha iyi Y markası mı daha iyi? Bunu makinenin anlayacağı duruma getirmek için "get_dummies" yapısı gibi yapılar kullanılmalıdır.

Kullanımı: get_dummies, karşılaştırma yapmak için; her farklı kategorik değişken için yeni bir sütun oluşturacak ve ilgili satırda hangi değişkenin adı geçiyorsa onun altında 1 değeri olacak ve diğer sütun değerleri 0 değerini alacaktır. 

Söz dizimi: get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

  • data, veri setini temsil etmektedir.
  • drop_first, uygulanan sütunların ilk seviyedeki değerlerini kaldırır. İlk seviyedeki değerler de eğer 1 varsa diğer sütun değerleri 0 olacağından ilk seviyenin 1 olduğunu modelimiz anlayacaktır, yok eğer 0 varsa zaten diğer sütunların birinde 1 değeri olacağından bu sefer de bu sütunun değerinin 0 olduğunu anlayacaktır.

Örnek-1:  Araba fiyatlarını gösteren "cars.xls" veri setinin kategorik sütunlarına get_dummies işlemi uygulayalım.

#İlgili kütüphaneler içe aktarılır.
import pandas as pd
#cars veri seti okuma
df=pd.read_excel("cars.xls")
df.head()

Çıktı:

Veri seti içersinde bulunan kategorik değerli değişkenleri veri setinden ayırarak bir değişkene atama işlemi uygulayalım.

#Kategorik değişkenler listesi
df_Obj=df.select_dtypes("object")
df_Obj.sample(5)

Çıktı:

Yapılacak olan işlemleri daha iyi anlayabilmek için atama yapılan değişken üzerinden de tek bir sütun seçelim. Bu sütun "Make" sütunu olsun.

df_Make=df_Obj[["Make"]]
df_Make.sample(5)

Çıktı:

#Benzersiz olan değerler listesi
df_Make["Make"].unique()

Çıktı:

array(['Buick', 'Cadillac', 'Chevrolet', 'Pontiac', 'SAAB', 'Saturn'],
      dtype=object)

Veri setinin "Make" sütununda 6 farklı kategorik değer ('Buick', 'Cadillac', 'Chevrolet', 'Pontiac', 'SAAB', 'Saturn') bulunmaktadır. Bu sütununa get_dummies işlemi uygulayarak son durumu değerlendirelim.

df_Make_get_dummies=pd.get_dummies(df_Make)
df_Make_get_dummies.sample(5)

Çıktı:

Yukarıda çıkan tablo incelendiğinde;

  • Sütun içersinde benzersiz olarak 6 değer bulunduğundan Make sütunu 6 tane yeni sütuna dönüştü ve her sütunun ismi benzersiz değerlerin isimleri oldu.
  • 278. satırın değeri Chevrolet olduğundan Make_Chevrolet sütununun değeri 1 diğer sütun değerleri 0 oldu.
  • 64. satırın değeri Buick olduğundan Make_Buick sütununun değeri 1 diğer sütun değerleri 0 oldu.
  • Diğer tüm satırlarda da değerlerine göre 0 ve 1 değerleri listelenmiş oldu.
#df_Make'e get_dummies işlemi uygularken "drop_first=True" yapısı da eklenirse
df_Make_get_dummies=pd.get_dummies(df_Make,drop_first=True)
df_Make_get_dummies.sample(5)

Çıktı:

Yukarıda çıkan tablo incelendiğinde;

  • Bir önceki çıktıda 6 tane benzersiz değer olduğu için 6 sütunluk değer olmasına rağmen "drop_first=True" komutu sonrası sütun sayısı 5'e düşmüş oldu.
  • Sütun sayısının 5 olması ile 6 olması arasında son durumda bir fark meydana gelmemiştir. Eğer kaldırılan sütun değeri 1 ise diğerleri 0 değerini almaya devam edecek, veya kaldırlan sütun değeri 0 ise diğer sütunların birinde 1 değerini almaya devam edecektir.
  • 58. satıra dikkat edilirse tüm değerler 0'dır. Çünkü kaldırılan sütun değerinde 1 sayısı vardı.
  • "drop_first=True" kullanılmasının amacı get_dummies işlemi sonrasında artan sütun sayısını azaltarak, daha az sütun ile çalışmayı sağlayacaktır. Küçük veri setlerinde pek önemli değilmiş gibi görünse de büyük veri setlerinde hız konusunda fark edecektir.

Veri setinin sadece "Make" sütununa get_dummies işlemi uygulandı ama get_dummies işleminin tüm veri setinde uygulanması gerekmektedir. 

Tüm veri setine get_dummies uygulamadan önce mevcut veri setinin boyutu incelenirse;

df.shape

Çıktı:

(804, 12)
#Tüm df veri setinde bulunan kategorik değerlere get_dummies işlemi uygulanırsa
df_get_dummies=pd.get_dummies(df,drop_first=True)
df_get_dummies.sample(5)

Çıktı:

#son durumda veri seti boyutu
df_get_dummies.shape

Çıktı:

(804, 94)

Sonuç olarak;

  • get_dummies işlemi sonrasında sadece kategorik değişkenler işleme alındı ve sayısal değişkenlerde bir değişiklik meydana gelmedi.
  • get_dummies işlemi öncesinde 12 sütunluk bir veri seti varken son durumda 94 sütunluk veri setine dönüşmüş oldu.
  • get_dummies işlemi sonrasında artık kategorik değişkenler arasında da karşılaştırma işlemi yapılabilecektir.
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.