Spaces:
Sleeping
Sleeping
File size: 6,261 Bytes
799fb70 94b3422 799fb70 0bbb49e 164d1c0 94b3422 164d1c0 b36c6ed 94b3422 164d1c0 94b3422 164d1c0 1189f83 d3b1063 9fa7194 0bbb49e 1189f83 164d1c0 94b3422 164d1c0 d3b1063 1189f83 d3b1063 1189f83 d3b1063 b36c6ed d3b1063 b36c6ed 164d1c0 1189f83 164d1c0 1189f83 164d1c0 b36c6ed 164d1c0 1189f83 b36c6ed 164d1c0 94b3422 164d1c0 d3b1063 731c0dd 1189f83 0498f42 731c0dd 77a04d8 164d1c0 d3b1063 acc69a1 1189f83 164d1c0 94b3422 164d1c0 b36c6ed d3b1063 77a04d8 d6117cb 1189f83 164d1c0 b36c6ed 731c0dd 1189f83 0498f42 731c0dd b36c6ed 0498f42 b36c6ed 1189f83 b36c6ed acc69a1 1189f83 b36c6ed 0bbb49e 1189f83 0bbb49e 1189f83 0bbb49e b36c6ed 94b3422 | 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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | # Example taken from here - https://shinylive.io/py/examples/#map
import os
import io
from shiny import reactive, render, ui, App
from plot_utils import show_one_plot, show_two_plots
from data_utils import prepare_data, process_data_trees_to_temp, process_data_temp_to_trees
import pandas as pd
import geopandas as gpd
import numpy as np
og_file = "cleaned_dataframe.csv"
training_file = "training_dataframe.csv"
original_df, df, X, Y, T = prepare_data(og_file, training_file)
app_ui = ui.page_fluid(
ui.input_radio_buttons("tab_choice", "Seleccionar p谩gina:", ["Efecto de los 谩rboles en la temperatura", "Efecto de la temperatura en los 谩rboles"]),
ui.output_ui("tab_slider"),
ui.tooltip(
ui.input_radio_buttons(
"split_filter",
"驴Aplicar filtro?",
choices=["Sin filtro", "Filtro"],
selected="Sin filtro"
),
"Indica exceso de cobertura: marr贸n = l铆mite por construcci贸n, rojo = m谩s del 100%.",
placement="right"
),
ui.output_ui("page_ui"),
ui.download_button("download_csv", "Descargar simulaci贸n (CSV)")
)
def server(input, output, session):
@output
@render.ui
def tab_slider():
if input.tab_choice() == "Efecto de los 谩rboles en la temperatura":
return ui.input_slider("tree_pct", "Aumento de cobertura arb贸rea (%)", min=0, max=100, value=40, step=5)
else: # "Effect of temperature on trees"
return ui.input_slider("temp_goal", "Disminuci贸n de la temperatura (掳C)", min=0, max=2, value=0.5, step=0.1)
@reactive.Calc
def get_gdf_trees():
value_trees = input.tree_pct()
print(f"value inputed is {value_trees}")
return process_data_trees_to_temp(value_trees, original_df, df, X, Y, T)
@reactive.Calc
def get_gdf_temp():
value_temp = input.temp_goal()
print(f"value inputed is {value_temp}")
return process_data_temp_to_trees(value_temp, original_df, df, X, Y, T)
@output
@render.ui
def page_ui():
if input.tab_choice() == "Efecto de los 谩rboles en la temperatura":
return ui.div(
ui.h2("Visualizador de simulaci贸n: Aumento de la cobertura arb贸rea", class_="text-center"),
ui.div(ui.output_plot("temp_after_treatment"), style="display: flex; justify-content: center;"),
ui.div(ui.output_plot("temp_change"), style="display: flex; justify-content: center;"),
)
else: #Effect of temperature on trees
return ui.div(
ui.h2("Visualizador de simulaci贸n: disminuir la temperatura", class_="text-center"),
ui.div(ui.output_plot("trees_after_decrease"), style="display: flex; justify-content: center;"),
ui.div(ui.output_plot("tree_coverage_change"), style="display: flex; justify-content: center;"),
)
@output
@render.plot()
def temp_after_treatment():
gdf_trees = get_gdf_trees()
value_trees = input.tree_pct()
apply_filter = input.split_filter()
if apply_filter == "Filtro":
split = f'%total_trees_treatment_{value_trees}%'
else:
split = False
min_temp = 15
max_temp = 35
try:
fig = show_two_plots(gdf_trees, f'simulated_temp_{value_trees}%', 'LST',
min_temp, max_temp, 'coolwarm',f"Temperatura estimada despu茅s del aumento de cobertura arb贸rea (+{value_trees}% )",
"Temperatura antes",'Temperatura (掳C)',split=split)
return fig
except Exception as e:
print("Plotting error:", e)
raise e
@output
@render.plot()
def temp_change():
gdf_trees = get_gdf_trees()
value_trees = input.tree_pct()
most_temp_change = -2
no_temp_change = 0
fig = show_one_plot(gdf_trees, f'treatment_effect_{value_trees}%', most_temp_change, no_temp_change,
'PuBu_r', f"Disminuci贸n de la temperatura por el tratamiento (+{value_trees}% cobertura arb贸rea)",
"Cambio de temperatura (掳C)")
return fig
@output
@render.plot()
def trees_after_decrease():
gdf_temp = get_gdf_temp()
value_temp = input.temp_goal()
apply_filter = input.split_filter()
if apply_filter == "Filtro":
split = f'%total_trees_needed_for_{value_temp}C'
else:
split = False
min_cobertura_veg = 5
max_cobertura = 100
try:
fig = show_two_plots(gdf_temp, f'%total_trees_needed_for_{value_temp}C', '%CoberturaVeg',
min_cobertura_veg, max_cobertura, 'YlGn',
f"Estimaci贸n de cobertura arb贸rea necesaria para una disminuci贸n de {value_temp}掳C","Cobertura arb贸rea antes",
"Cobertura arb贸rea (%)", split=split)
return fig
except Exception as e:
print("Plotting error:", e)
raise e
@output
@render.plot()
def tree_coverage_change():
gdf_temp = get_gdf_temp()
value_temp = input.temp_goal()
min_tree_increase = 0
max_tree_increase = 90
fig = show_one_plot(gdf_temp, f'pp_trees_increase_for_{value_temp}C', min_tree_increase,
max_tree_increase, 'Greens',
f"Aumento de cobertura arb贸rea por disminuci贸n de {value_temp}掳C",
"Cambio en cobertura arb贸rea (%pt)")
return fig
@output
@render.download(filename=lambda: (
f"gdf_trees_{input.tree_pct()}pct.csv" if input.tab_choice() == "Efecto de los 谩rboles en la temperatura"
else f"gdf_temp_{input.temp_goal()}C.csv"
))
def download_csv():
if input.tab_choice() == "Efecto de los 谩rboles en la temperatura":
df = get_gdf_trees()
else:
df = get_gdf_temp()
if not hasattr(df, "to_csv"):
raise ValueError("Expected a DataFrame or GeoDataFrame")
df = df.drop(columns="geometry", errors="ignore")
buffer = io.StringIO()
df.to_csv(buffer, index=False)
buffer.seek(0)
return buffer
app = App(app_ui, server)
|