File size: 4,582 Bytes
40e83b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# 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.")