TIF_E41253310/archive/debug_tracer_import2.py

180 lines
5.8 KiB
Python

"""
Debug script untuk simulasi import tracer_responses (standalone)
"""
import pandas as pd
import json
# Baca CSV
df = pd.read_csv(r'c:\Users\syifa\TA-PROJEK\Data_Tracerstudy\Data_2019_Tracer_study.csv', sep=';', encoding='utf-8-sig')
source_cols = list(df.columns)
# YEAR_CONFIG
YEAR_CONFIG = {
'2019': {
'skip_jumlah_perusahaan': True,
'has_email': True,
'email_col': 'Email',
'nama_col': 'Nama',
'tahun_col': 'Tahun Lulus',
},
}
# Base mapping
tracer_mapping = {
'email': ['emailmsmh', 'Email', '6. Alamat Email / emailmsmh'],
'kode_pt': ['kdptimsmh', 'Kode PT', '1. Kode Perguruan Tinggi / kdptimsmh'],
'nik': ['NIK'],
'npwp': ['NPWP'],
'telepon': ['Telepon', 'No. Telepon'],
'status_saat_ini': ['F8', 'f8'],
'bulan_dapat_kerja': ['F502', 'f502'],
'dapet_kerja_6_bulan': ['F504', 'f504'],
'rata_pendapatan': ['F505', 'f505'],
'bulan_dapat_kerja_setelah': ['F506', 'f506'],
'provinsi_kerja': ['F5a1', 'f5a1'],
'kab_kota_kerja': ['F5a2', 'f5a2'],
'jenis_perusahaan_full': ['F1101', 'f1101'],
'jumlah_perusahaan': ['F1102', 'f1102'],
'nama_perusahaan': ['F5b', 'f5b'],
'jabatan': ['F5c', 'f5c'],
'tingkatan_tempat_kerja': ['F5d', 'f5d'],
# ... fields truncated for brevity
}
# Apply year-specific overrides
tahun = '2019'
year_config = YEAR_CONFIG.get(tahun, {})
if year_config.get('skip_jumlah_perusahaan', False):
if 'jumlah_perusahaan' in tracer_mapping:
del tracer_mapping['jumlah_perusahaan']
print('[DEBUG] jumlah_perusahaan dihapus dari mapping (2019)')
def normalize(col_name):
if pd.isna(col_name):
return ""
return str(col_name).strip().lower()
def find_column(source_cols, possible_names):
source_cols_lower = {normalize(c): c for c in source_cols}
for name in possible_names:
if normalize(name) in source_cols_lower:
return source_cols_lower[normalize(name)]
return None
JAWABAN_MAPPING = {}
KOMPETENSI_LEVEL = {
1: 'Sangat Rendah', 2: 'Rendah', 3: 'Netral', 4: 'Tinggi', 5: 'Sangat Tinggi'
}
METODE_LEVEL = {
1: 'Sangat Besar', 2: 'Besar', 3: 'Cukup Besar', 4: 'Kurang', 5: 'Tidak Sama Sekali'
}
YA_TIDAK = {0: 'Tidak', 1: 'Ya'}
def konversi_jawaban(field_code, nilai):
if pd.isna(nilai) or nilai == 0 or nilai == '':
return None
if isinstance(nilai, float):
if nilai != int(nilai):
return None
nilai = int(nilai)
nilai_key = int(nilai) if isinstance(nilai, (int, float)) else nilai
if field_code in ['F1761', 'F1762', 'F1763', 'F1764', 'F1765', 'F1766',
'F1767', 'F1768', 'F1769', 'F1770', 'F1771', 'F1772',
'F1773', 'F1774']:
return KOMPETENSI_LEVEL.get(nilai_key)
if field_code in ['F21', 'F22', 'F23', 'F24', 'F25', 'F26', 'F27']:
return METODE_LEVEL.get(nilai_key)
if field_code in ['F401', 'F402', 'F403', 'F404', 'F405', 'F406', 'F407',
'F408', 'F409', 'F410', 'F411', 'F412', 'F413', 'F414',
'F415', 'F416']:
return YA_TIDAK.get(nilai_key)
if field_code in ['F1603', 'F1604', 'F1605', 'F1606', 'F1607', 'F1608',
'F1609', 'F1610', 'F1611', 'F1612', 'F1613']:
return YA_TIDAK.get(nilai_key)
if field_code in JAWABAN_MAPPING:
return JAWABAN_MAPPING[field_code].get(nilai_key)
return nilai # Return as-is
print('='*70)
print(f'DEBUG IMPORT TAHUN {tahun}')
print('='*70)
# Print tracer_mapping
print('\nTRACER MAPPING fields:')
for key in ['email', 'nama_perusahaan', 'jumlah_perusahaan', 'jabatan']:
if key in tracer_mapping:
print(f" {key}: {tracer_mapping[key]}")
else:
print(f" {key}: NOT IN MAPPING")
print()
# Process baris pertama
row = df.iloc[0]
print(f'NIM: {row["NIM/Nomor Mahasiswa"]}')
print(f'Nama: {row["Nama"]}')
print()
def get_val(mapping_dict, key, default=None):
cols = mapping_dict.get(key, [])
col = find_column(source_cols, cols)
if col and pd.notna(row.get(col)):
val = row[col]
if isinstance(val, (int, float)):
return int(val) if val == int(val) else val
return str(val).strip()
return default
print('='*70)
print('SIMULASI BUILD TRACER_DATA')
print('='*70)
tracer_data = {}
numeric_fields = ['bulan_dapat_kerja', 'dapet_kerja_6_bulan', 'bulan_dapat_kerja_setelah',
'jumlah_perusahaan', 'bulan_cari_sebelum_lulus', 'bulan_cari_setelah_wisuda',
'jumlah_perusahaan_dilamar', 'jumlah_perusahaan_merespons', 'jumlah_perusahaan_wawancara']
for field, cols in tracer_mapping.items():
val = get_val(tracer_mapping, field)
if val is None:
print(f'SKIP {field}: val is None')
continue
if isinstance(val, str) and val.strip() in ['', 'nan', 'None', '-', '_']:
print(f'SKIP {field}: invalid string "{val}"')
continue
field_code = None
if cols:
for col in cols:
if str(col).upper().startswith('F'):
field_code = str(col).upper()
break
converted_val = konversi_jawaban(field_code, val)
if field in numeric_fields:
try:
tracer_data[field] = int(val)
print(f'OK {field} (numeric): {val} -> {int(val)}')
except (ValueError, TypeError) as e:
print(f'SKIP {field}: cannot convert to int "{val}" - {e}')
elif converted_val is not None:
tracer_data[field] = converted_val
print(f'OK {field}: {repr(val)} -> {repr(converted_val)}')
else:
print(f'SKIP {field}: converted_val is None')
print()
print('='*70)
print('HASIL TRACER_DATA (field penting)')
print('='*70)
for key in ['email', 'nama_perusahaan', 'jumlah_perusahaan', 'jabatan']:
if key in tracer_data:
print(f'{key}: {repr(tracer_data[key])}')
else:
print(f'{key}: NOT SAVED')