| import streamlit as st |
| import pandas as pd |
| import matplotlib.pyplot as plt |
| from statsmodels.tsa.statespace.sarimax import SARIMAX |
|
|
|
|
| st.title("Airline Passenger Forecasting") |
|
|
| st.write("This app forecasts future airline passenger traffic using a SARIMA time series model.") |
|
|
|
|
| |
| |
|
|
| df = pd.read_csv("src/air traffic.csv") |
|
|
|
|
| |
| |
|
|
| df["Date"] = pd.to_datetime( |
| df["Year"].astype(str) + "-" + df["Month"].astype(str) |
| ) |
|
|
| df = df.set_index("Date") |
|
|
|
|
| |
| |
|
|
| df["Pax"] = df["Pax"].astype(str).str.replace(",", "") |
|
|
| df["Pax"] = pd.to_numeric(df["Pax"]) |
|
|
|
|
| |
| |
|
|
| ts = df["Pax"] |
|
|
|
|
| st.subheader("Historical Passenger Traffic") |
|
|
| fig1, ax1 = plt.subplots(figsize=(12, 5)) |
|
|
| ax1.plot(ts) |
|
|
| ax1.set_title("Historical Passenger Traffic") |
| ax1.set_xlabel("Date") |
| ax1.set_ylabel("Passenger Count") |
|
|
| st.pyplot(fig1) |
|
|
|
|
| |
| |
|
|
| forecast_months = st.slider( |
| "Select forecast period in months", |
| min_value=6, |
| max_value=36, |
| value=24 |
| ) |
|
|
|
|
| |
| |
|
|
| model = SARIMAX( |
| ts, |
| order=(1, 1, 1), |
| seasonal_order=(1, 1, 1, 12) |
| ) |
|
|
| model_fit = model.fit() |
|
|
|
|
| |
| |
|
|
| forecast = model_fit.forecast(forecast_months) |
|
|
|
|
| st.subheader("Forecast Results") |
|
|
| fig2, ax2 = plt.subplots(figsize=(12, 5)) |
|
|
| ax2.plot(ts, label="Historical Data") |
|
|
| ax2.plot( |
| forecast.index, |
| forecast, |
| label="Forecast" |
| ) |
|
|
| ax2.set_title("Future Passenger Forecast") |
| ax2.set_xlabel("Date") |
| ax2.set_ylabel("Passenger Count") |
| ax2.legend() |
|
|
| st.pyplot(fig2) |
|
|
|
|
| |
| |
|
|
| forecast_df = pd.DataFrame({ |
| "Date": forecast.index, |
| "Forecast Passenger Count": forecast.values.astype(int) |
| }) |
|
|
| st.subheader("Forecast Table") |
|
|
| st.dataframe(forecast_df) |