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