Değerli okurlar,

Veri içerisindeki kategorik kolonlar (sıralı olmayan) makine öğrenme modellerinde mevcut halleri ile kullanılamaz. Bu verileri kullanabilmek için örneğin şehir kolonunda van yazıyorsa van diye bir kolon açıp kişi vanlı ise 1 değilse 0 yazılabilir. Bu işlem one-to-hot olarak adlandırılmaktadır ve python sklearn kütüphanesinde bunun için metotlar vardır. Problem şudur ki o metotlar kolayca kullanılamaz bazı ön işlemler icap eder (bkz:manueli).

Lazım olduğunda siz de ben de kullanabilelim diye df_one_to_hot_yap şeklinde bir metot yazdım. Bu metoda kategorik kolonlarınızı dizi olarak tanımlarsanız size sonuç olarak aşağıda en sondaki tablo benzeri bir tablo oluşturur.

Daha sonra bu tabloyu makine öğrenme modellerinizde eğitim verisi olarak kullanabilirsiniz.

Beğendiniz mi?

Teşekkürler

df = pd.read_csv("temp.csv")
df
  id sehir tip yas
0 1 van lisans 20
1 2 van lisans 30
2 3 mus yukseklisans 40
3 4 van yukseklisans 50
4 5 mus yukseklisans 19
from sklearn.preprocessing import OneHotEncoder
"""
Verilen df içinde belirtilen kategorik kolonları sayısallaştırır.
"""
def df_one_to_hot_yap(df,kategorik_kolonlar):
    #kategorik_kolonlar = ['sehir','tip']
    aX=df[kategorik_kolonlar].values.tolist()
    enc = OneHotEncoder(handle_unknown = 'ignore')
    enc.fit(aX)
    dfX=enc.transform(aX).toarray()
    ctg = enc.categories_
    flatten = lambda l: [item for sublist in l for item in sublist]
    ktg = flatten(ctg)
    dfY=pd.DataFrame(dfX)
    dfY.columns=ktg
    # normal kolonlari at
    dfN = df.drop(kategorik_kolonlar,axis = 1)
    dfY
    #cbind et
    sonuc = pd.concat([dfN.reset_index(drop=True), dfY], axis=1)
    return(sonuc)
df_sayisal = df_one_to_hot_yap(df,kategorik_kolonlar=['sehir','tip'])
df_sayisal
  id yas mus van lisans yukseklisans
0 1 20 0.0 1.0 1.0 0.0
1 2 30 0.0 1.0 1.0 0.0
2 3 40 1.0 0.0 0.0 1.0
3 4 50 0.0 1.0 0.0 1.0
4 5 19 1.0 0.0 0.0 1.0