import streamlit as st import pandas as pd import matplotlib.pyplot as plt st.set_page_config( page_title="Daftar Nilai Assesmen 1", page_icon="chart_with_upwards_trend", layout="wide", ) @st.cache_data def load_data(): df = pd.read_csv("Kombinasi.csv") df["First name"] = df["First name"].astype("string") df["Grade/100.00 (Simulasi)"] = df["Grade/100.00 (Simulasi)"].astype(float) df["Grade/100.00 (Ujian 1)"] = df["Grade/100.00 (Ujian 1)"].astype(float) df["Persentase Ujian 1 (15%)"] = (df["Grade/100.00 (Ujian 1)"].astype(float) * 0.15).round(2) return df df = load_data() def cari_npm(npm): df_cari = df[df["First name"] == npm] return df_cari def susun_data(data_npm): columns_to_display = ["Surname", "First name", "Grade/100.00 (Ujian 1)", "Persentase Ujian 1 (15%)"] st.table(data_npm[columns_to_display]) colors = ['red', 'green', 'blue'] st.title("Grafik Batang Nilai Ujian Assesmen 1 Seluruh Mahasiswa") kolom1, kolom2, kolom3 = st.columns(3) with kolom1: grades = df["Grade/100.00 (Ujian 1)"] count_below_50 = (grades < 50).sum() count_50_to_68 = ((grades >= 50) & (grades <= 68)).sum() count_above_68 = (grades > 68).sum() data = { 'Category': ['Below 50', '50 - 68', 'Above 68'], 'Count': [count_below_50, count_50_to_68, count_above_68] } df_counts = pd.DataFrame(data) st.write("Ujian 1") plt.clf() # Clear the current figure time.sleep(0.2) plt.bar(df_counts['Category'], df_counts['Count'], color=colors) plt.xlabel('Rentang') plt.ylabel('Jumlah Mahasiswa') st.pyplot(plt) with kolom2: st.write("Ujian 2") with kolom3: st.write("Ujian Final") st.sidebar.info("Masukkan NPM Lengkap!") st.title("Nilai Per Mahasiswa") npm = st.sidebar.text_input("NPM") if st.sidebar.button(label="Cari"): data_npm = cari_npm(npm) susun_data(data_npm)