| import pandas as pd |
| from sklearn.model_selection import train_test_split |
| from sklearn.linear_model import LinearRegression |
| import pickle |
| from datasets import load_dataset |
|
|
| |
| dataset = load_dataset("psabino/precios_de_viviendas_madrid", split="train") |
|
|
| |
| df = pd.DataFrame(dataset) |
|
|
| |
| def extraer_tipo(titulo): |
| titulo = titulo.lower() |
| if "chalet" in titulo: |
| return "chalet" |
| elif "ático" in titulo or "atico" in titulo: |
| return "ático" |
| elif "piso" in titulo: |
| return "piso" |
| else: |
| return "otro" |
|
|
| df["tipo_vivienda"] = df["titulo"].apply(extraer_tipo) |
|
|
| |
| df = pd.get_dummies(df, columns=["tipo_vivienda"]) |
|
|
| |
| for col in ["tipo_vivienda_ático", "tipo_vivienda_chalet", "tipo_vivienda_piso"]: |
| if col not in df.columns: |
| df[col] = 0 |
|
|
| |
| columnas_modelo = ["metros_cuadrados", "habitaciones", "baños", |
| "tipo_vivienda_ático", "tipo_vivienda_chalet", "tipo_vivienda_piso"] |
| X = df[columnas_modelo] |
| y = df["precio"] |
|
|
| |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
| model = LinearRegression() |
| model.fit(X_train, y_train) |
|
|
| |
| modelo_datos = { |
| "modelo": model, |
| "columnas": columnas_modelo |
| } |
|
|
| with open("modelo_vivienda_madrid.pkl", "wb") as f: |
| pickle.dump(modelo_datos, f) |
|
|
| print("✅ Modelo entrenado y guardado como 'modelo_vivienda_madrid.pkl'") |
|
|