yazodi's picture
Upload 4 files
2af271a verified
import streamlit as st
import pandas as pd
import numpy as np
import joblib
# Başlık
st.title("🔌 Ion Switching Tahmin Uygulaması")
# Modeli yükle
model = joblib.load("ion_switch_model.pkl")
# Rolling feature fonksiyonu
def add_rolling_features(df, window_sizes=[10, 50, 100]):
for window in window_sizes:
df[f'signal_mean_{window}'] = df['signal'].rolling(window=window, min_periods=1, center=True).mean()
df[f'signal_std_{window}'] = df['signal'].rolling(window=window, min_periods=1, center=True).std()
df[f'signal_min_{window}'] = df['signal'].rolling(window=window, min_periods=1, center=True).min()
df[f'signal_max_{window}'] = df['signal'].rolling(window=window, min_periods=1, center=True).max()
return df
# CSV yükleme
uploaded_file = st.file_uploader("📤 Lütfen sinyal içeren CSV dosyasını yükleyin (signal sütunu olmalı)", type=["csv"])
if uploaded_file is not None:
data = pd.read_csv(uploaded_file)
st.write("📄 İlk 5 satır:")
st.write(data.head())
if 'signal' in data.columns:
# Özellikleri ekle
data_feat = add_rolling_features(data.copy())
# Tahmin
feature_cols = [col for col in data_feat.columns if 'signal_' in col]
X_input = data_feat[feature_cols].fillna(0)
preds = model.predict(X_input)
# Sonuç göster
data['predicted_open_channels'] = preds
st.success("✅ Tahminler tamamlandı!")
st.write(data[['signal', 'predicted_open_channels']].head())
# İndirilebilir hale getir
csv = data.to_csv(index=False).encode('utf-8')
st.download_button("📥 Tahmin Sonuçlarını İndir", csv, "ion_switch_predictions.csv", "text/csv")
else:
st.warning("❗ 'signal' sütunu bulunamadı.")