Created
May 18, 2020 06:46
-
-
Save ngurajeka/3167d15f05351f44c9e2d25ac92221ba to your computer and use it in GitHub Desktop.
Student Grading
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import matplotlib.pyplot as plt | |
import numpy as np | |
import seaborn | |
from tabulate import tabulate | |
seaborn.set() # set plot style | |
# Student untuk placeholder satu data | |
class Student(object): | |
def __init__(self, nama, nim, nilai_tugas, nilai_uts, nilai_uas): | |
self.nama = nama | |
self.nim = nim | |
self.nilai_tugas = nilai_tugas | |
self.nilai_uts = nilai_uts | |
self.nilai_uas = nilai_uas | |
self.nilai_akhir = 0 | |
self.hitung_nilai_akhir() | |
self.konversi_grade() | |
def hitung_nilai_akhir(self): | |
nilai_tugas = self.nilai_tugas * 0.3 | |
nilai_uts = self.nilai_uts * 0.3 | |
nilai_uas = self.nilai_uas * 0.4 | |
self.nilai_akhir = nilai_tugas + nilai_uts + nilai_uas | |
def konversi_grade(self): | |
if self.nilai_akhir >= 90: | |
self.grade = "A" | |
elif self.nilai_akhir >= 85: | |
self.grade = "A-" | |
elif self.nilai_akhir >= 80: | |
self.grade = "B+" | |
elif self.nilai_akhir >= 75: | |
self.grade = "B" | |
elif self.nilai_akhir >= 70: | |
self.grade = "B-" | |
elif self.nilai_akhir >= 65: | |
self.grade = "C+" | |
elif self.nilai_akhir >= 60: | |
self.grade = "C-" | |
elif self.nilai_akhir >= 50: | |
self.grade = "D" | |
elif self.nilai_akhir >= 40: | |
self.grade = "E" | |
elif self.nilai_akhir < 40: | |
self.grade = "T" | |
@staticmethod | |
def avg_nilai_akhir(students): | |
return Student.total_nilai_akhir(students) / len(students) | |
@staticmethod | |
def total_nilai_akhir(students): | |
return sum([s.nilai_akhir for s in students]) | |
@staticmethod | |
def nilai_terendah(students): | |
return min([s.nilai_akhir for s in students]) | |
@staticmethod | |
def nilai_tertinggi(students): | |
return max([s.nilai_akhir for s in students]) | |
def main(): | |
jumlah = int(input("Jumlah Mahasiswa: ")) | |
students = [] | |
for x in range(jumlah): | |
print("Input data ke-",x+1) | |
nama = input("Nama: ") | |
nim = input("Nim: ") | |
nilai_tugas = int(input("Tugas: ")) | |
nilai_uts = int(input("UTS: ")) | |
nilai_uas = int(input("UAS: ")) | |
student = Student(nama, nim, nilai_tugas, nilai_uts, nilai_uas) | |
students.append(student) | |
while True: | |
display_type = int(input("Olah nilai menggunakan:\n1. tabulate\n2. numpy\n3. matplotlib \n0. tutup\n")) | |
if display_type == 1: | |
print_students(students) | |
elif display_type == 2: | |
print_students_using_numpy(students) | |
elif display_type == 3: | |
print_as_plot(students) | |
else: | |
break | |
def print_as_table(students): | |
headers = ['No','NIM','NAMA','TUGAS','UTS','UAS','AKHIR','GRADE'] | |
table = [] | |
for i, student in enumerate(students): | |
table.append([i + 1, student.nim, student.nama, student.nilai_tugas, student.nilai_uas, student.nilai_akhir, student.grade]) | |
print(tabulate(table, headers=headers)) | |
def print_students(students): | |
print("Laporan Nilai data sains") | |
print_as_table(students) | |
print("Total Nilai :", Student.total_nilai_akhir(students)) | |
print("Total Rata - rata :", round(Student.avg_nilai_akhir(students), 2)) | |
print("Total Terendah :", Student.nilai_terendah(students)) | |
print("Total Tertinggi :", Student.nilai_tertinggi(students)) | |
def print_students_using_numpy(students): | |
nilai_akhir = [s.nilai_akhir for s in students] | |
np_array = np.array(nilai_akhir) | |
print("Laporan Nilai data sains menggunakan numpy") | |
print_as_table(students) | |
print("Total Nilai :", Student.total_nilai_akhir(students)) | |
print("Total Rata - rata :", round(np.average(np_array), 2)) | |
print("Total Terendah :", np.amin(np_array)) | |
print("Total Tertinggi :", np.amax(np_array)) | |
def print_as_plot(students): | |
grades = [s.grade for s in students] | |
grouped_grades = {} | |
for grade in grades: | |
v = grouped_grades.get(grade, 0) | |
v += 1 | |
grouped_grades[grade] = v | |
key_grades = grouped_grades.keys() | |
value_grades = grouped_grades.values() | |
fig1, axs1 = plt.subplots(1, 2, figsize=(6, 3), sharey=True) | |
axs1[0].bar(key_grades, value_grades) | |
axs1[1].hist([s.nilai_akhir for s in students]) | |
fig1.suptitle('Laporan Nilai data sains') | |
fig2, axs2 = plt.subplots(1, 1, figsize=(3, 3), sharey=True) | |
axs2.pie(value_grades, labels=key_grades) | |
fig2.suptitle('Persentase Grade') | |
plt.show() | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Jalankan melalui virtualenv,