| 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 | |