# Bu dosyanın adının "streamlit_app.py" olduğundan emin olun. # Hugging Face Spaces, varsayılan olarak bu isimdeki dosyayı çalıştırır. import streamlit as st import pandas as pd import matplotlib.pyplot as plt # --- Sayfa Yapılandırması (İyi Bir Pratik) --- # st.set_page_config, sayfanın başlığı ve düzeni gibi temel ayarları yapar. # Bu, her zaman Streamlit'in diğer komutlarından önce çağrılmalıdır. st.set_page_config( page_title="Interaktif Veri Paneli", page_icon="📊", layout="wide" ) # --- ANA BAŞLIK --- st.title("📊 Interaktif Veri Paneli") st.write("Bu uygulama, yüklediğiniz bir CSV dosyasını analiz etmenizi, filtrelemenizi ve görselleştirmenizi sağlar.") # --- Dosya Yükleme Bölümü --- # st.file_uploader, kullanıcının kendi bilgisayarından bir dosya seçmesini sağlar. # 'type="csv"' parametresi, sadece CSV dosyalarının seçilmesine izin verir. uploaded_file = st.file_uploader("Lütfen analiz etmek için bir CSV dosyası seçin", type="csv") # --- ANA KOD BLOĞU --- # Kodun geri kalanı, sadece bir dosya başarıyla yüklendiğinde çalışır. # Bu, 'if uploaded_file is not None:' kontrolü ile sağlanır. if uploaded_file is not None: try: # CSV dosyasını bir Pandas DataFrame'e okuyoruz. Bu, veriyi yapılandırılmış bir tabloya dönüştürür. df = pd.read_csv(uploaded_file) # --- Veri Önizleme ve Özet --- # Kullanıcıya yüklediği verinin neye benzediğini göstermek, iyi bir ilk adımdır. st.subheader("Veri Önizlemesi") st.write("Yüklediğiniz verinin ilk 5 satırı:") st.write(df.head()) st.subheader("Veri Özeti") st.write("Sayısal sütunlar için istatistiksel özet:") st.write(df.describe()) # --- İnteraktif Filtreleme Bölümü --- st.subheader('Tablo Görünümü İçin Veriyi Filtrele') # DataFrame'deki tüm sütun adlarını bir listeye çeviriyoruz. columns = df.columns.tolist() # Kullanıcıya hangi sütuna göre filtreleme yapacağını soran bir açılır menü. selected_column = st.selectbox("Filtrelemek için bir sütun seçin:", columns) # Seçilen sütundaki benzersiz (tekrarsız) değerleri buluyoruz. unique_values = df[selected_column].unique() # Kullanıcıya hangi değere göre filtreleme yapacağını soran ikinci bir açılır menü. selected_value = st.selectbox("Filtrelemek için bir değer seçin:", unique_values) # Filtrelenmiş veriyi 'filtered_df' adlı yeni bir DataFrame'e atıyoruz. filtered_df = df[df[selected_column] == selected_value] # Filtrelenmiş DataFrame'i ekrana yazdırıyoruz. st.write("Filtrelenmiş Veri Görünümü:") st.write(filtered_df) # --- Veri Görselleştirme Bölümü --- st.subheader("Tüm Veriyi Görselleştir") # Kullanıcıdan x ve y eksenleri için sütun seçmesini istiyoruz. # Streamlit'te aynı türden birden fazla widget olduğunda, onlara benzersiz bir 'key' vermek, # uygulamanın durumunu daha kararlı bir şekilde yönetmesine yardımcı olur. x_column_plot = st.selectbox("Grafiğin X-ekseni için bir sütun seçin:", columns, key='x_axis_plot') y_column_plot = st.selectbox("Grafiğin Y-ekseni için bir sütun seçin:", columns, key='y_axis_plot') # "Generate Plot" butonuna basıldığında grafiği oluşturuyoruz. if st.button("Grafik Oluştur"): st.write(f"'{y_column_plot}' ve '{x_column_plot}' arasındaki ilişki grafiği oluşturuluyor...") # Grafik çizerken filtrelenmiş 'filtered_df' yerine, orijinal ve tam 'df' DataFrame'ini kullanıyoruz. # Bu, verideki genel ilişkiyi görmek için anlamlı bir çizgi grafiği oluşturacaktır. # set_index, x eksenini doğru bir şekilde ayarlamamızı sağlar. st.line_chart(df.set_index(x_column_plot)[y_column_plot]) except Exception as e: # Dosya okunurken veya işlenirken bir hata olursa, kullanıcıya anlaşılır bir mesaj gösterir. st.error(f"Dosya işlenirken bir hata oluştu: {e}") st.warning("Lütfen geçerli bir formatta CSV dosyası yüklediğinizden emin olun.") else: # Dosya yüklenene kadar kullanıcıya bir mesaj gösteriyoruz. st.info("Başlamak için lütfen yukarıdan bir CSV dosyası yükleyin.")