Skip to content

Instantly share code, notes, and snippets.

@ngurajeka
Created May 18, 2020 06:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ngurajeka/3167d15f05351f44c9e2d25ac92221ba to your computer and use it in GitHub Desktop.
Save ngurajeka/3167d15f05351f44c9e2d25ac92221ba to your computer and use it in GitHub Desktop.
Student Grading
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()
@ngurajeka
Copy link
Author

Jalankan melalui virtualenv,

pip install matplotlib numpy seaborn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment