Simple-Data-Dashboard / src /streamlit_app.py
SezinDartar's picture
Update src/streamlit_app.py
40e83b9 verified
# 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.")