90 lines
3.9 KiB
Python
90 lines
3.9 KiB
Python
import pandas as pd
|
|
|
|
# Fungsi konversi dari import_data.py (yang sudah diperbaiki)
|
|
JAWABAN_MAPPING = {
|
|
'F8': {1: 'Bekerja (full time/part time)', 2: 'Belum memungkinkan bekerja', 3: 'Wiraswasta', 4: 'Melanjutkan Pendidikan', 5: 'Tidak kerja tetapi sedang mencari kerja'},
|
|
'F1601': {0: 'Tidak sesuai', 1: 'Pekerjaan saya sekarang sudah sesuai dengan pendidikan saya'},
|
|
'F1602': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya belum mendapatkan pekerjaan yang lebih sesuai'},
|
|
'F1603': {0: 'Pekerjaan saya sudah sesuai', 1: 'Di pekerjaan ini saya memeroleh prospek karir yang baik'},
|
|
'F1604': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya lebih suka bekerja di area pekerjaan yang tidak ada hubungannya dengan pendidikan saya'},
|
|
'F1605': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya dipromosikan ke posisi yang kurang berhubungan dengan pendidikan saya dibanding posisi sebelumnya'},
|
|
'F1606': {0: 'Pekerjaan saya sudah sesuai', 1: 'Saya dapat memeroleh pendapatan yang lebih tinggi di pekerjaan ini'},
|
|
'F1607': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lebih aman/terjamin/secure'},
|
|
'F1608': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lebih menarik'},
|
|
'F1609': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lebih memungkinkan saya mengambil pekerjaan'},
|
|
'F1610': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini lokasinya lebih dekat dari rumah saya'},
|
|
'F1611': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pekerjaan saya saat ini dapat lebih menjamin kebutuhan keluarga saya'},
|
|
'F1612': {0: 'Pekerjaan saya sudah sesuai', 1: 'Pada awal meniti karir ini, saya harus menerima pekerjaan yang tidak berhubungan dengan pendidikan saya'},
|
|
'F1613': {0: 'Pekerjaan saya sudah sesuai', 1: 'Lainnya'},
|
|
}
|
|
|
|
YA_TIDAK = {0: 'Tidak', 1: 'Ya'}
|
|
|
|
def konversi_jawaban(field_code, nilai):
|
|
if pd.isna(nilai) or nilai == '':
|
|
return None
|
|
if isinstance(nilai, str) and nilai.strip() in ['', 'nan', 'None']:
|
|
return None
|
|
|
|
original_nilai = nilai
|
|
if isinstance(nilai, str):
|
|
try:
|
|
nilai = int(nilai)
|
|
except ValueError:
|
|
pass
|
|
|
|
if isinstance(nilai, float):
|
|
if nilai != int(nilai):
|
|
return None
|
|
nilai = int(nilai)
|
|
|
|
nilai_key = int(nilai) if isinstance(nilai, (int, float)) else nilai
|
|
|
|
# F1601-F1613 gunakan JAWABAN_MAPPING
|
|
if field_code in ['F1601', 'F1602', 'F1603', 'F1604', 'F1605', 'F1606',
|
|
'F1607', 'F1608', 'F1609', 'F1610', 'F1611', 'F1612', 'F1613']:
|
|
if field_code in JAWABAN_MAPPING:
|
|
return JAWABAN_MAPPING[field_code].get(nilai_key)
|
|
return YA_TIDAK.get(nilai_key)
|
|
|
|
if isinstance(original_nilai, (int, float)):
|
|
return original_nilai
|
|
return original_nilai
|
|
|
|
# TEST
|
|
print("=" * 70)
|
|
print("TEST F1601-F1613 (TEKS LENGKAP)")
|
|
print("=" * 70)
|
|
|
|
test_cases = [
|
|
('F1601', 0, 'Tidak sesuai'),
|
|
('F1601', 1, 'Pekerjaan saya sekarang sudah sesuai'),
|
|
('F1602', 0, 'Pekerjaan saya sudah sesuai'),
|
|
('F1602', 1, 'Saya belum mendapatkan pekerjaan yang lebih sesuai'),
|
|
('F1603', 0, 'Pekerjaan saya sudah sesuai'),
|
|
('F1603', 1, 'Di pekerjaan ini saya memeroleh prospek karir yang baik'),
|
|
('F1604', 0, 'Pekerjaan saya sudah sesuai'),
|
|
('F1604', 1, 'Saya lebih suka bekerja di area pekerjaan yang tidak ada hubungannya'),
|
|
('F1613', 0, 'Pekerjaan saya sudah sesuai'),
|
|
('F1613', 1, 'Lainnya'),
|
|
]
|
|
|
|
all_passed = True
|
|
for field_code, nilai, expected_text in test_cases:
|
|
result = konversi_jawaban(field_code, nilai)
|
|
expected = expected_text.split('...')[0] # Ambil partial match
|
|
is_correct = result and expected.lower() in result.lower()
|
|
status = '[OK]' if is_correct else '[FAIL]'
|
|
if not is_correct:
|
|
all_passed = False
|
|
print(f"{status} {field_code}={nilai}")
|
|
print(f" Result: {result}")
|
|
print()
|
|
|
|
print("=" * 70)
|
|
if all_passed:
|
|
print("SEMUA TEST LULUS!")
|
|
else:
|
|
print("ADA TEST YANG GAGAL!")
|
|
print("=" * 70)
|