Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import pandas as pd | |
| import tensorflow as tf | |
| from tensorflow.keras.models import Sequential | |
| from tensorflow.keras.layers import Dense, LSTM | |
| from sklearn.ensemble import RandomForestRegressor | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.preprocessing import MinMaxScaler | |
| # Function to preprocess data | |
| def preprocess_data(data): | |
| # Convert date column to datetime | |
| data['date'] = pd.to_datetime(data['date']) | |
| # Create a sequence feature | |
| data['sequence'] = np.arange(len(data)) | |
| # Scale the demand values | |
| scaler = MinMaxScaler() | |
| data['demand_scaled'] = scaler.fit_transform(data['demand'].values.reshape(-1, 1)) | |
| return data, scaler | |
| # Function for demand forecasting | |
| def forecast_demand(data, model_type='LSTM'): | |
| data, scaler = preprocess_data(data) | |
| X = data[['sequence']] | |
| y = data['demand_scaled'] | |
| # Split the data into train and test sets | |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
| if model_type == 'LSTM': | |
| # Reshape the input data for LSTM | |
| X_train = X_train.values.reshape(-1, 1, 1) | |
| X_test = X_test.values.reshape(-1, 1, 1) | |
| model = Sequential() | |
| model.add(LSTM(64, input_shape=(1, 1))) | |
| model.add(Dense(1)) | |
| model.compile(optimizer='adam', loss='mean_squared_error') | |
| model.fit(X_train, y_train, epochs=50, batch_size=32, verbose=0) | |
| forecast = model.predict(X_test) | |
| # Inverse scale the forecasted values | |
| forecast = scaler.inverse_transform(forecast) | |
| elif model_type == 'RandomForest': | |
| model = RandomForestRegressor(n_estimators=100, random_state=42) | |
| model.fit(X_train, y_train) | |
| forecast = model.predict(X_test) | |
| # Inverse scale the forecasted values | |
| forecast = scaler.inverse_transform(forecast.reshape(-1, 1)).squeeze() | |
| # Inverse scale the actual test values | |
| y_test = scaler.inverse_transform(y_test.values.reshape(-1, 1)).squeeze() | |
| return forecast, y_test | |
| # Gradio interface | |
| import gradio as gr | |
| def run_app(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Intelligent Inventory and Supply Chain Management") | |
| with gr.Tab("Demand Forecasting"): | |
| with gr.Row(): | |
| model_type = gr.Radio(["LSTM", "RandomForest"], label="Model Type") | |
| with gr.Row(): | |
| data_upload = gr.File(label="Upload Data") | |
| forecast_button = gr.Button("Forecast Demand") | |
| with gr.Row(): | |
| forecast_plot = gr.Plot() | |
| forecast_output = gr.Dataframe(label="Forecasted Demand") | |
| forecast_button.click(forecast_demand_wrapper, inputs=[data_upload, model_type], outputs=[forecast_plot, forecast_output]) | |
| demo.launch() | |
| if __name__ == "__main__": | |
| run_app() |