# Analisis Sentimen Program MBG (Makan Bergizi Gratis)

Dashboard analisis sentimen berbahasa Indonesia untuk menganalisis opini publik terhadap Program Makan Bergizi Gratis (MBG) menggunakan Support Vector Machine (SVM) kernel Radial Basis Function (RBF) dan pembobotan TF-IDF.

## Deskripsi

Aplikasi web berbasis Streamlit untuk melakukan analisis sentimen terhadap teks berbahasa Indonesia, khususnya terkait Program MBG. Aplikasi ini menggunakan algoritma Support Vector Machine (SVM) dengan preprocessing teks yang komprehensif.

## Fitur Utama

### 1. Dashboard Utama
- Visualisasi distribusi sentimen (pie chart)
- Word cloud untuk sentimen positif dan negatif
- Top 15 kata teratas per sentimen
- Tampilan dataset training lengkap dengan text wrapping

### 2. Prediksi Sentimen
- Input teks manual untuk prediksi real-time
- Menampilkan confidence score
- Demo preprocessing step-by-step

### 3. Analisis CSV Batch
- Upload file CSV untuk analisis massal
- Deteksi otomatis kolom tanggal
- Visualisasi temporal (distribusi per tahun dan bulan)
- Filter berdasarkan confidence threshold
- Export hasil ke CSV
- Interpretasi dan rekomendasi otomatis

### 4. Demo Preprocessing
- Visualisasi tahapan preprocessing:
  - Text Cleaning
  - Case Folding
  - Tokenization
  - Normalization
  - Stopwords Removal
  - Stemming

## Instalasi

### Prasyarat
- Python 3.8 atau lebih tinggi
- pip (Python package manager)

### Langkah Instalasi

1. Clone repository:
```bash
git clone https://github.com/nand999/analisis-sentimen-mbg.git
cd analisis-sentimen-mbg
```

2. Install dependencies:
```bash
pip install -r requirements.txt
```

3. Download NLTK data (jika belum ada):
```python
python -c "import nltk; nltk.download('punkt')"
```

## Struktur File

```
analisis-sentimen-mbg/
├── dashboard.py              # Aplikasi Streamlit utama
├── sentiment_model.py        # Model SVM dan preprocessing
├── sentiment_model.pkl       # Model terlatih
├── kolom_lengkap.csv        # Dataset training
├── requirements.txt          # Dependencies Python
├── generate_test_data.py     # Untuk generate data test csv
├── README.md                # Dokumentasi ini
```

## Cara Penggunaan

### Menjalankan Dashboard

```bash
streamlit run dashboard.py
```

Dashboard akan terbuka di browser pada `http://localhost:8501`

### Menggunakan Fitur Prediksi

1. Pilih menu **"Prediksi Sentimen"**
2. Masukkan teks dalam bahasa Indonesia
3. Klik **"Prediksi Sentimen"**
4. Lihat hasil prediksi dan confidence score

### Analisis CSV Batch

1. Pilih menu **"📁 Analisis CSV"**
2. Upload file CSV dengan kolom `text` atau `full_text`
3. Atur confidence threshold (default: 0.5)
4. Klik **"🚀 Proses Prediksi Sentimen"**
5. Lihat hasil analisis dan visualisasi
6. Download hasil jika diperlukan

### Format CSV untuk Upload

File CSV harus memiliki minimal kolom berikut:
- `text` atau `full_text`: Kolom berisi teks untuk dianalisis

Opsional:
- `created_at` atau kolom tanggal lainnya untuk analisis temporal

Contoh:
```csv
text,created_at
"Program MBG sangat membantu anak-anak",2025-07-06 10:30:00
"MBG tidak efektif dan boros anggaran",2025-07-07 14:20:00
```

## Preprocessing Pipeline

1. **Text Cleaning**: Menghapus URL, mention, hashtag, angka, dan karakter khusus
2. **Case Folding**: Mengubah semua teks menjadi lowercase
3. **Tokenization**: Memecah teks menjadi token/kata
4. **Normalization**: Menormalkan kata-kata tidak baku
5. **Stopwords Removal**: Menghapus kata-kata umum yang tidak bermakna
6. **Stemming**: Mengubah kata ke bentuk dasarnya menggunakan Sastrawi

## Model

- **Algoritma**: Support Vector Machine (SVM) dengan kernel Radial Basis Function (RBF)
- **Features**: TF-IDF Vectorization
- **Dataset**: 1,906 data tweet tentang Program MBG
  - Positif: 793 data
  - Negatif: 1,113 data

## Dependencies

- streamlit >= 1.28.0
- pandas >= 2.0.0
- numpy >= 1.24.0
- scikit-learn >= 1.3.0
- nltk >= 3.8.0
- Sastrawi >= 1.0.1
- plotly >= 5.17.0
- wordcloud >= 1.9.0
- matplotlib >= 3.7.0
- python-dateutil >= 2.8.0

Lihat `requirements.txt` untuk daftar lengkap.

## Catatan Penting

### Confidence Threshold
- Data dengan confidence score di bawah threshold tidak dimasukkan dalam analisis utama
- Default threshold: 0.5 (50%)
- Dapat disesuaikan melalui slider di halaman Analisis CSV

## Lisensi

[MIT License](LICENSE)


## Acknowledgments

- Dataset: Twitter/X data tentang Program MBG
- Sastrawi: Indonesian stemmer library
- NLTK: Natural Language Toolkit
- Streamlit: Framework untuk web app

---
