TIF_E41253310/Backend/Model/preprocessing/README.md

271 lines
6.7 KiB
Markdown

# 📋 Modul Preprocessing
## Overview
Modul ini berisi pipeline untuk **menyiapkan data tracer study alumni** dari berbagai tahun (2019-2025) agar siap diproses oleh model Machine Learning.
---
## 🎯 Tujuan
1. **Standarisasi Kolom** - Menyamakan kolom berbeda dari berbagai tahun
2. **Menggabungkan Data** - Gabungkan data dari semua tahun jadi satu
3. **Data Cleaning** - Hapus duplikat dan data kosong
4. **Text Preprocessing** - Bersihkan teks untuk TF-IDF
---
## 📁 Struktur File
```
preprocessing/
├── __init__.py # Export modul
├── column_mapping.json # Konfigurasi mapping kolom
├── standarisasi_kolom.py # Fungsi standarisasi
├── text_preprocessing.py # Fungsi preprocessing teks
└── data_pipeline.py # Pipeline lengkap
```
---
## 🔧 Komponen
### 1. KolomStandarisasi
**Fungsi:** Mengubah kolom Excel yang berbeda-beda menjadi kolom STANDAR.
**Kolom Standar:**
| Kolom | Deskripsi |
|-------|-----------|
| `nama` | Nama lengkap alumni |
| `perusahaan` | Nama perusahaan/instansi |
| `jabatan` | Jabatan/posisi |
| `nim` | Nomor Induk Mahasiswa |
**Contoh Penggunaan:**
```python
from preprocessing import KolomStandarisasi
import pandas as pd
# Inisialisasi
std = KolomStandarisasi()
# Baca Excel
df = pd.read_excel("data_2024.xlsx")
# Standarisasi
df_standar = std.standarisasi(df, tahun="2024")
print(df_standar.columns.tolist())
# Output: ['nama', 'perusahaan', 'jabatan', 'nim']
```
---
### 2. DataPipeline
**Fungsi:** Pipeline lengkap dari import sampai siap ML.
**Alur Kerja:**
```
┌────────────────────────────────────────┐
│ STEP 1: Standarisasi Kolom │
│ - Ubah kolom berbeda → kolom standar │
└────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────┐
│ STEP 2: Gabung Data │
│ - Gabungkan data dari semua tahun │
└────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────┐
│ STEP 3: Data Cleaning │
│ - Hapus duplikat │
│ - Hapus data kosong │
└────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────┐
│ STEP 4: Text Preprocessing │
│ - Case folding │
│ - Tokenizing │
│ - Stopword removal │
│ - Stemming │
└────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────┐
│ OUTPUT: Data siap untuk TF-IDF │
└────────────────────────────────────────┘
```
**Contoh Penggunaan:**
```python
from preprocessing import DataPipeline
import pandas as pd
# Inisialisasi
pipeline = DataPipeline()
# Tambah data dari berbagai tahun
pipeline.tambah_data(df_2019, "2019")
pipeline.tambah_data(df_2024, "2024")
# Jalankan pipeline
result = pipeline.jalankan()
print(result.head())
# Output: DataFrame dengan kolom ['nama', 'perusahaan', 'jabatan', 'nim', 'tahun', 'teks_bersih']
```
---
### 3. preprocess_text
**Fungsi:** Membersihkan teks agar siap untuk TF-IDF.
**Proses:**
| Step | Input | Output |
|------|-------|--------|
| Case Folding | "Software Engineer" | "software engineer" |
| Tokenizing | "software engineer" | ["software", "engineer"] |
| Remove Special Chars | ["3", "-", "staff"] | ["staff"] |
| Remove Stopwords | ["di", "google"] | ["google"] |
| Stemming | ["bekerja", "pekerjaan"] | ["kerja", "kerja"] |
**Contoh Penggunaan:**
```python
from preprocessing import preprocess_text
# Input teks mentah
teks = "Google Indonesia 3 - Staff"
# Preprocess
hasil = preprocess_text(teks)
print(hasil)
# Output: "google indonesia staff"
```
---
## 📊 Column Mapping
File `column_mapping.json` berisi mapping dari setiap tahun:
```json
{
"2019": {
"nama": "Nama Lengkap",
"perusahaan": "Perusahaan",
"jabatan": "Jabatan",
"nim": "NIM"
},
"2024": {
"nama": "4. Nama Lengkap / nmmhsmsmh...",
"perusahaan": "9. Apa nama perusahaan...",
"jabatan": "10. Bila Anda berwiraswasta...",
"nim": "3. NIM / nimhsmsmh..."
}
}
```
### ⚠️ Yang Perlu Diisi
Buka setiap file Excel dan catat nama kolom untuk:
| Tahun | Status |
|-------|--------|
| 2019 | ❌ Perlu diisi |
| 2020 | ❌ Perlu diisi |
| 2021 | ❌ Perlu diisi |
| 2022 | ❌ Perlu diisi |
| 2023 | ❌ Perlu diisi |
| 2024 | ✅ Sudah diisi |
| 2025 | ❌ Perlu diisi |
---
## 🚀 Quick Start
### 1. Siapkan Mapping Kolom
```bash
# Buka Excel 2019-2025
# Catat nama kolom untuk: nama, perusahaan, jabatan, nim
# Update column_mapping.json
```
### 2. Jalankan Pipeline
```python
from preprocessing import DataPipeline
# Inisialisasi
pipeline = DataPipeline()
# Tambah data
for tahun in ["2019", "2020", "2021", "2022", "2023", "2024", "2025"]:
df = pd.read_excel(f"data_{tahun}.xlsx")
pipeline.tambah_data(df, tahun)
# Jalankan
result = pipeline.jalankan()
# Simpan hasil
result.to_csv("data_bersih.csv", index=False)
```
---
## 📝 Testing
Jalankan file untuk test:
```bash
cd Model
python preprocessing/standarisasi_kolom.py
python preprocessing/text_preprocessing.py
python preprocessing/data_pipeline.py
```
---
## 🔍 Debugging
### Jika tahun tidak terdeteksi:
```python
# Deteksi manual
std = KolomStandarisasi()
tahun = std.deteksi_tahun(df, nama_file="data_2024.xlsx")
print(f"Tahun: {tahun}")
```
### Jika kolom tidak cocok:
```python
# Lihat mapping yang tersedia
std = KolomStandarisasi()
mapping = std.get_mapping_tahun("2024")
print(mapping)
# Lihat kolom di DataFrame
print(df.columns.tolist())
```
---
## 📚 Referensi
- **NLTK:** https://www.nltk.org/
- **Sastrawi:** https://github.com/har07/PySastrawi
- **Pandas:** https://pandas.pydata.org/