sohnikaavisakula commited on
Commit
efdb030
·
verified ·
1 Parent(s): 82a5825

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -329
app.py CHANGED
@@ -2,335 +2,61 @@ import streamlit as st
2
 
3
  st.title("Inventory Dashboard")
4
  st.write("Welcome to your inventory tracking system!")
5
- {
6
- "cells": [
7
- {
8
- "cell_type": "code",
9
- "execution_count": 1,
10
- "metadata": {},
11
- "outputs": [],
12
- "source": [
13
- "import streamlit as st\n",
14
- "import pandas as pd\n",
15
- "import numpy as np\n",
16
- "import matplotlib.pyplot as plt"
17
- ]
18
- },
19
- {
20
- "cell_type": "code",
21
- "execution_count": 3,
22
- "metadata": {},
23
- "outputs": [
24
- {
25
- "name": "stderr",
26
- "output_type": "stream",
27
- "text": [
28
- "2025-01-29 00:46:00.134 No runtime found, using MemoryCacheStorageManager\n"
29
- ]
30
- }
31
- ],
32
- "source": [
33
- "# Load the data\n",
34
- "@st.cache_data\n",
35
- "def load_data():\n",
36
- " lead_time_data = pd.read_csv('final_cleaned_lead_time_data.csv')\n",
37
- " inventory_data = pd.read_csv('inventory.csv')\n",
38
- " return lead_time_data, inventory_data\n",
39
- "\n",
40
- "lead_time_data, inventory_data = load_data()"
41
- ]
42
- },
43
- {
44
- "cell_type": "code",
45
- "execution_count": 4,
46
- "metadata": {},
47
- "outputs": [],
48
- "source": [
49
- "# Calculate Safety Stock and Reorder Point\n",
50
- "def calculate_safety_stock(demand_std, lead_time_mean, z_score=1.645):\n",
51
- " return z_score * demand_std * np.sqrt(lead_time_mean)"
52
- ]
53
- },
54
- {
55
- "cell_type": "code",
56
- "execution_count": 5,
57
- "metadata": {},
58
- "outputs": [],
59
- "source": [
60
- "def calculate_reorder_point(avg_demand, lead_time_mean, safety_stock):\n",
61
- " return (avg_demand * lead_time_mean) + safety_stock"
62
- ]
63
- },
64
- {
65
- "cell_type": "code",
66
- "execution_count": 6,
67
- "metadata": {},
68
- "outputs": [],
69
- "source": [
70
- "# Simulate real-time updates\n",
71
- "def simulate_real_time_data(data, interval=5):\n",
72
- " for i in range(interval):\n",
73
- " new_demand = np.random.randint(50, 100) # Simulated demand\n",
74
- " new_row = pd.DataFrame({'Product Name': [f'Product {i+1}'], 'Demand': [new_demand]})\n",
75
- " data = pd.concat([data, new_row], ignore_index=True)\n",
76
- " return data"
77
- ]
78
- },
79
- {
80
- "cell_type": "code",
81
- "execution_count": 7,
82
- "metadata": {},
83
- "outputs": [
84
- {
85
- "name": "stderr",
86
- "output_type": "stream",
87
- "text": [
88
- "2025-01-29 00:47:02.385 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
89
- "2025-01-29 00:47:02.386 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
90
- "2025-01-29 00:47:02.387 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
91
- "2025-01-29 00:47:02.388 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
92
- "2025-01-29 00:47:02.388 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
93
- "2025-01-29 00:47:02.391 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
94
- "2025-01-29 00:47:02.391 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
95
- "2025-01-29 00:47:02.393 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
96
- "2025-01-29 00:47:02.393 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
97
- "2025-01-29 00:47:02.393 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
98
- "2025-01-29 00:47:02.394 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
99
- "2025-01-29 00:47:02.394 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
100
- ]
101
- }
102
- ],
103
- "source": [
104
- "# Sidebar for user input\n",
105
- "st.sidebar.header(\"Inventory Parameters\")\n",
106
- "z_score = st.sidebar.slider(\"Z-Score (Service Level)\", 1.0, 3.0, 1.645)\n",
107
- "interval = st.sidebar.slider(\"Real-Time Update Interval\", 1, 10, 5)"
108
- ]
109
- },
110
- {
111
- "cell_type": "code",
112
- "execution_count": 8,
113
- "metadata": {},
114
- "outputs": [],
115
- "source": [
116
- "# Calculate metrics\n",
117
- "demand_std = lead_time_data['Lead Time (Days)'].std()\n",
118
- "lead_time_mean = lead_time_data['Lead Time (Days)'].mean()\n",
119
- "avg_demand = inventory_data[' Warehouse Inventory '].mean()"
120
- ]
121
- },
122
- {
123
- "cell_type": "code",
124
- "execution_count": 9,
125
- "metadata": {},
126
- "outputs": [],
127
- "source": [
128
- "safety_stock = calculate_safety_stock(demand_std, lead_time_mean, z_score)\n",
129
- "reorder_point = calculate_reorder_point(avg_demand, lead_time_mean, safety_stock)"
130
- ]
131
- },
132
- {
133
- "cell_type": "code",
134
- "execution_count": 10,
135
- "metadata": {},
136
- "outputs": [
137
- {
138
- "name": "stderr",
139
- "output_type": "stream",
140
- "text": [
141
- "2025-01-29 00:48:26.507 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
142
- "2025-01-29 00:48:26.509 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
143
- "2025-01-29 00:48:26.510 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
144
- "2025-01-29 00:48:26.511 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
145
- "2025-01-29 00:48:26.513 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
146
- "2025-01-29 00:48:26.514 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
147
- ]
148
- }
149
- ],
150
- "source": [
151
- "# Display metrics\n",
152
- "st.title(\"Inventory Management Dashboard\")\n",
153
- "st.write(\"This dashboard dynamically visualizes inventory levels, reorder points, and safety stock.\")"
154
- ]
155
- },
156
- {
157
- "cell_type": "code",
158
- "execution_count": 11,
159
- "metadata": {},
160
- "outputs": [
161
- {
162
- "name": "stderr",
163
- "output_type": "stream",
164
- "text": [
165
- "2025-01-29 00:48:40.322 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
166
- "2025-01-29 00:48:40.324 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
167
- "2025-01-29 00:48:40.326 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
168
- "2025-01-29 00:48:40.326 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
169
- "2025-01-29 00:48:40.327 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
170
- "2025-01-29 00:48:40.327 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
171
- "2025-01-29 00:48:40.327 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
172
- "2025-01-29 00:48:40.328 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
173
- ]
174
- },
175
- {
176
- "data": {
177
- "text/plain": [
178
- "DeltaGenerator()"
179
- ]
180
- },
181
- "execution_count": 11,
182
- "metadata": {},
183
- "output_type": "execute_result"
184
- }
185
- ],
186
- "source": [
187
- "st.subheader(\"Key Metrics\")\n",
188
- "st.metric(\"Safety Stock\", f\"{safety_stock:.2f} units\")\n",
189
- "st.metric(\"Reorder Point\", f\"{reorder_point:.2f} units\")\n",
190
- "st.metric(\"Average Demand\", f\"{avg_demand:.2f} units/day\")"
191
- ]
192
- },
193
- {
194
- "cell_type": "code",
195
- "execution_count": 12,
196
- "metadata": {},
197
- "outputs": [
198
- {
199
- "name": "stderr",
200
- "output_type": "stream",
201
- "text": [
202
- "2025-01-29 00:49:10.414 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
203
- "2025-01-29 00:49:10.416 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
204
- "2025-01-29 00:49:10.469 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
205
- "2025-01-29 00:49:10.470 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
206
- ]
207
- }
208
- ],
209
- "source": [
210
- "# Simulate real-time updates\n",
211
- "st.subheader(\"Real-Time Inventory Updates\")\n",
212
- "real_time_data = simulate_real_time_data(inventory_data, interval)\n",
213
- "st.write(real_time_data)"
214
- ]
215
- },
216
- {
217
- "cell_type": "code",
218
- "execution_count": 14,
219
- "metadata": {},
220
- "outputs": [
221
- {
222
- "name": "stderr",
223
- "output_type": "stream",
224
- "text": [
225
- "2025-01-29 00:49:30.914 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
226
- "2025-01-29 00:49:30.916 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
227
- "2025-01-29 00:49:31.038 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
228
- "2025-01-29 00:49:31.849 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
229
- "2025-01-29 00:49:31.849 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
230
- ]
231
- },
232
- {
233
- "data": {
234
- "text/plain": [
235
- "DeltaGenerator()"
236
- ]
237
- },
238
- "execution_count": 14,
239
- "metadata": {},
240
- "output_type": "execute_result"
241
- }
242
- ],
243
- "source": [
244
- "# Plot inventory levels\n",
245
- "st.subheader(\"Inventory Levels\")\n",
246
- "fig, ax = plt.subplots()\n",
247
- "ax.plot(inventory_data['Product Name'], inventory_data[' Warehouse Inventory '], label='Inventory Levels', color='blue')\n",
248
- "ax.axhline(y=reorder_point, color='red', linestyle='--', label='Reorder Point')\n",
249
- "ax.axhline(y=safety_stock, color='green', linestyle='--', label='Safety Stock')\n",
250
- "ax.set_title(\"Inventory Levels and Reorder Point\")\n",
251
- "ax.set_xlabel(\"Product Name\")\n",
252
- "ax.set_ylabel(\"Inventory\")\n",
253
- "ax.legend()\n",
254
- "st.pyplot(fig)"
255
- ]
256
- },
257
- {
258
- "cell_type": "code",
259
- "execution_count": 15,
260
- "metadata": {},
261
- "outputs": [
262
- {
263
- "name": "stderr",
264
- "output_type": "stream",
265
- "text": [
266
- "2025-01-29 00:49:43.470 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
267
- "2025-01-29 00:49:43.480 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
268
- "2025-01-29 00:49:43.558 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
269
- "2025-01-29 00:49:43.563 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
270
- ]
271
- },
272
- {
273
- "data": {
274
- "text/plain": [
275
- "DeltaGenerator()"
276
- ]
277
- },
278
- "execution_count": 15,
279
- "metadata": {},
280
- "output_type": "execute_result"
281
- }
282
- ],
283
- "source": [
284
- "st.subheader(\"Inventory Data\")\n",
285
- "st.dataframe(inventory_data)"
286
- ]
287
- },
288
- {
289
- "cell_type": "code",
290
- "execution_count": 16,
291
- "metadata": {},
292
- "outputs": [
293
- {
294
- "name": "stderr",
295
- "output_type": "stream",
296
- "text": [
297
- "2025-01-29 00:50:06.177 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
298
- "2025-01-29 00:50:06.179 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
299
- "2025-01-29 00:50:06.181 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
300
- "2025-01-29 00:50:06.182 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n",
301
- "2025-01-29 00:50:06.183 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.\n"
302
- ]
303
- }
304
- ],
305
- "source": [
306
- "if st.button(\"Save Results\"):\n",
307
- " inventory_data.to_csv(\"updated_inventory_data.csv\", index=False)\n",
308
- " st.success(\"Results saved to 'updated_inventory_data.csv'\")"
309
- ]
310
- }
311
- ],
312
- "metadata": {
313
- "kernelspec": {
314
- "display_name": "base",
315
- "language": "python",
316
- "name": "python3"
317
- },
318
- "language_info": {
319
- "codemirror_mode": {
320
- "name": "ipython",
321
- "version": 3
322
- },
323
- "file_extension": ".py",
324
- "mimetype": "text/x-python",
325
- "name": "python",
326
- "nbconvert_exporter": "python",
327
- "pygments_lexer": "ipython3",
328
- "version": "3.11.7"
329
- }
330
- },
331
- "nbformat": 4,
332
- "nbformat_minor": 2
333
- }
334
  if __name__ == "__main__":
335
  import streamlit as st
336
  st.write("Streamlit app is running!")
 
2
 
3
  st.title("Inventory Dashboard")
4
  st.write("Welcome to your inventory tracking system!")
5
+ import pandas as pd
6
+ import numpy as np
7
+ import matplotlib.pyplot as plt
8
+ @st.cache
9
+ def load_data():
10
+ lead_time_data = pd.read_csv('final_cleaned_lead_time_data.csv')
11
+ inventory_data = pd.read_csv('inventory.csv')
12
+ return lead_time_data, inventory_data
13
+
14
+ lead_time_data, inventory_data = load_data()
15
+ def calculate_safety_stock(demand_std, lead_time_mean, z_score=1.645):
16
+ return z_score * demand_std * np.sqrt(lead_time_mean)
17
+
18
+ def calculate_reorder_point(avg_demand, lead_time_mean, safety_stock):
19
+ return (avg_demand * lead_time_mean) + safety_stock
20
+ def simulate_real_time_data(data, interval=5):
21
+ for i in range(interval):
22
+ new_demand = np.random.randint(50, 100) # Simulated demand
23
+ new_row = {'Product Name': f'Product {i+1}', 'Demand': new_demand}
24
+ data = data.append(new_row, ignore_index=True)
25
+ return data
26
+ st.sidebar.header("Inventory Parameters")
27
+ z_score = st.sidebar.slider("Z-Score (Service Level)", 1.0, 3.0, 1.645)
28
+ interval = st.sidebar.slider("Real-Time Update Interval", 1, 10, 5)
29
+ demand_std = lead_time_data['Lead Time (Days)'].std()
30
+ lead_time_mean = lead_time_data['Lead Time (Days)'].mean()
31
+ avg_demand = inventory_data[' Warehouse Inventory '].mean()
32
+
33
+ safety_stock = calculate_safety_stock(demand_std, lead_time_mean, z_score)
34
+ reorder_point = calculate_reorder_point(avg_demand, lead_time_mean, safety_stock)
35
+ st.title("Inventory Management Dashboard")
36
+ st.write("This dashboard dynamically visualizes inventory levels, reorder points, and safety stock.")
37
+
38
+ st.subheader("Key Metrics")
39
+ st.metric("Safety Stock", f"{safety_stock:.2f} units")
40
+ st.metric("Reorder Point", f"{reorder_point:.2f} units")
41
+ st.metric("Average Demand", f"{avg_demand:.2f} units/day")
42
+ st.subheader("Real-Time Inventory Updates")
43
+ real_time_data = simulate_real_time_data(inventory_data, interval)
44
+ st.write(real_time_data)
45
+ st.subheader("Inventory Levels")
46
+ fig, ax = plt.subplots()
47
+ ax.plot(inventory_data['Product Name'], inventory_data[' Warehouse Inventory '], label='Inventory Levels', color='blue')
48
+ ax.axhline(y=reorder_point, color='red', linestyle='--', label='Reorder Point')
49
+ ax.axhline(y=safety_stock, color='green', linestyle='--', label='Safety Stock')
50
+ ax.set_title("Inventory Levels and Reorder Point")
51
+ ax.set_xlabel("Product Name")
52
+ ax.set_ylabel("Inventory")
53
+ ax.legend()
54
+ st.pyplot(fig)
55
+ st.subheader("Inventory Data")
56
+ st.dataframe(inventory_data)
57
+ if st.button("Save Results"):
58
+ inventory_data.to_csv("updated_inventory_data.csv", index=False)
59
+ st.success("Results saved to 'updated_inventory_data.csv'")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  if __name__ == "__main__":
61
  import streamlit as st
62
  st.write("Streamlit app is running!")