Spaces:
Sleeping
Sleeping
File size: 4,411 Bytes
b9ec92e 3ae8ddc b8c39a1 808ed53 9858ca0 808ed53 3ae8ddc 9858ca0 b8c39a1 9858ca0 3ae8ddc 9858ca0 b8c39a1 808ed53 3ae8ddc 9858ca0 b8c39a1 3ae8ddc b8c39a1 9858ca0 891d935 9858ca0 c12c58a 9858ca0 b8c39a1 3ae8ddc 9858ca0 891d935 b8c39a1 3ae8ddc 9858ca0 3ae8ddc 9858ca0 b8c39a1 3ae8ddc 9858ca0 3ae8ddc 9858ca0 3ae8ddc 9858ca0 3ae8ddc 9858ca0 3ae8ddc 9858ca0 3ae8ddc 9858ca0 3ae8ddc 9858ca0 b8c39a1 9858ca0 b9ec92e 9858ca0 3ae8ddc 9858ca0 808ed53 9858ca0 3ae8ddc 9858ca0 3ae8ddc 9858ca0 891d935 3ae8ddc 9858ca0 | 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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | import streamlit as st
import pandas as pd
import joblib
import os
import warnings
# Gereksiz uyarıları kapat / Silence warnings
warnings.filterwarnings('ignore')
# 1️⃣ Sayfa Ayarları / Page Configuration
st.set_page_config(page_title="Spotify Analysis Pro", layout="wide")
# 2️⃣ Veri ve Model Yükleme / Load Data & Models
@st.cache_data
def load_data():
if not os.path.exists("spotify_clustered.csv"): return None
return pd.read_csv("spotify_clustered.csv")
@st.cache_resource
def load_models():
try:
model = joblib.load("kmeans_music_model.pkl")
scaler = joblib.load("scaler_music.pkl")
return model, scaler
except: return None, None
df = load_data()
model, scaler = load_models()
# 3️⃣ Sol Panel (Sidebar) - YÖNETİCİ NOTLARI / EXECUTIVE NOTES
with st.sidebar:
st.title("📂 Analiz Notları / Analysis Notes")
st.success("✅ System: Active / Sistem: Aktif")
st.markdown("""
### 📊 Stratejik Özet / Strategic Summary
*TR:* Bu sistem, şarkıları karakteristik benzerliklerine göre **2 ana gruba** ayırmıştır.
*EN:* This system has categorized songs into **2 main groups** based on their characteristics.
### 🔍 Küme Yorumları / Cluster Interpretation
* **Cluster 0 (Sakin/Quiet):** - *TR:* Düşük enerji, odaklanma müzikleri.
- *EN:* Low energy, focus/chill music.
* **Cluster 1 (Dinamik/Dynamic):** - *TR:* Yüksek enerji, ritmik ve popüler.
- *EN:* High energy, rhythmic and popular.
### 📈 Teknik Onay / Technical Validation
*TR:* Silhouette skoru pozitiftir; ayrım tutarlıdır.
*EN:* Silhouette score is positive; separation is consistent.
""")
st.divider()
st.caption("Spotify Segmentation Project v2.0")
# 4️⃣ Ana Başlık / Main Title
st.title("🎵 Spotify Müzik Kümeleme Analizi | Spotify Music Clustering Analysis")
st.write("Veri madenciliği ile şarkı segmentasyonu / Song segmentation with data mining.")
st.write("---")
if df is not None:
# 📄 Veri Önizleme / Preview
st.subheader("📄 Veri Önizleme / Dataset Preview")
st.dataframe(df.head(5), use_container_width=True)
# 5️⃣ Görselleştirmeler / Visualizations
col1, col2 = st.columns(2)
with col1:
st.subheader("📊 Küme Dağılımı / Cluster Distribution")
st.bar_chart(df['cluster'].value_counts())
with col2:
st.subheader("🎯 Enerji vs Dans / Energy vs Danceability")
st.scatter_chart(df.sample(min(1000, len(df))), x='danceability', y='energy', color='cluster')
# 6️⃣ Tahmin Bölümü / Prediction Section
st.divider()
st.subheader("🤖 Yeni Şarkı Analizi / New Song Analysis")
with st.form("prediction_form"):
st.info("Özellikleri girin / Enter song features.")
c1, c2, c3 = st.columns(3)
with c1:
pop = st.slider("Popularity / Popülerlik", 0, 100, 50)
dur = st.number_input("Duration / Süre (ms)", value=200000)
with c2:
dance = st.slider("Danceability / Dans Edilebilirlik", 0.0, 1.0, 0.5)
energy = st.slider("Energy / Enerji", 0.0, 1.0, 0.5)
with c3:
loud = st.slider("Loudness / Ses (dB)", -60.0, 0.0, -10.0)
tempo = st.slider("Tempo (BPM)", 0.0, 250.0, 120.0)
submit = st.form_submit_button("Analiz Et / Analyze ✨")
if submit and model and scaler:
try:
# Model expects 6 features
input_data = [[pop, dur, dance, energy, loud, tempo]]
res = model.predict(scaler.transform(input_data))[0]
# İSTEDİĞİN ÖZEL NOT KISMI BURASI:
if res == 0:
note = "0 - SAKİN / QUIET MUSIC ☕"
else:
note = "1 - DİNAMİK / DYNAMIC MUSIC 🔥"
st.success(f"### Sonuç / Result: {note}")
st.balloons()
except Exception as e:
st.error(f"Error / Hata: {e}")
# 7️⃣ Ortalama Değerler / Means
st.divider()
st.subheader("🔍 Küme Karakteristikleri / Cluster Characteristics")
num_cols = df.select_dtypes(include=['number']).columns.tolist()
if 'cluster' in df.columns:
st.dataframe(df.groupby('cluster')[num_cols].mean(), use_container_width=True)
else:
st.error("Missing files! / Dosyalar eksik!") |