SezinDartar commited on
Commit
40e83b9
·
verified ·
1 Parent(s): e9b2884

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +91 -62
src/streamlit_app.py CHANGED
@@ -1,62 +1,91 @@
1
- import streamlit as st
2
- import pandas as pd
3
- import matplotlib.pyplot as plt
4
-
5
- st.title("Simple Data Dashboard")
6
-
7
- # Dosya yükleme bileşenini ana gövdeye yerleştiriyoruz.
8
- uploaded_file = st.file_uploader("Choose a CSV file", type="csv")
9
-
10
- # Sadece bir dosya yüklendiğinde kodun geri kalanının çalışmasını sağlıyoruz.
11
- if uploaded_file is not None:
12
- # CSV dosyasını bir Pandas DataFrame'e okuyoruz.
13
- df = pd.read_csv(uploaded_file)
14
-
15
- # --- Veri Önizleme ve Özet ---
16
- st.subheader("Data Preview")
17
- st.write(df.head())
18
-
19
- st.subheader("Data Summary")
20
- st.write(df.describe())
21
-
22
- # --- İnteraktif Filtreleme Bölümü ---
23
- st.subheader('Filter Data to View in Table')
24
-
25
- # DataFrame'deki tüm sütunları alıp bir listeye çeviriyoruz.
26
- columns = df.columns.tolist()
27
-
28
- # Kullanıcıya hangi sütuna göre filtreleme yapacağını soran bir açılır menü.
29
- selected_column = st.selectbox("Select column to filter by", columns)
30
-
31
- # Seçilen sütundaki benzersiz (tekrarsız) değerleri buluyoruz.
32
- unique_values = df[selected_column].unique()
33
-
34
- # Kullanıcıya hangi değere göre filtreleme yapacağını soran ikinci bir açılır menü.
35
- selected_value = st.selectbox("Select value", unique_values)
36
-
37
- # Filtrelenmiş veriyi 'filtered_df' adlı değişkene atıyoruz.
38
- filtered_df = df[df[selected_column] == selected_value]
39
-
40
- # Filtrelenmiş DataFrame'i ekrana yazdırıyoruz.
41
- st.write("Filtered Data View:")
42
- st.write(filtered_df)
43
-
44
- # --- Veri Görselleştirme Bölümü ---
45
- st.subheader("Plot Full Data")
46
-
47
- # Kullanıcıdan x ve y eksenleri için sütun seçmesini istiyoruz.
48
- # Streamlit'te aynı türden birden fazla widget olduğunda, onlara benzersiz bir 'key' vermek iyi bir pratiktir.
49
- x_column_plot = st.selectbox("Select X-axis column for plot", columns, key='x_axis_plot')
50
- y_column_plot = st.selectbox("Select Y-axis column for plot", columns, key='y_axis_plot')
51
-
52
- # "Generate Plot" butonuna basıldığında grafiği oluşturuyoruz.
53
- if st.button("Generate Plot"):
54
- st.write(f"Generating plot for {y_column_plot} vs {x_column_plot}")
55
-
56
- # --- ÇÖZÜM UYGULAMASI ---
57
- # Grafik çizerken filtrelenmiş 'filtered_df' yerine, orijinal ve tam 'df' DataFrame'ini kullanıyoruz.
58
- # Bu, verideki genel ilişkiyi görmek için anlamlı bir çizgi grafiği oluşturacaktır.
59
- st.line_chart(df.set_index(x_column_plot)[y_column_plot])
60
- else:
61
- # Dosya yüklenene kadar kullanıcıya bir mesaj gösteriyoruz.
62
- st.info("Please upload a CSV file to begin.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Bu dosyanın adının "streamlit_app.py" olduğundan emin olun.
2
+ # Hugging Face Spaces, varsayılan olarak bu isimdeki dosyayı çalıştırır.
3
+
4
+ import streamlit as st
5
+ import pandas as pd
6
+ import matplotlib.pyplot as plt
7
+
8
+ # --- Sayfa Yapılandırması (İyi Bir Pratik) ---
9
+ # st.set_page_config, sayfanın başlığı ve düzeni gibi temel ayarları yapar.
10
+ # Bu, her zaman Streamlit'in diğer komutlarından önce çağrılmalıdır.
11
+ st.set_page_config(
12
+ page_title="Interaktif Veri Paneli",
13
+ page_icon="📊",
14
+ layout="wide"
15
+ )
16
+
17
+ # --- ANA BAŞLIK ---
18
+ st.title("📊 Interaktif Veri Paneli")
19
+ st.write("Bu uygulama, yüklediğiniz bir CSV dosyasını analiz etmenizi, filtrelemenizi ve görselleştirmenizi sağlar.")
20
+
21
+ # --- Dosya Yükleme Bölümü ---
22
+ # st.file_uploader, kullanıcının kendi bilgisayarından bir dosya seçmesini sağlar.
23
+ # 'type="csv"' parametresi, sadece CSV dosyalarının seçilmesine izin verir.
24
+ uploaded_file = st.file_uploader("Lütfen analiz etmek için bir CSV dosyası seçin", type="csv")
25
+
26
+ # --- ANA KOD BLOĞU ---
27
+ # Kodun geri kalanı, sadece bir dosya başarıyla yüklendiğinde çalışır.
28
+ # Bu, 'if uploaded_file is not None:' kontrolü ile sağlanır.
29
+ if uploaded_file is not None:
30
+ try:
31
+ # CSV dosyasını bir Pandas DataFrame'e okuyoruz. Bu, veriyi yapılandırılmış bir tabloya dönüştürür.
32
+ df = pd.read_csv(uploaded_file)
33
+
34
+ # --- Veri Önizleme ve Özet ---
35
+ # Kullanıcıya yüklediği verinin neye benzediğini göstermek, iyi bir ilk adımdır.
36
+ st.subheader("Veri Önizlemesi")
37
+ st.write("Yüklediğiniz verinin ilk 5 satırı:")
38
+ st.write(df.head())
39
+
40
+ st.subheader("Veri Özeti")
41
+ st.write("Sayısal sütunlar için istatistiksel özet:")
42
+ st.write(df.describe())
43
+
44
+ # --- İnteraktif Filtreleme Bölümü ---
45
+ st.subheader('Tablo Görünümü İçin Veriyi Filtrele')
46
+
47
+ # DataFrame'deki tüm sütun adlarını bir listeye çeviriyoruz.
48
+ columns = df.columns.tolist()
49
+
50
+ # Kullanıcıya hangi sütuna göre filtreleme yapacağını soran bir açılır menü.
51
+ selected_column = st.selectbox("Filtrelemek için bir sütun seçin:", columns)
52
+
53
+ # Seçilen sütundaki benzersiz (tekrarsız) değerleri buluyoruz.
54
+ unique_values = df[selected_column].unique()
55
+
56
+ # Kullanıcıya hangi değere göre filtreleme yapacağını soran ikinci bir açılır menü.
57
+ selected_value = st.selectbox("Filtrelemek için bir değer seçin:", unique_values)
58
+
59
+ # Filtrelenmiş veriyi 'filtered_df' adlı yeni bir DataFrame'e atıyoruz.
60
+ filtered_df = df[df[selected_column] == selected_value]
61
+
62
+ # Filtrelenmiş DataFrame'i ekrana yazdırıyoruz.
63
+ st.write("Filtrelenmiş Veri Görünümü:")
64
+ st.write(filtered_df)
65
+
66
+ # --- Veri Görselleştirme Bölümü ---
67
+ st.subheader("Tüm Veriyi Görselleştir")
68
+
69
+ # Kullanıcıdan x ve y eksenleri için sütun seçmesini istiyoruz.
70
+ # Streamlit'te aynı türden birden fazla widget olduğunda, onlara benzersiz bir 'key' vermek,
71
+ # uygulamanın durumunu daha kararlı bir şekilde yönetmesine yardımcı olur.
72
+ x_column_plot = st.selectbox("Grafiğin X-ekseni için bir sütun seçin:", columns, key='x_axis_plot')
73
+ y_column_plot = st.selectbox("Grafiğin Y-ekseni için bir sütun seçin:", columns, key='y_axis_plot')
74
+
75
+ # "Generate Plot" butonuna basıldığında grafiği oluşturuyoruz.
76
+ if st.button("Grafik Oluştur"):
77
+ st.write(f"'{y_column_plot}' ve '{x_column_plot}' arasındaki ilişki grafiği oluşturuluyor...")
78
+
79
+ # Grafik çizerken filtrelenmiş 'filtered_df' yerine, orijinal ve tam 'df' DataFrame'ini kullanıyoruz.
80
+ # Bu, verideki genel ilişkiyi görmek için anlamlı bir çizgi grafiği oluşturacaktır.
81
+ # set_index, x eksenini doğru bir şekilde ayarlamamızı sağlar.
82
+ st.line_chart(df.set_index(x_column_plot)[y_column_plot])
83
+
84
+ except Exception as e:
85
+ # Dosya okunurken veya işlenirken bir hata olursa, kullanıcıya anlaşılır bir mesaj gösterir.
86
+ st.error(f"Dosya işlenirken bir hata oluştu: {e}")
87
+ st.warning("Lütfen geçerli bir formatta CSV dosyası yüklediğinizden emin olun.")
88
+
89
+ else:
90
+ # Dosya yüklenene kadar kullanıcıya bir mesaj gösteriyoruz.
91
+ st.info("Başlamak için lütfen yukarıdan bir CSV dosyası yükleyin.")