Pipeline big data untuk clustering kasus penyakit di Sumatera Utara menggunakan Apache Spark dan PostgreSQL. Proyek ini mengimplementasikan end-to-end batch processing pipeline untuk analisis dan visualisasi pola penyakit di kabupaten/kota di Sumatera Utara.
Mengembangkan sistem batch processing pipeline untuk:
- 📊 Mengelompokkan kabupaten/kota berdasarkan kemiripan pola penyakit dengan KMeans
- 🎯 Mengidentifikasi wilayah dengan beban penyakit tinggi
- 📈 Memberikan insights untuk alokasi sumber daya kesehatan
- 🗺️ Menyediakan data untuk visualisasi di Tableau
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Data Source │───▶│ Apache Spark │───▶│ PostgreSQL │
│ Penyakit_Sumut │ │ ETL Pipeline │ │ Data Warehouse │
│ .csv │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Spark MLlib │ │ Visualization │
│ KMeans Clustering│ │ Jupyter/Tableau │
└─────────────────┘ └─────────────────┘
Sumber: Dinas Kesehatan Sumatera Utara (2024) Coverage: 34 Kabupaten/Kota di Sumatera Utara
- 🦠 AIDS (Kasus Baru & Kumulatif)
- 🔴 DBD (Demam Berdarah Dengue)
- 💧 Diare
- 🫁 TB Paru (Tuberkulosis)
- 👶 Pneumonia Balita
- 🤒 Campak (Suspek)
- 🦟 Malaria (Suspek)
- 🤲 Kusta
- 🧬 HIV (Kasus Baru & Kumulatif)
- 💉 Tetanus
- Docker dan Docker Compose
- Minimum 8GB RAM
- 10GB free disk space
git clone <repository>
cd ABD
Letakkan file Penyakit_Sumut.csv
di folder data/
:
data/
└── Penyakit_Sumut.csv
# Start semua services
docker-compose up -d
# Tunggu services ready, lalu jalankan pipeline
docker-compose exec spark-master bash /scripts/run_pipeline.sh
- 📓 Jupyter Notebook: http://localhost:8888 (token:
penyakit123
) - 🗄️ pgAdmin: http://localhost:5050 (admin@admin.com / admin123)
- 📈 Spark UI: http://localhost:8080
project_root/
├── 🐳 docker-compose.yml # Orchestration services
├── 📊 data/
│ ├── Penyakit_Sumut.csv # Source data
│ ├── output/ # Hasil clustering & visualisasi
│ └── parquet/ # Intermediate data storage
├── 🔧 scripts/
│ ├── ingest_data.sh # Data ingestion
│ ├── etl_transform.sh # Data transformation
│ ├── run_clustering.sh # ML clustering
│ ├── export_results.sh # Export untuk visualisasi
│ └── run_pipeline.sh # Master pipeline script
├── 💻 src/
│ ├── ingest_data.py # PySpark data ingestion
│ ├── etl_transform.py # PySpark transformations
│ ├── run_clustering.py # Spark MLlib clustering
│ └── export_results.py # Results export
├── 📓 notebooks/
│ └── exploratory_analysis.ipynb # Jupyter analysis
├── 🗄️ sql/
│ └── schema_postgres.sql # Database schema
└── 📖 README.md
- Membaca CSV menggunakan PySpark
- Validasi dan cleaning data
- Insert data kabupaten ke PostgreSQL
- Save ke Parquet format
- Handle missing values
- Data normalization (opsional)
- Save processed data ke PostgreSQL
- Prepare features untuk clustering
- Feature engineering dengan VectorAssembler
- Standardization dengan StandardScaler
- KMeans clustering (K=4)
- Model evaluation dengan Silhouette Score
- Save results ke PostgreSQL
- Generate summary statistics
- Export ke CSV untuk Tableau
- Create comprehensive reports
- Generate basic visualizations
- Cluster 0: Wilayah dengan beban penyakit rendah
- Cluster 1: Wilayah dengan fokus penyakit menular
- Cluster 2: Wilayah dengan beban penyakit sedang
- Cluster 3: Wilayah dengan beban penyakit tinggi
data/output/
├── 📊 tableau_export.csv # Ready untuk Tableau
├── 📈 cluster_summary_stats.csv # Statistik per cluster
├── 📋 clustering_summary_report.txt # Laporan komprehensif
├── 💾 clustering_results_detailed.csv # Detail hasil clustering
└── 📊 analysis_summary.json # Summary untuk API
- Interactive analysis dengan Plotly
- Statistical summaries
- Cluster characteristics analysis
- Heatmaps dan scatter plots
Gunakan tableau_export.csv
untuk membuat:
- 🗺️ Choropleth maps wilayah clusters
- 📊 Bar charts disease burden
- 📈 Time series analysis (jika ada data temporal)
- 🎯 Interactive filters per penyakit
Component | Technology | Purpose |
---|---|---|
Orchestration | Docker Compose | Service management |
Big Data Processing | Apache Spark 3.4 | ETL & ML pipeline |
Machine Learning | Spark MLlib | KMeans clustering |
Data Warehouse | PostgreSQL 15 | Structured data storage |
Analytics | Jupyter Lab | Interactive analysis |
Visualization | Tableau/Plotly | Dashboard & charts |
Admin | pgAdmin 4 | Database management |
# Database
POSTGRES_HOST=postgres
POSTGRES_DB=penyakit_db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password123
# Spark
SPARK_MASTER_URL=spark://spark-master:7077
# Jupyter
JUPYTER_TOKEN=penyakit123
- Driver Memory: 1GB
- Executor Memory: 1GB
- Total Executor Cores: 2
SELECT kabupaten, cluster_id FROM hasil_klaster;
SELECT kabupaten, dbd, diare, tb_paru, aids_kasus_baru
FROM data_pivot ORDER BY cluster_id;
- Silhouette Score: Model evaluation metric
- WSSSE: Within Set Sum of Squared Errors
- Cluster Distribution: Jumlah kabupaten per cluster
- ✅ No missing kabupaten names
- ✅ Numeric values validation
- ✅ Outlier detection
- ✅ Cluster balance check
- ✅ Silhouette Score > 0.3
- ✅ Reasonable cluster sizes
- ✅ Geographic distribution makes sense
- Scaling: Increase Spark executors untuk dataset besar
- Security: Ganti default passwords
- Monitoring: Add logging & alerting
- Backup: Regular PostgreSQL backup strategy
# Minimum requirements
spark-master:
mem_limit: 2g
spark-worker:
mem_limit: 2g
postgres:
mem_limit: 1g
Service tidak start
# Check logs
docker-compose logs [service-name]
# Restart services
docker-compose restart
Pipeline gagal
# Check individual scripts
docker-compose exec spark-master bash /scripts/ingest_data.sh
Data tidak muncul
# Check PostgreSQL connection
docker-compose exec postgres psql -U postgres -d penyakit_db -c "\dt"
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature
) - Commit changes (
git commit -m 'Add amazing feature'
) - Push to branch (
git push origin feature/amazing-feature
) - Open Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Kelompok 9 ABD - Institut Teknologi Sumatera Rahma Neliyana - 122450036 Uliano Wilyam Purba - 122450098 Jihan Putri Yani - 121450161 Rendra Eka Prayoga - 122450112
🎯 Untuk memulai analisis clustering penyakit Sumatera Utara, jalankan pipeline dan akses Jupyter Notebook untuk eksplorasi data yang komprehensif!