TIF_NGANJUK_E41210983/hit_rate_20.py

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}")