| import streamlit as st |
| import pandas as pd |
|
|
| |
| |
| |
|
|
| st.set_page_config( |
| page_title="Housing Price Estimator", |
| page_icon="🏠", |
| layout="centered" |
| ) |
|
|
| |
| |
| |
|
|
| postal_scores = pd.read_csv("idf_postal_codes_neighborhood_scores.csv") |
|
|
| postal_scores["postal_code"] = postal_scores["postal_code"].astype(str) |
|
|
|
|
| |
| |
| |
|
|
| INTERCEPT = -467418.10 |
| COEF_SURFACE = 4932.35 |
| COEF_ROOMS = -29954.53 |
| COEF_NEIGHBORHOOD = 79383.79 |
|
|
|
|
| def predict_price(surface, rooms, neighborhood_score): |
|
|
| price = ( |
| INTERCEPT |
| + COEF_SURFACE * surface |
| + COEF_ROOMS * rooms |
| + COEF_NEIGHBORHOOD * neighborhood_score |
| ) |
|
|
| return price |
|
|
|
|
| |
| |
| |
|
|
| st.title("🏠 Île-de-France Housing Price Estimator 2") |
|
|
| st.write( |
| """ |
| Estimate the price of a property using a **linear regression model** |
| trained on real estate data from Île-de-France. |
| """ |
| ) |
|
|
| |
| |
| |
|
|
| st.sidebar.header("Property Information") |
|
|
| postal_code = st.sidebar.text_input( |
| "Postal code", |
| value="75001" |
| ) |
|
|
| surface = st.sidebar.slider( |
| "Surface (m²)", |
| 20, |
| 300, |
| 70 |
| ) |
|
|
| rooms = st.sidebar.slider( |
| "Number of rooms", |
| 1, |
| 10, |
| 3 |
| ) |
|
|
| |
| |
| |
|
|
| def get_neighborhood_score(postal_code): |
|
|
| result = postal_scores[ |
| postal_scores["postal_code"] == postal_code |
| ] |
|
|
| if len(result) == 0: |
| return None |
|
|
| return result["neighborhood_score"].values[0] |
|
|
|
|
| |
| |
| |
|
|
| if st.sidebar.button("Estimate price"): |
|
|
| score = get_neighborhood_score(postal_code) |
|
|
| if score is None: |
|
|
| st.error("Postal code not found in the dataset.") |
|
|
| else: |
|
|
| price = predict_price(surface, rooms, score) |
|
|
| st.subheader("Estimated Property Price") |
|
|
| st.success(f"{int(price):,} €") |
|
|
| st.write("Neighborhood score:", round(score, 2)) |
|
|
|
|
| |
| |
| |
|
|
| st.write("---") |
|
|
| st.write("### Model Formula") |
|
|
| st.latex( |
| r""" |
| Price = |
| -467418 |
| + 4932 \times Surface |
| - 29954 \times Rooms |
| + 79383 \times NeighborhoodScore |
| """ |
| ) |