Spaces:
Sleeping
Sleeping
File size: 10,176 Bytes
9dd40a1 |
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 |
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split
import time
# Wide mode
st.set_page_config(layout="wide")
# Initialize parameters
params = {
'Beds': 100,
'Doctors': 50,
'Nurses': 100,
'Ventilators': 20,
'ICU_Beds': 20,
'Surgical_Suites': 5,
'Emergency_Room_Beds': 10,
'Pharmacy_Staff': 5,
'Lab_Staff': 5,
'Radiology_Staff': 5,
'Patient_Admissions': 50,
'Patient_Discharges': 40,
'Average_Stay': 5,
'ICU_Admissions': 10,
'Surgical_Cases': 20,
'Emergency_Room_Visits': 30,
'Pharmacy_Requests': 50,
'Lab_Requests': 40,
'Radiology_Requests': 30
}
# Create a Streamlit app
st.title("Hospital Resource Allocation Simulator")
# Add a sidebar for input parameters
st.sidebar.header("Input Parameters")
for param, value in params.items():
params[param] = st.sidebar.slider(param, 0, 200, value)
# Create a button to start the simulation
if st.sidebar.button("Start Live Simulation"):
st.header("Live Simulation")
st.write("Simulation started. Graphs will update every second to represent hourly changes in resource allocation.")
# Initialize dataframes to store simulation data
beds_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Occupied'])
doctors_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Busy'])
nurses_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Busy'])
ventilators_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'In_Use'])
icu_beds_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Occupied'])
surgical_suites_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'In_Use'])
emergency_room_beds_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Occupied'])
pharmacy_staff_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Busy'])
lab_staff_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Busy'])
radiology_staff_df = pd.DataFrame(index=pd.date_range(start='2022-01-01', periods=24, freq='H'), columns=['Available', 'Busy'])
# Initialize log for resource usage
log = []
# Generate synthetic data for training
np.random.seed(42)
X = pd.DataFrame(np.random.randint(0, 100, size=(100, len(params))), columns=params.keys())
y = np.random.randint(0, 100, size=100) # Dummy target for demonstration
# Split data for training and testing
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Initialize regression models
models = {
'Linear Regression': LinearRegression(),
'Random Forest Regression': RandomForestRegressor(),
'SVR': SVR(),
'Decision Tree Regression': DecisionTreeRegressor(),
'Gradient Boosting Regression': GradientBoostingRegressor()
}
# Predict values for each parameter using each model
predicted_values = {}
for name, model in models.items():
predictions = model.fit(X_train, y_train).predict(X_test)
predicted_values[name] = predictions
# Display predicted values
# st.subheader("Predicted Parameter Values")
# predicted_df = pd.DataFrame(predicted_values, index=X_test.index)
# st.write(predicted_df)
# Create a grid layout for the graphs
col1, col2, col3 = st.columns(3)
with col1:
st.subheader("Beds Availability")
beds_chart = st.line_chart(beds_df)
with col2:
st.subheader("Doctors Availability")
doctors_chart = st.line_chart(doctors_df)
with col3:
st.subheader("Nurses Availability")
nurses_chart = st.line_chart(nurses_df)
col4, col5, col6 = st.columns(3)
with col4:
st.subheader("Ventilators Availability")
ventilators_chart = st.line_chart(ventilators_df)
with col5:
st.subheader("ICU Beds Availability")
icu_beds_chart = st.line_chart(icu_beds_df)
with col6:
st.subheader("Surgical Suites Availability")
surgical_suites_chart = st.line_chart(surgical_suites_df)
col7, col8, col9 = st.columns(3)
with col7:
st.subheader("Emergency Room Beds Availability")
emergency_room_beds_chart = st.line_chart(emergency_room_beds_df)
with col8:
st.subheader("Pharmacy Staff Availability")
pharmacy_staff_chart = st.line_chart(pharmacy_staff_df)
with col9:
st.subheader("Lab Staff Availability")
lab_staff_chart = st.line_chart(lab_staff_df)
col10, col11, col12 = st.columns(3)
with col10:
st.subheader("Radiology Staff Availability")
radiology_staff_chart = st.line_chart(radiology_staff_df)
# Start the simulation
for i in range(24):
# Simulate patient admissions and discharges
admissions = np.random.poisson(params['Patient_Admissions'])
discharges = np.random.poisson(params['Patient_Discharges'])
# Update bed availability
beds_df.iloc[i, 0] = params['Beds'] - admissions + discharges
beds_df.iloc[i, 1] = admissions
# Simulate doctor and nurse availability
doctors_available = params['Doctors'] - (admissions * 0.6 + params['ICU_Admissions'] * 0.4)
nurses_available = params['Nurses'] - (admissions * 1.4 + params['ICU_Admissions'] * 0.6)
doctors_df.iloc[i, 0] = doctors_available
doctors_df.iloc[i, 1] = admissions * 0.25
nurses_df.iloc[i, 0] = nurses_available
nurses_df.iloc[i, 1] = admissions * 0.8
# Simulate ventilator availability
ventilators_available = params['Ventilators'] - (admissions * 0.1 + params['ICU_Admissions'] * 0.2)
ventilators_df.iloc[i, 0] = ventilators_available
ventilators_df.iloc[i, 1] = admissions * 0.05
# Simulate ICU bed availability
icu_beds_available = params['ICU_Beds'] - (admissions * 0.1 + params['ICU_Admissions'] * 0.5)
icu_beds_df.iloc[i, 0] = icu_beds_available
icu_beds_df.iloc[i, 1] = admissions * 0.08
# Simulate surgical suite availability
surgical_suites_available = params['Surgical_Suites'] - (admissions * 0.1 + params['Surgical_Cases'] * 0.4)
surgical_suites_df.iloc[i, 0] = surgical_suites_available
surgical_suites_df.iloc[i, 1] = admissions * 0.05
# Simulate emergency room bed availability
emergency_room_beds_available = params['Emergency_Room_Beds'] - (admissions * 0.1 + params['Emergency_Room_Visits'] * 0.5)
emergency_room_beds_df.iloc[i, 0] = emergency_room_beds_available
emergency_room_beds_df.iloc[i, 1] = admissions * 0.1
# Simulate pharmacy, lab, and radiology staff availability
pharmacy_requests = params['Pharmacy_Requests'] + params['ICU_Admissions'] * 0.1 + admissions * 0.1
lab_requests = params['Lab_Requests'] + params['ICU_Admissions'] * 0.1 + admissions * 0.1
radiology_requests = params['Radiology_Requests'] + params['ICU_Admissions'] * 0.1 + admissions * 0.1
pharmacy_staff_available = params['Pharmacy_Staff'] - pharmacy_requests * 0.1
lab_staff_available = params['Lab_Staff'] - lab_requests * 0.1
radiology_staff_available = params['Radiology_Staff'] - radiology_requests * 0.1
pharmacy_staff_df.iloc[i, 0] = pharmacy_staff_available
pharmacy_staff_df.iloc[i, 1] = pharmacy_requests * 0.1
lab_staff_df.iloc[i, 0] = lab_staff_available
lab_staff_df.iloc[i, 1] = lab_requests * 0.1
radiology_staff_df.iloc[i, 0] = radiology_staff_available
radiology_staff_df.iloc[i, 1] = radiology_requests * 0.1
# Update graphs with new data
beds_chart.line_chart(beds_df)
doctors_chart.line_chart(doctors_df)
nurses_chart.line_chart(nurses_df)
ventilators_chart.line_chart(ventilators_df)
icu_beds_chart.line_chart(icu_beds_df)
surgical_suites_chart.line_chart(surgical_suites_df)
emergency_room_beds_chart.line_chart(emergency_room_beds_df)
pharmacy_staff_chart.line_chart(pharmacy_staff_df)
lab_staff_chart.line_chart(lab_staff_df)
radiology_staff_chart.line_chart(radiology_staff_df)
# Log resource usage for each patient
log.append(f"Hour {i}: Beds Available - {beds_df.iloc[i, 0]}, Beds Occupied - {beds_df.iloc[i, 1]}, Doctors Available - {doctors_df.iloc[i, 0]}, Doctors Busy - {doctors_df.iloc[i, 1]}, Nurses Available - {nurses_df.iloc[i, 0]}, Nurses Busy - {nurses_df.iloc[i, 1]}, Ventilators Available - {ventilators_df.iloc[i, 0]}, Ventilators In Use - {ventilators_df.iloc[i, 1]}, ICU Beds Available - {icu_beds_df.iloc[i, 0]}, ICU Beds Occupied - {icu_beds_df.iloc[i, 1]}, Surgical Suites Available - {surgical_suites_df.iloc[i, 0]}, Surgical Suites In Use - {surgical_suites_df.iloc[i, 1]}, Emergency Room Beds Available - {emergency_room_beds_df.iloc[i, 0]}, Emergency Room Beds Occupied - {emergency_room_beds_df.iloc[i, 1]}, Pharmacy Staff Available - {pharmacy_staff_df.iloc[i, 0]}, Pharmacy Staff Busy - {pharmacy_staff_df.iloc[i, 1]}, Lab Staff Available - {lab_staff_df.iloc[i, 0]}, Lab Staff Busy - {lab_staff_df.iloc[i, 1]}, Radiology Staff Available - {radiology_staff_df.iloc[i, 0]}, Radiology Staff Busy - {radiology_staff_df.iloc[i, 1]}")
# Wait for 1 second before updating the simulation
time.sleep(1)
# Display the resource usage log
st.subheader("Resource Usage Log")
for entry in log:
st.write(entry)
|