irfantea's picture
Update app.py
95d97f2
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
#Huggingface
from datasets import load_dataset
from huggingface_hub import login
import os
st.set_page_config(
page_title="Daftar Nilai Assesmen 1",
page_icon="chart_with_upwards_trend",
layout="wide",
)
login(token = os.environ['hf_token'])
dataset = load_dataset("irfantea/collections", data_files='Kombinasi.csv', split='train')
df = dataset.to_pandas()
#@st.cache_data
def load_data():
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["Grade/100.00 (Ujian 2)"] = df["Grade/100.00 (Ujian 2)"].astype(float)
df["Ujian 1 (15%)"] = (df["Grade/100.00 (Ujian 1)"].astype(float) * 0.15).round(2)
df["Ujian 2 (30%)"] = (df["Grade/100.00 (Ujian 2)"].astype(float) * 0.30).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)", "Ujian 1 (15%)", "Grade/100.00 (Ujian 2)", "Ujian 2 (30%)"]
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
plt.bar(df_counts['Category'], df_counts['Count'], color=colors)
plt.xlabel('Rentang')
plt.ylabel('Jumlah Mahasiswa')
st.pyplot(plt)
average = df["Grade/100.00 (Ujian 1)"].mean()
median = df["Grade/100.00 (Ujian 1)"].median()
stdev = df["Grade/100.00 (Ujian 1)"].std()
st.info("Mean: " + str(average))
st.info("Median: " + str(median))
st.info("STDev: " + str(stdev))
with kolom2:
grades = df["Grade/100.00 (Ujian 2)"]
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 2")
plt.clf() # Clear the current figure
plt.bar(df_counts['Category'], df_counts['Count'], color=colors)
plt.xlabel('Rentang')
plt.ylabel('Jumlah Mahasiswa')
st.pyplot(plt)
average = df["Grade/100.00 (Ujian 2)"].mean()
median = df["Grade/100.00 (Ujian 2)"].median()
stdev = df["Grade/100.00 (Ujian 2)"].std()
st.info("Mean: " + str(average))
st.info("Median: " + str(median))
st.info("STDev: " + str(stdev))
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)