Time Series Forecasting Web App using Streamlit
Introduction
Time series forecasting is a powerful technique used to predict future values based on historical data points collected over time. Whether you’re predicting stock prices, weather patterns, sales figures, or website traffic, time series analysis helps businesses and researchers make informed decisions about the future.
In this comprehensive guide, we’ll build a complete Time Series Forecasting Web App using Python and Streamlit. This interactive application allows users to upload their own datasets and apply different forecasting models like ARIMA, LSTM, and Prophet without writing a single line of code. The app provides an intuitive interface that makes complex machine learning accessible to everyone, from beginners to experienced data scientists.
Overview
Time Series Forecasting Web App is an easy and powerful tool made using Python and Streamlit. It lets users do forecasting using popular models like ARIMA, LSTM, and Prophet.
It’s made to be accurate and simple to use. Great for developers, data analysts, or businesses who want to predict future trends from time-based data.
Project Details
| Project Name | Language Used | Developer |
|---|---|---|
| Time Series Forecasting | Python | UPDATEGADH |
Technology Stack
Language/s Used: Python
Python Version (Recommended): 3.8+
Database: No external database required
Type: Web Application
Developer: UPDATEGADH
Available Features
The project includes the following comprehensive features:
- Upload time series datasets in CSV format
- Interactive visualization with Plotly charts
- Data preprocessing & validation utilities
- Multiple forecasting models:
- ARIMA (AutoRegressive Integrated Moving Average)
- LSTM (Long Short-Term Memory Neural Networks)
- Prophet (Facebook’s forecasting tool)
- Model performance evaluation & comparison
- Clean, responsive UI built with Streamlit
- Export forecasted results to CSV
- Real-time model training progress indicators
- No external database needed works entirely with uploaded data
Step-by-Step Implementation Guide
Step 1: Setting Up the Environment
First, create a new directory for your project and set up a virtual environment:
mkdir time_series_app
cd time_series_app
python -m venv venv
source venv/bin/activate # On Windows: venvScriptsactivate
Step 2: Installing Required Libraries
Create a requirements.txt file with the following dependencies:
streamlit==1.28.1
pandas==2.0.3
numpy==1.24.3
plotly==5.15.0
scikit-learn==1.3.0
statsmodels==0.14.0
prophet==1.1.4
tensorflow==2.13.0
matplotlib==3.7.2
seaborn==0.12.2
Install the dependencies:
pip install -r requirements.txt
Step 3: Complete Code Example
Create the main application file app.py:
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from prophet import Prophet
from sklearn.metrics import mean_absolute_error, mean_squared_error
import warnings
warnings.filterwarnings('ignore')
# Set page configuration
st.set_page_config(
page_title="Time Series Forecasting App",
page_icon="",
layout="wide"
)
# Main title and description
st.title(" Time Series Forecasting Web App")
st.markdown("Upload your time series data and get predictions using advanced ML models!")
# Sidebar for navigation
st.sidebar.header("Navigation")
option = st.sidebar.selectbox(
"Choose an option:",
["Data Upload", "Data Visualization", "Model Training", "Forecasting"]
)
# Initialize session state
if 'data' not in st.session_state:
st.session_state.data = None
if 'trained_model' not in st.session_state:
st.session_state.trained_model = None
# Data Upload Section
if option == "Data Upload":
st.header(" Upload Your Time Series Data")
uploaded_file = st.file_uploader(
"Choose a CSV file",
type="csv",
help="Upload a CSV file with date and value columns"
)
if uploaded_file is not None:
try:
# Read the uploaded file
df = pd.read_csv(uploaded_file)
st.session_state.data = df
st.success(" File uploaded successfully!")
st.subheader("Data Preview")
st.dataframe(df.head(10))
# Display basic statistics
st.subheader(" Dataset Information")
col1, col2, col3 = st.columns(3)
with col1:
st.metric("Total Rows", len(df))
with col2:
st.metric("Total Columns", len(df.columns))
with col3:
st.metric("Missing Values", df.isnull().sum().sum())
except Exception as e:
st.error(f"Error reading file: {str(e)}")
# Data Visualization Section
elif option == "Data Visualization":
st.header(" Data Visualization")
if st.session_state.data is not None:
df = st.session_state.data
# Column selection
date_column = st.selectbox("Select Date Column:", df.columns)
value_column = st.selectbox("Select Value Column:", df.columns)
if st.button("Generate Visualization"):
try:
# Convert date column to datetime
df[date_column] = pd.to_datetime(df[date_column])
# Create interactive plot
fig = px.line(
df,
x=date_column,
y=value_column,
title=f"Time Series Plot: {value_column} over {date_column}"
)
fig.update_layout(
xaxis_title="Date",
yaxis_title="Value",
hovermode='x unified'
)
st.plotly_chart(fig, use_container_width=True)
# Display trend analysis
st.subheader(" Trend Analysis")
col1, col2 = st.columns(2)
with col1:
st.metric(
"Average Value",
f"{df[value_column].mean():.2f}"
)
st.metric(
"Standard Deviation",
f"{df[value_column].std():.2f}"
)
with col2:
st.metric(
"Minimum Value",
f"{df[value_column].min():.2