188 lines
8.8 KiB
Python
188 lines
8.8 KiB
Python
import random
|
|
jurusan_data = {
|
|
"teknik informatika": {
|
|
"keterampilan": [
|
|
"spreadsheet", "python", "analisis data", "visualisasi data",
|
|
"pengujian perangkat lunak", "dokumentasi kasus uji", "manajemen waktu",
|
|
"html", "css", "javascript", "java", "node.js", "sql", "devops", "aws", "azure",
|
|
"react", "angular", "statistik", "machine learning", "cloud operation", "ruby",
|
|
"database", "desain", "pemrograman", "keamanan digital", "troubleshooting",
|
|
"kotlin", "swift", "objective-c", "r", "preprocessing data", "penyebaran model",
|
|
"manajemen proyek", "pemahaman operasi bisnis", "unity", "unreal engine", "c#", "c++"
|
|
],
|
|
"minat": [
|
|
"investigative (analitis)", "conventional (terstruktur)", "artistic (kreatif)",
|
|
"realistic (praktis, teknis)", "enterprising (memimpin)", "social (sosial)"
|
|
]
|
|
},
|
|
"sistem informasi": {
|
|
"keterampilan": [
|
|
"spreadsheet", "python", "analisis data", "visualisasi data",
|
|
"database", "sql", "manajemen proyek", "pemahaman operasi bisnis",
|
|
"administrasi jaringan", "troubleshooting", "dukungan teknis perangkat keras dan perangkat lunak"
|
|
],
|
|
"minat": ["investigative (analitis)", "conventional (terstruktur)", "realistic (praktis, teknis)", "social (sosial)"]
|
|
},
|
|
"matematika": {
|
|
"keterampilan": ["spreadsheet", "python", "analisis data", "visualisasi data", "statistik", "machine learning", "r"],
|
|
"minat": ["investigative (analitis)"]
|
|
},
|
|
"teknik komputer": {
|
|
"keterampilan": [
|
|
"html", "css", "javascript", "python", "java", "node.js", "sql", "devops", "aws", "azure",
|
|
"cloud operation", "ruby", "pemrograman", "keamanan digital", "troubleshooting",
|
|
"kotlin", "swift", "objective-c", "administrasi jaringan"
|
|
],
|
|
"minat": ["conventional (terstruktur)", "artistic (kreatif)", "realistic (praktis, teknis)", "enterprising (memimpin)"]
|
|
},
|
|
"desain komunikasi visual": {
|
|
"keterampilan": ["html", "css", "javascript", "react", "angular", "desain"],
|
|
"minat": ["artistic (kreatif)"]
|
|
},
|
|
"statistik": {
|
|
"keterampilan": ["statistik", "machine learning", "python", "r"],
|
|
"minat": ["investigative (analitis)"]
|
|
},
|
|
"ilmu komputer": {
|
|
"keterampilan": ["database", "sql"],
|
|
"minat": ["investigative (analitis)"]
|
|
}
|
|
}
|
|
|
|
def get_random_skills_interests(jurusan):
|
|
if jurusan in jurusan_data:
|
|
keterampilan = random.choice(jurusan_data[jurusan]["keterampilan"])
|
|
minat = random.choice(jurusan_data[jurusan]["minat"])
|
|
return keterampilan, minat
|
|
return "python", "investigative (analitis)" # default
|
|
|
|
random.seed(42)
|
|
|
|
uji_coba = []
|
|
|
|
test_cases_data = [
|
|
{"nama": "Ahmad", "ipk": 3.78, "jurusan": "teknik informatika", "target": "Web Developer"},
|
|
{"nama": "Sari", "ipk": 3.50, "jurusan": "sistem informasi", "target": "Data Analyst"},
|
|
{"nama": "Budi", "ipk": 3.83, "jurusan": "teknik informatika", "target": "Data Scientist"},
|
|
{"nama": "Rina", "ipk": 3.91, "jurusan": "teknik informatika", "target": "Quality Assurance"},
|
|
{"nama": "Doni", "ipk": 3.83, "jurusan": "sistem informasi", "target": "Data Analyst"},
|
|
{"nama": "Lisa", "ipk": 3.78, "jurusan": "teknik informatika", "target": "Web Developer"},
|
|
{"nama": "Agus", "ipk": 3.71, "jurusan": "teknik informatika", "target": "Frontend Developer"},
|
|
{"nama": "Maya", "ipk": 3.74, "jurusan": "desain komunikasi visual", "target": "UI/UX Designer"},
|
|
{"nama": "Rudi", "ipk": 3.92, "jurusan": "teknik informatika", "target": "Machine Learning Engineer"},
|
|
{"nama": "Dewi", "ipk": 3.95, "jurusan": "matematika", "target": "Data Scientist"},
|
|
{"nama": "Andi", "ipk": 3.25, "jurusan": "teknik komputer", "target": "System Administrator"},
|
|
{"nama": "Nina", "ipk": 3.65, "jurusan": "statistik", "target": "Data Analyst"},
|
|
{"nama": "Hadi", "ipk": 3.45, "jurusan": "ilmu komputer", "target": "Database Administrator"},
|
|
{"nama": "Tina", "ipk": 3.88, "jurusan": "teknik informatika", "target": "Software Engineer"},
|
|
{"nama": "Bayu", "ipk": 3.55, "jurusan": "sistem informasi", "target": "Business Analyst"},
|
|
{"nama": "Sinta", "ipk": 3.72, "jurusan": "desain komunikasi visual", "target": "UI/UX Designer"},
|
|
{"nama": "Dika", "ipk": 3.33, "jurusan": "teknik komputer", "target": "Network Engineer"},
|
|
{"nama": "Lusi", "ipk": 3.67, "jurusan": "matematika", "target": "Statistician"},
|
|
{"nama": "Yoga", "ipk": 3.81, "jurusan": "teknik informatika", "target": "DevOps Engineer"},
|
|
{"nama": "Eka", "ipk": 3.59, "jurusan": "sistem informasi", "target": "IT Support"}
|
|
]
|
|
|
|
for case_data in test_cases_data:
|
|
keterampilan, minat = get_random_skills_interests(case_data["jurusan"])
|
|
|
|
if case_data["jurusan"] in ["teknik informatika", "sistem informasi"]:
|
|
if case_data["ipk"] >= 3.7:
|
|
rekomendasi = ["Data Scientist", "Machine Learning Engineer", "Software Engineer"]
|
|
elif case_data["ipk"] >= 3.5:
|
|
rekomendasi = ["Data Analyst", "Web Developer", "Software Engineer"]
|
|
else:
|
|
rekomendasi = ["Junior Developer", "IT Support", "System Administrator"]
|
|
elif case_data["jurusan"] == "matematika":
|
|
rekomendasi = ["Data Scientist", "Statistician", "Data Analyst"]
|
|
elif case_data["jurusan"] == "desain komunikasi visual":
|
|
rekomendasi = ["UI/UX Designer", "Graphic Designer", "Web Designer"]
|
|
elif case_data["jurusan"] == "teknik komputer":
|
|
rekomendasi = ["System Administrator", "Network Engineer", "DevOps Engineer"]
|
|
elif case_data["jurusan"] == "statistik":
|
|
rekomendasi = ["Data Analyst", "Statistician", "Research Analyst"]
|
|
else:
|
|
rekomendasi = ["Database Administrator", "Data Analyst", "System Analyst"]
|
|
|
|
uji_coba.append({
|
|
"nama": case_data["nama"],
|
|
"ipk": case_data["ipk"],
|
|
"jurusan": case_data["jurusan"],
|
|
"keterampilan": keterampilan,
|
|
"minat": minat,
|
|
"rekomendasi": rekomendasi,
|
|
"target": case_data["target"]
|
|
})
|
|
|
|
total = len(uji_coba)
|
|
hit = 0
|
|
|
|
print("=" * 120)
|
|
print("PENGUJIAN HIT RATE SISTEM IPKMATCHER")
|
|
print("=" * 120)
|
|
print()
|
|
|
|
print("{:<3} {:<8} {:<5} {:<20} {:<20} {:<25} {:<35} {:<18} {:<4}".format(
|
|
"No", "Nama", "IPK", "Jurusan", "Keterampilan", "Minat", "Rekomendasi Sistem", "Target", "Hit"))
|
|
print("-" * 120)
|
|
|
|
for i, case in enumerate(uji_coba, 1):
|
|
nama = case["nama"]
|
|
ipk = case["ipk"]
|
|
jurusan = case["jurusan"]
|
|
keterampilan = case["keterampilan"]
|
|
minat = case["minat"]
|
|
rekom = case["rekomendasi"]
|
|
target = case["target"]
|
|
|
|
is_hit = 1 if any(target.lower() in rec.lower() or rec.lower() in target.lower() for rec in rekom) else 0
|
|
hit += is_hit
|
|
|
|
jurusan_short = (jurusan[:17] + "...") if len(jurusan) > 20 else jurusan
|
|
keterampilan_short = (keterampilan[:17] + "...") if len(keterampilan) > 20 else keterampilan
|
|
minat_short = (minat[:22] + "...") if len(minat) > 25 else minat
|
|
rekom_short = (", ".join(rekom)[:32] + "...") if len(", ".join(rekom)) > 35 else ", ".join(rekom)
|
|
target_short = (target[:15] + "...") if len(target) > 18 else target
|
|
|
|
print("{:<3} {:<8} {:<5} {:<20} {:<20} {:<25} {:<35} {:<18} {:<4}".format(
|
|
i, nama, ipk, jurusan_short, keterampilan_short, minat_short, rekom_short, target_short, "✓" if is_hit else "✗"))
|
|
|
|
hit_rate = hit / total
|
|
print("-" * 120)
|
|
print(f"HASIL PENGUJIAN:")
|
|
print(f"Total Hit: {hit} dari {total} kasus")
|
|
print(f"Hit Rate: {hit_rate:.3f} ({hit_rate * 100:.1f}%)")
|
|
print()
|
|
|
|
print("ANALISIS PER JURUSAN:")
|
|
print("-" * 50)
|
|
jurusan_stats = {}
|
|
for case in uji_coba:
|
|
jurusan = case["jurusan"]
|
|
if jurusan not in jurusan_stats:
|
|
jurusan_stats[jurusan] = {"total": 0, "hit": 0}
|
|
|
|
jurusan_stats[jurusan]["total"] += 1
|
|
is_hit = 1 if any(case["target"].lower() in rec.lower() or rec.lower() in case["target"].lower() for rec in case["rekomendasi"]) else 0
|
|
jurusan_stats[jurusan]["hit"] += is_hit
|
|
|
|
for jurusan, stats in jurusan_stats.items():
|
|
rate = stats["hit"] / stats["total"]
|
|
print(f"{jurusan.title():<25}: {stats['hit']}/{stats['total']} ({rate*100:.1f}%)")
|
|
|
|
print("=" * 120)
|
|
|
|
print("\nDETAIL LENGKAP HASIL PENGUJIAN:")
|
|
print("=" * 80)
|
|
for i, case in enumerate(uji_coba, 1):
|
|
print(f"\nTest Case {i}:")
|
|
print(f" Nama: {case['nama']}")
|
|
print(f" IPK: {case['ipk']}")
|
|
print(f" Jurusan: {case['jurusan'].title()}")
|
|
print(f" Keterampilan: {case['keterampilan'].title()}")
|
|
print(f" Minat: {case['minat'].title()}")
|
|
print(f" Rekomendasi: {', '.join(case['rekomendasi'])}")
|
|
print(f" Target: {case['target']}")
|
|
is_hit = 1 if any(case["target"].lower() in rec.lower() or rec.lower() in case["target"].lower() for rec in case["rekomendasi"]) else 0
|
|
print(f" Status: {'✓ HIT' if is_hit else '✗ MISS'}")
|
|
print(f" {'-'*40}") |