Untitled
unknown
python
6 months ago
2.7 kB
1
Indexable
Never
def valuation(reqArea, area, price): final_area = [] final_price = [] house_list = {} for i in range(len(area)): if area[i] not in house_list: house_list[area[i]] = [price[i]] else: house_list[area[i]].append(price[i]) for i in range(len(area)): price_i = price[i] area_i = area[i] compList = house_list[area_i].copy() compList.remove(price_i) mean_price = statistics.mean(compList) if compList else float('nan') std = statistics.pstdev(compList) if compList else float('nan') diff = abs(price_i - mean_price) if diff > 3 * std: continue final_area.append(area_i) final_price.append(price_i) if not final_area: ans = round(1000 * reqArea) return max(1000, min(ans, 1000000)) if len(final_area) == 1: ans = round(final_price[0]) return max(1000, min(ans, 1000000)) if reqArea in final_area: indices = [i for i, a in enumerate(final_area) if a == reqArea] mean_price = sum([final_price[i] for i in indices]) / len(indices) ans = round(mean_price) return max(1000, min(ans, 1000000)) smaller_area = None larger_area = None for a in final_area: if a < reqArea and (smaller_area is None or a > smaller_area): smaller_area = a if a > reqArea and (larger_area is None or a < larger_area): larger_area = a if smaller_area is not None and larger_area is not None: smaller_indices = [i for i, a in enumerate(final_area) if a == smaller_area] larger_indices = [i for i, a in enumerate(final_area) if a == larger_area] smaller_mean_price = sum([final_price[i] for i in smaller_indices]) / len(smaller_indices) larger_mean_price = sum([final_price[i] for i in larger_indices]) / len(larger_indices) interpolated_price = smaller_mean_price + ((larger_mean_price - smaller_mean_price) / (larger_area - smaller_area)) * (reqArea - smaller_area) ans = round(interpolated_price) return max(1000, min(ans, 1000000)) if smaller_area is not None and larger_area is None: largest_areas = sorted(set(final_area), reverse=True)[:2] mean_prices = [np.mean([p for a, p in zip(final_area, final_price) if a == area_i]) for area_i in largest_areas] extrapolated_price = mean_prices[1] + (reqArea - largest_areas[1]) * (mean_prices[1] - mean_prices[0]) / (largest_areas[1] - largest_areas[0]) ans = round(extrapolated_price) return max(1000, min(ans, 1000000))