Spaces:
Sleeping
Sleeping
File size: 8,961 Bytes
799fb70 94b3422 799fb70 0bbb49e 164d1c0 94b3422 164d1c0 b36c6ed 94b3422 164d1c0 e301a24 94b3422 164d1c0 e301a24 af925e5 e301a24 9fa7194 e301a24 164d1c0 e301a24 94b3422 164d1c0 d3b1063 1189f83 d3b1063 1189f83 d3b1063 e301a24 d3b1063 e301a24 b36c6ed e301a24 b36c6ed e301a24 b36c6ed e301a24 164d1c0 1189f83 164d1c0 1189f83 164d1c0 b36c6ed 164d1c0 1189f83 b36c6ed 164d1c0 94b3422 164d1c0 d3b1063 731c0dd 1189f83 aa615b0 731c0dd 77a04d8 e301a24 164d1c0 e301a24 1189f83 164d1c0 94b3422 164d1c0 b36c6ed d3b1063 77a04d8 e301a24 77a04d8 e301a24 1189f83 164d1c0 b36c6ed 731c0dd 1189f83 aa615b0 731c0dd b36c6ed e301a24 b36c6ed aa615b0 b36c6ed e301a24 1189f83 b36c6ed e301a24 b36c6ed e301a24 1189f83 b36c6ed e301a24 0bbb49e e301a24 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 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | # 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 = "example.csv"
# original_df, df, X, Y, T = prepare_data(og_file)
app_ui = ui.page_fluid(
ui.row(
ui.column(8,
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.column(4,
ui.input_file("csv_upload", "Subir archivo CSV", accept=[".csv"]),
ui.input_radio_buttons(
"simulation_mode", "Modo de simulaci贸n:",
choices=["Usar control deslizante", "Usar simulaci贸n personalizada del CSV"],
selected="Usar control deslizante"
),
ui.download_button("download_csv", "Descargar simulaci贸n (CSV)")
)
),
ui.row(ui.column(12,
ui.output_ui("page_ui")))
)
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 user_data():
file_info = input.csv_upload()
if file_info is None:
return prepare_data(og_file)
else:
with open(file_info[0]["datapath"], "r", encoding="utf-8") as f:
return prepare_data(f)
@reactive.Calc
def uploaded_filename():
file_info = input.csv_upload()
if file_info is None:
return "example_provided.csv"
return file_info[0]["name"]
@reactive.Calc
def get_gdf_trees():
value_trees = input.tree_pct()
simulation_mode = input.simulation_mode()
print(f"value inputed is {value_trees}")
original_df, df, X, Y, T = user_data()
return process_data_trees_to_temp(value_trees, simulation_mode, original_df, df, X, Y, T)
@reactive.Calc
def get_gdf_temp():
value_temp = input.temp_goal()
simulation_mode = input.simulation_mode()
print(f"value inputed is {value_temp}")
original_df, df, X, Y, T = user_data()
return process_data_temp_to_trees(value_temp, simulation_mode, 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 = 'pct_total_trees'
else:
split = False
min_temp = 15
max_temp = 35
simulation_mode = input.simulation_mode()
title = "Temperatura estimada despu茅s del aumento de cobertura arb贸rea\n(simulaci贸n personalizada del CSV)"
if simulation_mode == "Usar control deslizante":
title = f"Temperatura estimada despu茅s del aumento de cobertura arb贸rea (+{value_trees}%)"
try:
fig = show_two_plots(gdf_trees, 'new_temp', 'LST',
min_temp, max_temp, 'coolwarm',title,
"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
simulation_mode = input.simulation_mode()
title = "Disminuci贸n de la temperatura despu茅s del aumento de cobertura arb贸rea\n(simulaci贸n personalizada del CSV)"
if simulation_mode == "Usar control deslizante":
title = f"Disminuci贸n de la temperatura despu茅s del aumento de cobertura arb贸rea (+{value_trees}%) "
fig = show_one_plot(gdf_trees, 'temp_decrease', most_temp_change, no_temp_change,
'PuBu_r', title,
"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 = 'pct_total_trees'
else:
split = False
min_cobertura_veg = 5
max_cobertura = 100
simulation_mode = input.simulation_mode()
title = "Estimaci贸n de cobertura arb贸rea necesaria para la disminuci贸n de temperatura\n(simulaci贸n personalizada del CSV)"
if simulation_mode == "Usar control deslizante":
title = f"Estimaci贸n de cobertura arb贸rea necesaria para una disminuci贸n de {value_temp}掳C"
try:
fig = show_two_plots(gdf_temp, 'pct_total_trees', 'Pct_CoberturaVeg',
min_cobertura_veg, max_cobertura, 'YlGn',
title,"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
simulation_mode = input.simulation_mode()
title = "Aumento de cobertura arb贸rea necesario para la disminuci贸n de temperatura\n(simulaci贸n personalizada del CSV)"
if simulation_mode == "Usar control deslizante":
title = f"Aumento de cobertura arb贸rea necesario para disminuci贸n de {value_temp}掳C"
fig = show_one_plot(gdf_temp, 'pp_trees_increase', min_tree_increase,
max_tree_increase, 'Greens',
title,
"Cambio en cobertura arb贸rea (%pt)")
return fig
def get_filename():
simulation_mode = input.simulation_mode()
uploaded_name = uploaded_filename()
print(uploaded_name)
if simulation_mode == "Usar control deslizante":
if input.tab_choice() == "Efecto de los 谩rboles en la temperatura":
filename = f"simulacion_arboles_{input.tree_pct()}pct.csv"
else:
filename = f"simulacion_temp_{input.temp_goal()}C.csv"
else:
if input.tab_choice() == "Efecto de los 谩rboles en la temperatura":
filename = f"simulacion_arboles_desde_{uploaded_name}"
else:
filename = f"simulacion_temp_desde_{uploaded_name}"
return filename
@output
@render.download(filename=lambda: get_filename())
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)
|