Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import joblib | |
| import numpy as np | |
| import os | |
| import matplotlib.pyplot as plt | |
| from sklearn.metrics import mean_absolute_error, mean_squared_error | |
| df = pd.read_csv('weather.csv') | |
| df['datetime'] = pd.to_datetime(df['datetime']) | |
| df = df.sort_values('datetime').reset_index(drop=True) | |
| # Recreate lag features exactly as train_model.py does | |
| for lag in range(1, 8): | |
| df[f'temp_lag{lag}'] = df['temp'].shift(lag) | |
| df = df.dropna().reset_index(drop=True) | |
| # Use the exact same feature set as training | |
| FEATURES = ["humidity", "windspeed", "cloudcover"] + [f"temp_lag{i}" for i in range(1, 8)] | |
| X = df[FEATURES] | |
| y = df['temp'] | |
| scaler = joblib.load('models/scaler.pkl') | |
| model = joblib.load('models/xgb_model.pkl') | |
| X_scaled = scaler.transform(X) | |
| pred = model.predict(X_scaled) | |
| mae = mean_absolute_error(y, pred) | |
| rmse = np.sqrt(mean_squared_error(y, pred)) | |
| print(f"MAE: {mae:.4f}, RMSE: {rmse:.4f}") | |
| os.makedirs("results", exist_ok=True) | |
| # Save actual vs predicted CSV for generate_graphs.py | |
| out_df = df[['datetime', 'temp']].copy() | |
| out_df['pred'] = pred | |
| out_df.to_csv("results/actual_vs_pred.csv", index=False) | |
| with open("results/metrics.txt", "w") as f: | |
| f.write(f"MAE: {mae:.4f}\nRMSE: {rmse:.4f}\n") | |
| plt.figure(figsize=(10, 5)) | |
| plt.plot(df['datetime'], y, label='Actual Temperature', linewidth=2) | |
| plt.plot(df['datetime'], pred, label='Predicted Temperature', linewidth=2, linestyle='--') | |
| plt.legend() | |
| plt.title("Actual vs Predicted Temperature") | |
| plt.xlabel("Date") | |
| plt.ylabel("Temperature (°C)") | |
| plt.tight_layout() | |
| plt.savefig("results/performance_plot.png") | |
| print("Saved plot to results/performance_plot.png") | |