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)