CodeBlanks Logo Icon CodeBlanks

ColumnTransformer

ColumnTransformer, farklı sütunlara farklı dönüşümler uygular.

ColumnTransformer

Gerçek tablolarda sütunlar farklı işlem ister: sayılar ölçeklenir, kategoriler one-hot kodlanır. ColumnTransformer her sütun grubuna ayrı dönüştürücü uygular ve sonuçları yan yana birleştirir:

from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([
    ("sayi", StandardScaler(), ["yas", "gelir"]),
    ("kat", OneHotEncoder(handle_unknown="ignore"), ["sehir"]),
])
Z = ct.fit_transform(df)   # 2 ölçekli + şehir sayısı kadar 0/1 sütun

Sütunlar pandas adlarıyla ya da tam sayı konumlarıyla verilebilir.

Tam ön işleme hattı

Her sütun grubu kendi alt pipeline'ına sahip olabilir; tüm yapı modelle birlikte tek bir pipeline'da toplanır:

sayisal = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
kategorik = make_pipeline(SimpleImputer(strategy="most_frequent"),
                          OneHotEncoder(handle_unknown="ignore"))
ct = ColumnTransformer([("sayi", sayisal, sayi_sutunlar),
                        ("kat", kategorik, kat_sutunlar)])
model = make_pipeline(ct, LogisticRegression())

get_feature_names_out(), dönüşümden sonra hangi sütunun neyi temsil ettiğini gösterir.

Uygulama Karışık tabloyu dönüştür

yas ve gelir sütunlarını StandardScaler, sehir sütununu OneHotEncoder ile işleyen bir ColumnTransformer kur. fit_transform sonucunun şeklini, ardından get_feature_names_out() listesini yazdır.

Başlangıç kodu

model.py
import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder

df = pd.DataFrame({
    "yas": [25, 32, 47, 51],
    "gelir": [3000, 4500, 8000, 6000],
    "sehir": ["Ankara", "İzmir", "Ankara", "Bursa"],
})

# buraya yaz

Örnek çözüm

model.py
import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder

df = pd.DataFrame({
    "yas": [25, 32, 47, 51],
    "gelir": [3000, 4500, 8000, 6000],
    "sehir": ["Ankara", "İzmir", "Ankara", "Bursa"],
})

ct = ColumnTransformer([("sayi", StandardScaler(), ["yas", "gelir"]), ("kat", OneHotEncoder(), ["sehir"])])
Z = ct.fit_transform(df)
print(Z.shape)
print(list(ct.get_feature_names_out()))

Beklenen çıktı

(4, 5)
['sayi__yas', 'sayi__gelir', 'kat__sehir_Ankara', 'kat__sehir_Bursa', 'kat__sehir_İzmir']

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Listede adı geçmeyen sütunlara ColumnTransformer varsayılan olarak ne yapar?

  • Ölçekler
  • Hata verir
  • Atar (remainder="drop") Doğru cevap
  • Olduğu gibi geçirir

Açıklama: remainder="passthrough" ile korunabilirler.

2 Adı geçmeyen sütunları koru.

Soru
ct = ColumnTransformer([...], remainder=____)
Cevap
ct = ColumnTransformer([...], remainder="passthrough")

Açıklama: Varsayılan "drop"tur; "passthrough" sütunları değiştirmeden ekler.

3 Parçaları eşleştir.

Kavram Anlamı
("sayi", StandardScaler(), [...]) Sayısal dönüşüm
("kat", OneHotEncoder(), [...]) Kategorik dönüşüm
remainder Kalan sütunlar
get_feature_names_out Yeni sütun adları

Orta seviye bölümündeki tüm dersler