irfantea's picture
Upload 2 files
23071a2
raw
history blame
1.91 kB
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)