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