Airline-Passenger-Forecasting / src /streamlit_app.py
MSK34's picture
Update src/streamlit_app.py
cbbb6bc verified
Raw
History Blame Contribute Delete
2.1 kB
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.")
# Code Açıklama:
# Veri setini okuyoruz.
df = pd.read_csv("src/air traffic.csv")
# Code Açıklama:
# Year ve Month sütunlarından tarih değişkeni oluşturuyoruz.
df["Date"] = pd.to_datetime(
df["Year"].astype(str) + "-" + df["Month"].astype(str)
)
df = df.set_index("Date")
# Code Açıklama:
# Pax sütununu sayısal formata çeviriyoruz.
df["Pax"] = df["Pax"].astype(str).str.replace(",", "")
df["Pax"] = pd.to_numeric(df["Pax"])
# Code Açıklama:
# Tahmin yapılacak zaman serisini seçiyoruz.
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)
# Code Açıklama:
# Kullanıcıdan kaç aylık tahmin istediğini alıyoruz.
forecast_months = st.slider(
"Select forecast period in months",
min_value=6,
max_value=36,
value=24
)
# Code Açıklama:
# SARIMA modelini tüm veriyle eğitiyoruz.
model = SARIMAX(
ts,
order=(1, 1, 1),
seasonal_order=(1, 1, 1, 12)
)
model_fit = model.fit()
# Code Açıklama:
# Seçilen ay sayısı kadar gelecek tahmini yapıyoruz.
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)
# Code Açıklama:
# Tahmin sonuçlarını tablo halinde gösteriyoruz.
forecast_df = pd.DataFrame({
"Date": forecast.index,
"Forecast Passenger Count": forecast.values.astype(int)
})
st.subheader("Forecast Table")
st.dataframe(forecast_df)