MattStammers
commited on
Commit
•
f7eb114
1
Parent(s):
5a9df93
working base model
Browse files- requirements.txt +151 -0
- streamlit_app_asdm.py +57 -0
requirements.txt
ADDED
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
altair==5.0.1 ; python_version >= '3.7'
|
2 |
+
anyio==3.7.1 ; python_version >= '3.7'
|
3 |
+
argon2-cffi==21.3.0 ; python_version >= '3.6'
|
4 |
+
argon2-cffi-bindings==21.2.0 ; python_version >= '3.6'
|
5 |
+
arrow==1.2.3 ; python_version >= '3.6'
|
6 |
+
arviz==0.12.1 ; python_version >= '3.7'
|
7 |
+
asdm==0.0.3
|
8 |
+
asttokens==2.2.1
|
9 |
+
async-lru==2.0.3 ; python_version >= '3.8'
|
10 |
+
attrs==23.1.0 ; python_version >= '3.7'
|
11 |
+
babel==2.12.1 ; python_version >= '3.7'
|
12 |
+
backcall==0.2.0
|
13 |
+
beautifulsoup4==4.12.2 ; python_full_version >= '3.6.0'
|
14 |
+
bleach==6.0.0 ; python_version >= '3.7'
|
15 |
+
blinker==1.6.2 ; python_version >= '3.7'
|
16 |
+
cachetools==5.3.1 ; python_version >= '3.7'
|
17 |
+
certifi==2023.5.7 ; python_version >= '3.6'
|
18 |
+
cffi==1.15.1
|
19 |
+
cftime==1.6.2 ; python_version >= '3.7'
|
20 |
+
charset-normalizer==3.2.0 ; python_full_version >= '3.7.0'
|
21 |
+
click==8.1.5 ; python_version >= '3.7'
|
22 |
+
colorama==0.4.6 ; platform_system == 'Windows'
|
23 |
+
comm==0.1.3 ; python_version >= '3.6'
|
24 |
+
contourpy==1.1.0 ; python_version >= '3.8'
|
25 |
+
cycler==0.11.0 ; python_version >= '3.6'
|
26 |
+
debugpy==1.6.7 ; python_version >= '3.7'
|
27 |
+
decorator==5.1.1 ; python_version >= '3.5'
|
28 |
+
defusedxml==0.7.1 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
29 |
+
deprecat==2.1.1 ; python_version >= '3.6'
|
30 |
+
dill==0.3.6 ; python_version >= '3.7'
|
31 |
+
et-xmlfile==1.1.0 ; python_version >= '3.6'
|
32 |
+
exceptiongroup==1.1.2 ; python_version < '3.11'
|
33 |
+
executing==1.2.0
|
34 |
+
fastjsonschema==2.17.1
|
35 |
+
fastprogress==1.0.3 ; python_version >= '3.6'
|
36 |
+
filelock==3.12.2 ; python_version >= '3.7'
|
37 |
+
fonttools==4.41.0 ; python_version >= '3.8'
|
38 |
+
fqdn==1.5.1
|
39 |
+
gitdb==4.0.10 ; python_version >= '3.7'
|
40 |
+
gitpython==3.1.32 ; python_version >= '3.7'
|
41 |
+
idna==3.4 ; python_version >= '3.5'
|
42 |
+
importlib-metadata==6.8.0 ; python_version >= '3.8'
|
43 |
+
ipykernel==6.24.0
|
44 |
+
ipython==8.14.0 ; python_version >= '3.9'
|
45 |
+
ipywidgets==8.0.7 ; python_version >= '3.7'
|
46 |
+
isoduration==20.11.0
|
47 |
+
jedi==0.18.2 ; python_version >= '3.6'
|
48 |
+
jinja2==3.1.2 ; python_version >= '3.7'
|
49 |
+
json5==0.9.14
|
50 |
+
jsonpointer==2.4
|
51 |
+
jsonschema==4.18.3 ; python_version >= '3.8'
|
52 |
+
jsonschema-specifications==2023.6.1 ; python_version >= '3.8'
|
53 |
+
jupyter-client==8.3.0 ; python_version >= '3.8'
|
54 |
+
jupyter-core==5.3.1 ; python_version >= '3.8'
|
55 |
+
jupyter-events==0.6.3 ; python_version >= '3.7'
|
56 |
+
jupyter-lsp==2.2.0 ; python_version >= '3.8'
|
57 |
+
jupyter-server==2.7.0 ; python_version >= '3.8'
|
58 |
+
jupyter-server-terminals==0.4.4 ; python_version >= '3.8'
|
59 |
+
jupyterlab==4.0.3
|
60 |
+
jupyterlab-pygments==0.2.2 ; python_version >= '3.7'
|
61 |
+
jupyterlab-server==2.23.0 ; python_version >= '3.7'
|
62 |
+
jupyterlab-widgets==3.0.8 ; python_version >= '3.7'
|
63 |
+
kiwisolver==1.4.4 ; python_version >= '3.7'
|
64 |
+
lxml==4.9.3 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
65 |
+
markdown-it-py==3.0.0 ; python_version >= '3.8'
|
66 |
+
markupsafe==2.1.3 ; python_version >= '3.7'
|
67 |
+
matplotlib==3.7.2 ; python_version >= '3.8'
|
68 |
+
matplotlib-inline==0.1.6 ; python_version >= '3.5'
|
69 |
+
mdurl==0.1.2 ; python_version >= '3.7'
|
70 |
+
mistune==3.0.1 ; python_version >= '3.7'
|
71 |
+
nbclient==0.8.0 ; python_full_version >= '3.8.0'
|
72 |
+
nbconvert==7.6.0 ; python_version >= '3.7'
|
73 |
+
nbformat==5.9.1 ; python_version >= '3.8'
|
74 |
+
nest-asyncio==1.5.6 ; python_version >= '3.5'
|
75 |
+
netcdf4==1.6.4 ; python_version >= '3.7'
|
76 |
+
networkx==3.1 ; python_version >= '3.8'
|
77 |
+
notebook-shim==0.2.3 ; python_version >= '3.7'
|
78 |
+
numpy==1.22.1 ; python_version >= '3.8'
|
79 |
+
openpyxl==3.1.2 ; python_version >= '3.6'
|
80 |
+
overrides==7.3.1 ; python_version >= '3.6'
|
81 |
+
packaging==23.1 ; python_version >= '3.7'
|
82 |
+
pandas==2.0.3 ; python_version >= '3.8'
|
83 |
+
pandocfilters==1.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
|
84 |
+
parso==0.8.3 ; python_version >= '3.6'
|
85 |
+
patsy==0.5.3
|
86 |
+
pickleshare==0.7.5
|
87 |
+
pillow==9.5.0 ; python_version >= '3.7'
|
88 |
+
platformdirs==3.9.1 ; python_version >= '3.7'
|
89 |
+
plotly==5.15.0
|
90 |
+
prometheus-client==0.17.1 ; python_version >= '3.6'
|
91 |
+
prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0'
|
92 |
+
protobuf==4.23.4 ; python_version >= '3.7'
|
93 |
+
psutil==5.9.5 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
|
94 |
+
pure-eval==0.2.2
|
95 |
+
pyarrow==12.0.1 ; python_version >= '3.7'
|
96 |
+
pycparser==2.21
|
97 |
+
pydeck==0.8.1b0 ; python_version >= '3.7'
|
98 |
+
pygments==2.15.1 ; python_version >= '3.7'
|
99 |
+
pymc3==3.11.5 ; python_version >= '3.7'
|
100 |
+
pympler==1.0.1 ; python_version >= '3.6'
|
101 |
+
pyparsing==3.0.9 ; python_full_version >= '3.6.8'
|
102 |
+
python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
|
103 |
+
python-json-logger==2.0.7 ; python_version >= '3.6'
|
104 |
+
pytz==2023.3
|
105 |
+
pytz-deprecation-shim==0.1.0.post0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
|
106 |
+
pywin32==306 ; sys_platform == 'win32' and platform_python_implementation != 'PyPy'
|
107 |
+
pywinpty==2.0.11 ; os_name == 'nt'
|
108 |
+
pyyaml==6.0 ; python_version >= '3.6'
|
109 |
+
pyzmq==25.1.0 ; python_version >= '3.6'
|
110 |
+
referencing==0.29.1 ; python_version >= '3.8'
|
111 |
+
requests==2.31.0 ; python_version >= '3.7'
|
112 |
+
rfc3339-validator==0.1.4 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
113 |
+
rfc3986-validator==0.1.1 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
114 |
+
rich==13.4.2 ; python_full_version >= '3.7.0'
|
115 |
+
rpds-py==0.8.10 ; python_version >= '3.8'
|
116 |
+
scipy==1.7.3 ; python_version < '3.11' and python_version >= '3.7'
|
117 |
+
semver==3.0.1 ; python_version >= '3.7'
|
118 |
+
send2trash==1.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
119 |
+
setuptools==68.0.0 ; python_version >= '3.7'
|
120 |
+
six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
|
121 |
+
smmap==5.0.0 ; python_version >= '3.6'
|
122 |
+
sniffio==1.3.0 ; python_version >= '3.7'
|
123 |
+
soupsieve==2.4.1 ; python_version >= '3.7'
|
124 |
+
stack-data==0.6.2
|
125 |
+
streamlit==1.24.1
|
126 |
+
tenacity==8.2.2 ; python_version >= '3.6'
|
127 |
+
terminado==0.17.1 ; python_version >= '3.7'
|
128 |
+
theano-pymc==1.1.2
|
129 |
+
tinycss2==1.2.1 ; python_version >= '3.7'
|
130 |
+
toml==0.10.2 ; python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'
|
131 |
+
tomli==2.0.1 ; python_version < '3.11'
|
132 |
+
toolz==0.12.0 ; python_version >= '3.5'
|
133 |
+
tornado==6.3.2 ; python_version >= '3.8'
|
134 |
+
tqdm==4.65.0 ; python_version >= '3.7'
|
135 |
+
traitlets==5.9.0 ; python_version >= '3.7'
|
136 |
+
typing-extensions==4.7.1 ; python_version >= '3.7'
|
137 |
+
tzdata==2023.3 ; python_version >= '2'
|
138 |
+
tzlocal==4.3.1 ; python_version >= '3.7'
|
139 |
+
uri-template==1.3.0
|
140 |
+
urllib3==2.0.3 ; python_version >= '3.7'
|
141 |
+
validators==0.20.0 ; python_version >= '3.4'
|
142 |
+
watchdog==3.0.0 ; platform_system != 'Darwin'
|
143 |
+
wcwidth==0.2.6
|
144 |
+
webcolors==1.13
|
145 |
+
webencodings==0.5.1
|
146 |
+
websocket-client==1.6.1 ; python_version >= '3.7'
|
147 |
+
widgetsnbextension==4.0.8 ; python_version >= '3.7'
|
148 |
+
wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
|
149 |
+
xarray==2023.6.0 ; python_version >= '3.9'
|
150 |
+
xarray-einstats==0.6.0 ; python_version >= '3.9'
|
151 |
+
zipp==3.16.2 ; python_version >= '3.8'
|
streamlit_app_asdm.py
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
import streamlit as st
|
3 |
+
import plotly.graph_objects as go
|
4 |
+
from ASDM.ASDM import Structure
|
5 |
+
|
6 |
+
def load_model(model_path):
|
7 |
+
try:
|
8 |
+
model = Structure(from_xmile=model_path)
|
9 |
+
except FileNotFoundError:
|
10 |
+
st.error(f"File {model_path} not found.")
|
11 |
+
return None
|
12 |
+
return model
|
13 |
+
|
14 |
+
def run_simulation(model, simulation_time, re_investment):
|
15 |
+
model.sim_specs['initial_time'] = 0
|
16 |
+
model.sim_specs['current_time'] = 0
|
17 |
+
model.sim_specs['dt'] = 1
|
18 |
+
model.sim_specs['simulation_time'] = simulation_time
|
19 |
+
model.sim_specs['time_units'] = 'Months'
|
20 |
+
|
21 |
+
model.clear_last_run()
|
22 |
+
|
23 |
+
model.aux_equations['percentageOfSavingsSpentOnCessation'] = str(re_investment)
|
24 |
+
|
25 |
+
model.simulate()
|
26 |
+
|
27 |
+
results = model.export_simulation_result()
|
28 |
+
results_df = pd.DataFrame.from_dict(results)
|
29 |
+
|
30 |
+
columns_to_plot = ["Current_smokers", "Ex_smokers", "Ex_smokers_starting_again"]
|
31 |
+
return results_df['Months'], results_df[columns_to_plot]
|
32 |
+
|
33 |
+
st.title('Smoking Cessation')
|
34 |
+
|
35 |
+
st.markdown("""
|
36 |
+
This simulation estimates the effects of various reinvestment levels in a smoking cessation service within a population of 900 smokers.
|
37 |
+
By varying the proportion of savings that are reinvested into the service, we can observe different outcomes in terms of current smokers, ex-smokers,
|
38 |
+
and ex-smokers who start smoking again over time.
|
39 |
+
""")
|
40 |
+
|
41 |
+
st.subheader('Slide the Slider to Vary Re-Investment Levels')
|
42 |
+
|
43 |
+
model = load_model('models/smoking cessation demo.stmx')
|
44 |
+
|
45 |
+
if model is not None:
|
46 |
+
re_investment = st.slider("Proportion of Savings Spent on Cessation", 0, 100, 45)
|
47 |
+
simulation_time = st.slider("Select the number of months to simulate:", min_value=1, max_value=36, value=24)
|
48 |
+
|
49 |
+
x_values, y_values = run_simulation(model, simulation_time, re_investment)
|
50 |
+
|
51 |
+
st.subheader('Effects of Re-Investment on Smoking Levels')
|
52 |
+
|
53 |
+
fig = go.Figure()
|
54 |
+
for column in y_values.columns:
|
55 |
+
fig.add_trace(go.Scatter(x=x_values, y=y_values[column], mode='lines', name=column))
|
56 |
+
fig.update_layout(xaxis_title='Months', yaxis_title='Number of Smokers', autosize=False, width=800, height=500)
|
57 |
+
st.plotly_chart(fig)
|