sohnikaavisakula commited on
Commit
1622251
·
verified ·
1 Parent(s): f37a995

Upload 2 files

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