GSLC-MLOps / src /eda.py
github-actions
Deploy from GitHub Actions: db9afe53f87b99e92ae5adeb7edd6c80056f6b7d
5a60c07
Raw
History Blame Contribute Delete
3.2 kB
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."
)