import pandas as pd import numpy as np import geopandas as gpd import requests url = "https://Projects-by-IF-model-temp-api.hf.space/model-effect" headers = {"Content-Type": "application/json"} cell_area = 100*100 #in square meters def make_XYT(df, treatment_col = '%CoberturaVeg', target_col = 'LST'): Y = df[target_col].values T = df[treatment_col].values X = df.drop(columns=[treatment_col, target_col]).values return X, Y, T def prepare_data(og_file, training_file): original_df = pd.read_csv(og_file, index_col=0) df = pd.read_csv(training_file, index_col=0) original_df = original_df.round(2) df = df.drop(columns=['row','column','x','y']) df = df.astype(np.float32) X, Y, T = make_XYT(df) return original_df, df, X, Y, T def prepare_treatment_df(original_df, df): treatment_df = original_df[['x','y','%CoberturaVeg']].copy() treatment_df.loc[:, '%Construccion'] = original_df['%Construccion'].values treatment_df.loc[:, 'LST'] = df['LST'].values treatment_df = treatment_df.reset_index() return treatment_df def run_treatment_increase(X, T, original_df, df, value, name): treatment_df = prepare_treatment_df(original_df, df) T_sim = T.copy() value_num = 1+ (value/100) T_sim = T_sim*value_num data = {"X": X.tolist(), "T0":T.tolist(), "T1":(T_sim).tolist()} response = requests.post(url, headers=headers, json=data) if response.ok: result = response.json() # print("Model response:", result["effect"]) else: print("Request failed:", response.status_code, response.text) treatment_df[name] = result["effect"] treatment_df[f'%total_trees_treatment_{value}%'] = T_sim treatment_df[f'pp_trees_increase_treatment_{value}%'] = treatment_df[f'%total_trees_treatment_{value}%'] - treatment_df['%CoberturaVeg'] return treatment_df def process_data_trees_to_temp(value, original_df, df, X, Y, T): name = f'treatment_effect_{value}%' treatment_df = run_treatment_increase(X, T, original_df, df, value, name) treatment_df[f'simulated_temp_{value}%'] = treatment_df['LST'] + treatment_df[name] #add columns translated to square meters treatment_df[f'sqm_total_trees_treatment_{value}%'] = (treatment_df[f'%total_trees_treatment_{value}%']/100)*cell_area treatment_df[f'sqm_trees_increase_treatment_{value}%'] = (treatment_df[f'pp_trees_increase_treatment_{value}%']/100)*cell_area gdf = gpd.GeoDataFrame(treatment_df, geometry=gpd.points_from_xy(treatment_df.x, treatment_df.y)) return gdf def run_temp_decrease(X, original_df, df, goal, name): treatment_df = prepare_treatment_df(original_df, df) data = {"X": X.tolist()} response = requests.post(url, headers=headers, json=data) if response.ok: result = response.json() # print("Model response:", result["effect"]) else: print("Request failed:", response.status_code, response.text) treatment_effects = np.array(result["effect"]) trees_needed = -goal / treatment_effects treatment_df[name] = trees_needed treatment_df['goal_temp'] = treatment_df['LST'] - goal return treatment_df def process_data_temp_to_trees(goal, original_df, df, X, Y, T): name = f'pp_trees_increase_for_{goal}C' treatment_df = run_temp_decrease(X,original_df, df, goal, name) treatment_df[f'%total_trees_needed_for_{goal}C'] = treatment_df['%CoberturaVeg'] + treatment_df[name] #add columns translated to square meters treatment_df[f'sqm_total_trees_needed_for_{goal}C'] = (treatment_df[f'%total_trees_needed_for_{goal}C']/100)*cell_area treatment_df[f'sqm_trees_increase_for_{goal}C'] = (treatment_df[f'pp_trees_increase_for_{goal}C']/100)*cell_area gdf = gpd.GeoDataFrame(treatment_df, geometry=gpd.points_from_xy(treatment_df.x, treatment_df.y)) return gdf