Spaces:
Sleeping
Sleeping
| # 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.") | |