House_Price_Predict_and_Suggestion / preprocess_pipeline.py
yusufenes's picture
Upload 8 files
ea59388 verified
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