271 lines
6.7 KiB
Markdown
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/
|