|
import numpy as np
|
|
import re
|
|
import json
|
|
import pandas as pd
|
|
|
|
class SingleInstancePreprocessor:
|
|
def __init__(self, location_map_path='location_map.json'):
|
|
self.isitma_mapping = {
|
|
"Doğalgaz": 5,
|
|
"Merkezi Sistem": 6,
|
|
"Elektrikli": 3,
|
|
"Soba": 1,
|
|
"Isıtma Yok": 0,
|
|
"Other": 4,
|
|
"Klimalı": 3,
|
|
"Doğalgaz Sobalı": 4,
|
|
"Merkezi (Pay Ölçer)": 6,
|
|
"Merkezi Doğalgaz": 6,
|
|
"Güneş Enerjisi": 9,
|
|
"Yerden Isıtma": 7,
|
|
"Merkezi Kömür": 8,
|
|
"Şömine": 2,
|
|
"Jeotermal": 10,
|
|
"Kat Kaloriferi": 11,
|
|
"Isı Pompası": 12
|
|
}
|
|
self.esya_mapping = {
|
|
"Eşyalı": 1,
|
|
"Eşyasız": 0,
|
|
"Belirtilmemiş": 2,
|
|
"Boşluk": 2
|
|
}
|
|
self.tipi_mapping = {
|
|
"Daire": 3,
|
|
"Residence": 5,
|
|
"Villa": 8,
|
|
"Müstakil Ev": 6,
|
|
"Yazlık": 4,
|
|
"Bina": 3,
|
|
"Köy Evi": 1,
|
|
"Çiftlik Evi": 2,
|
|
"Devremülk": 5,
|
|
"Yalı Dairesi": 7,
|
|
"Köşk": 9,
|
|
"Prefabrik": 1,
|
|
"Yalı": 12,
|
|
"Dağ Evi": 4,
|
|
"Kooperatif": 3
|
|
}
|
|
self.kullanim_mapping = {
|
|
"Konut": 0,
|
|
"İş Yeri": 1,
|
|
"Diğer": 2,
|
|
"Boş": 3,
|
|
"Boşluk2": 3
|
|
}
|
|
self.yatirim_mapping = {
|
|
'Yatırıma Uygun':'10',
|
|
'Yatırıma Uygun Değil':'0',
|
|
'Bilinmiyor':'1',
|
|
'Belirtilmemiş':'1'
|
|
}
|
|
|
|
self.oturma_mapping = {
|
|
'Kendisi' : 0,
|
|
'Kiracı': 1,
|
|
}
|
|
|
|
try:
|
|
with open(location_map_path, 'r', encoding='utf-8') as f:
|
|
self.location_map = json.load(f)
|
|
except FileNotFoundError:
|
|
print(f"Hata: {location_map_path} dosyası bulunamadı.")
|
|
self.location_map = {}
|
|
|
|
def transform(self, input_data):
|
|
"""
|
|
Tek bir örnek için girdi verilerini dönüştürür.
|
|
"""
|
|
input_series = pd.Series(input_data)
|
|
|
|
oda = input_series.get("Oda Sayısı")
|
|
if isinstance(oda, str):
|
|
oda = oda.strip()
|
|
if "Stüdyo" in oda:
|
|
oda_val = 0.0
|
|
elif "+" in oda:
|
|
try:
|
|
parts = oda.split("+")
|
|
oda_val = float(parts[0]) + float(parts[1])
|
|
except Exception:
|
|
oda_val = float(oda.replace("Oda", "").strip())
|
|
else:
|
|
oda_val = float(oda.replace("Oda", "").strip())
|
|
else:
|
|
oda_val = float(oda)
|
|
|
|
kat = input_series.get("Bulunduğu Kat")
|
|
if isinstance(kat, str):
|
|
kat_val = int(re.sub(r'\D', '', kat))
|
|
else:
|
|
kat_val = int(kat)
|
|
|
|
isitma = input_series.get("Isıtma Tipi")
|
|
isitma_val = self.isitma_mapping.get(isitma, 4)
|
|
|
|
esya = input_series.get("Eşya Durumu")
|
|
esya_val = self.esya_mapping.get(esya, 2)
|
|
|
|
site = input_series.get("Site İçerisinde", "Hayır")
|
|
site_val = 1 if site == "Evet" else 0
|
|
|
|
tipi = input_series.get("Tipi")
|
|
tipi_val = self.tipi_mapping.get(tipi, 3)
|
|
|
|
metrekare = input_series.get("Brüt Metrekare")
|
|
if isinstance(metrekare, str):
|
|
metrekare_val = float(re.sub(r'[^0-9]', '', metrekare))
|
|
else:
|
|
metrekare_val = float(metrekare)
|
|
|
|
yas = input_series.get("Binanın Yaşı")
|
|
if isinstance(yas, str):
|
|
yas_val = int(re.sub(r'\D', '', yas))
|
|
else:
|
|
yas_val = int(yas)
|
|
|
|
bina_kat = input_series.get("Binanın Kat Sayısı")
|
|
bina_kat_val = int(bina_kat)
|
|
|
|
kullanim = input_series.get("Kullanım Durumu")
|
|
kullanim_val = self.kullanim_mapping.get(kullanim, 0)
|
|
|
|
yatirim = input_series.get("Yatırıma Uygunluk")
|
|
yatirim_val = self.yatirim_mapping.get(yatirim, 1)
|
|
|
|
banyo = input_series.get("Banyo Sayısı")
|
|
banyo_val = int(banyo)
|
|
|
|
il = input_series.get("İl")
|
|
ilce = input_series.get("İlçe")
|
|
mahalle = input_series.get("Mahalle")
|
|
|
|
il_val = 0
|
|
ilce_val = 0
|
|
mahalle_val = 0
|
|
|
|
if il in self.location_map:
|
|
il_val = list(self.location_map.keys()).index(il)
|
|
if ilce in self.location_map[il]:
|
|
ilce_val = list(self.location_map[il].keys()).index(ilce)
|
|
if mahalle in self.location_map[il][ilce]:
|
|
mahalle_val = self.location_map[il][ilce].index(mahalle)
|
|
|
|
oturma_durumu = input_series.get('oturma_durumu')
|
|
oturma_val = self.oturma_mapping.get(oturma_durumu,0)
|
|
|
|
|
|
features = [oda_val, kat_val, isitma_val, esya_val, site_val, tipi_val,
|
|
metrekare_val, yas_val, bina_kat_val, kullanim_val, yatirim_val, banyo_val,
|
|
il_val, ilce_val, mahalle_val,oturma_val]
|
|
|
|
X = np.array(features).reshape(1, -1)
|
|
return X
|
|
|