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