Spaces:
Sleeping
Sleeping
File size: 3,940 Bytes
164d1c0 d3b1063 164d1c0 0498f42 164d1c0 d3b1063 731c0dd d3b1063 0498f42 d3b1063 0498f42 d3b1063 b36c6ed 0498f42 b36c6ed 0498f42 42623d3 0498f42 b36c6ed | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 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
|