import streamlit as st import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import load_breast_cancer def run_eda(): st.title("๐Ÿ“Š Exploratory Data Analysis (EDA) - Breast Cancer Dataset") # Load dataset data = load_breast_cancer() df = pd.DataFrame(data.data, columns=data.feature_names) df["target"] = data.target # --- Intro untuk orang awam --- st.markdown( "Dataset ini berasal dari **Breast Cancer Diagnostic Dataset**, " "yang berisi hasil pengukuran sel kanker payudara dari pasien. " "Tujuannya adalah **membedakan tumor ganas (malignant)** dan " "**jinak (benign)** berdasarkan karakteristik fisik sel, seperti " "ukuran, tekstur, dan bentuknya." ) # --- Dataset overview --- st.markdown("### ๐Ÿงพ Dataset Overview") st.write("Berikut adalah contoh 5 baris pertama dari dataset:") st.dataframe(df.head()) # --- Data summary --- st.markdown("### ๐Ÿ“ˆ Statistik Data") st.write( "Tabel di bawah menunjukkan statistik deskriptif dari setiap fitur โ€” " "misalnya rata-rata, standar deviasi, nilai minimum dan maksimum." ) st.dataframe(df.describe()) # --- Target distribution --- st.markdown("### โš–๏ธ Distribusi Target") fig, ax = plt.subplots() sns.countplot(x="target", data=df, palette="Set2", ax=ax) ax.set_xticklabels(["Malignant (0) - Ganas", "Benign (1) - Jinak"]) ax.set_title("Distribusi Kelas Pasien") st.pyplot(fig) st.markdown( "Terlihat bahwa **jumlah pasien dengan tumor jinak lebih banyak** " "dibanding yang ganas. Ini wajar dalam data medis karena kasus jinak " "biasanya lebih umum ditemukan." ) # --- Correlation heatmap --- st.markdown("### ๐Ÿ”ฅ Korelasi Antar Fitur") fig, ax = plt.subplots(figsize=(10, 8)) sns.heatmap(df.corr(), cmap="coolwarm", center=0, ax=ax) ax.set_title("Heatmap Korelasi Antar Fitur") st.pyplot(fig) st.markdown( "Warna merah menunjukkan korelasi positif (fitur naik bersama), " "sedangkan biru menunjukkan korelasi negatif. " "Misalnya, *mean radius* dan *mean perimeter* memiliki korelasi " "sangat tinggi, yang berarti keduanya berhubungan erat." ) # --- Feature example --- st.markdown("### ๐Ÿ” Contoh Distribusi Salah Satu Fitur") fig, ax = plt.subplots() sns.histplot(df["mean radius"], kde=True, color="skyblue", ax=ax) ax.set_title("Distribusi Fitur 'Mean Radius'") st.pyplot(fig) st.markdown( "Fitur `mean radius` menunjukkan ukuran rata-rata sel. " "Semakin besar radiusnya, biasanya semakin berpotensi sebagai " "tumor ganas." ) # --- Closing summary --- st.markdown( "---\n" "๐Ÿ’ก **Kesimpulan Singkat:**\n" "- Dataset ini memiliki total **569 sampel pasien**.\n" "- Sebagian besar pasien memiliki **tumor jinak**.\n" "- Beberapa fitur saling berkorelasi tinggi (misalnya ukuran dan " "perimeter sel).\n" "- Analisis ini membantu kita memahami pola sebelum melatih model " "Machine Learning." )