|
12 | 12 | import seaborn as sns |
13 | 13 |
|
14 | 14 | import simdec as sd |
| 15 | +from simdec.sensitivity_indices import SensitivityAnalysisResult |
15 | 16 | from simdec.visualization import sequential_cmaps, single_color_to_colormap |
16 | 17 |
|
17 | 18 |
|
@@ -74,12 +75,17 @@ def filtered_data(data, output_name): |
74 | 75 |
|
75 | 76 |
|
76 | 77 | @pn.cache |
77 | | -def sensitivity_indices(inputs, output): |
78 | | - sensitivity_indices = sd.sensitivity_indices(inputs=inputs, output=output) |
79 | | - if 0.01 < sum(sensitivity_indices.si) < 2.0: |
80 | | - indices = sensitivity_indices.si |
| 78 | +def sensitivity_indices_full(inputs, output): |
| 79 | + sensitivity_indices_ = sd.sensitivity_indices(inputs=inputs, output=output) |
| 80 | + return sensitivity_indices_ |
| 81 | + |
| 82 | + |
| 83 | +@pn.cache |
| 84 | +def sensitivity_indices(sensitivity_indices_): |
| 85 | + if 0.01 < sum(sensitivity_indices_.si) < 2.0: |
| 86 | + indices = sensitivity_indices_.si |
81 | 87 | else: |
82 | | - indices = sensitivity_indices.first_order |
| 88 | + indices = sensitivity_indices_.first_order |
83 | 89 | return indices |
84 | 90 |
|
85 | 91 |
|
@@ -311,13 +317,25 @@ def tableau_states(res, states): |
311 | 317 |
|
312 | 318 |
|
313 | 319 | def csv_data( |
314 | | - sensitivity_indices: pn.widgets.Tabulator, scenario: Styler, states: Styler |
| 320 | + sensitivity_indices: SensitivityAnalysisResult, |
| 321 | + inputs: pd.DataFrame, |
| 322 | + scenario: Styler, |
| 323 | + states: Styler, |
315 | 324 | ) -> io.StringIO: |
316 | 325 | sio = io.StringIO() |
317 | 326 |
|
318 | | - si_table = sensitivity_indices.value[["Inputs", ""]] |
319 | | - si_table.rename(columns={"": "Indices"}, inplace=True) |
320 | | - si_table.to_csv(sio, index=False) |
| 327 | + si = pd.DataFrame(sensitivity_indices.si.reshape(1, -1), columns=inputs.columns) |
| 328 | + first_order = pd.DataFrame( |
| 329 | + sensitivity_indices.first_order.reshape(1, -1), columns=inputs.columns |
| 330 | + ) |
| 331 | + second_order = pd.DataFrame( |
| 332 | + sensitivity_indices.second_order, columns=inputs.columns |
| 333 | + ) |
| 334 | + |
| 335 | + si.to_csv(sio, index=False) |
| 336 | + first_order.to_csv(sio, index=False) |
| 337 | + second_order.to_csv(sio, index=False) |
| 338 | + |
321 | 339 | scenario.data.to_csv(sio) |
322 | 340 | states.data.to_csv(sio) |
323 | 341 |
|
@@ -346,8 +364,11 @@ def csv_data( |
346 | 364 | filtered_data, interactive_file, selector_inputs_sensitivity |
347 | 365 | ) |
348 | 366 |
|
| 367 | +interactive_sensitivity_indices_full = pn.bind( |
| 368 | + sensitivity_indices_full, interactive_inputs, interactive_output |
| 369 | +) |
349 | 370 | interactive_sensitivity_indices = pn.bind( |
350 | | - sensitivity_indices, interactive_inputs, interactive_output |
| 371 | + sensitivity_indices, interactive_sensitivity_indices_full |
351 | 372 | ) |
352 | 373 | interactive_explained_variance = pn.bind( |
353 | 374 | explained_variance, interactive_sensitivity_indices |
@@ -408,8 +429,11 @@ def csv_data( |
408 | 429 | ) |
409 | 430 | interactive_2_output = pn.bind(filtered_data, interactive_file, selector_2_output) |
410 | 431 |
|
| 432 | +interactive_sensitivity_indices_full_2 = pn.bind( |
| 433 | + sensitivity_indices_full, interactive_inputs, interactive_2_output |
| 434 | +) |
411 | 435 | interactive_sensitivity_indices_2 = pn.bind( |
412 | | - sensitivity_indices, interactive_inputs, interactive_2_output |
| 436 | + sensitivity_indices, interactive_sensitivity_indices_full_2 |
413 | 437 | ) |
414 | 438 | interactive_explained_variance_2 = pn.bind( |
415 | 439 | explained_variance, interactive_sensitivity_indices_2 |
@@ -585,7 +609,8 @@ def callback_ylim(start, end): |
585 | 609 | download_file_button = pn.widgets.FileDownload( |
586 | 610 | callback=pn.bind( |
587 | 611 | csv_data, |
588 | | - interactive_sensitivity_indices_table, |
| 612 | + interactive_sensitivity_indices_full, |
| 613 | + interactive_inputs, |
589 | 614 | interactive_tableau, |
590 | 615 | interactive_tableau_states, |
591 | 616 | ), |
|
0 commit comments