streamlit搭建多人评分网站
文章目录
- streamlit搭建多人评分网站
- 一、引言
- 二、数据准备
- 三、streamlit代码
- 四、数据合并代码
一、引言
当需要对班级内多人进行打分时,为了不使用问卷星等平台进行评分,使用pandas进行操作数据,使用streamlit进行数据传输,可以实现问卷星的功能。
二、数据准备
首先需要准备一个模板文件,写入待用户评分的人。
例如刘备、关羽、张飞三人的学号、姓名、专业和班级
三、streamlit代码
完整代码:
import streamlit as st
import pandas as pd
# 欢迎页面,要求用户输入自己的姓名
st.title("学生评分系统")
username = st.text_input("请输入你的姓名:")
# 加载学生名单数据
data_url = "班级.txt"
df_students = pd.read_csv(data_url, sep="\t", header=None, names=["学号", "姓名", "专业", "班级"])
# 创建空白的表格,每个学生对应一行
students = df_students["姓名"].tolist()
scores = [None] * len(students)
df = pd.DataFrame({"学号": df_students["学号"], "评分": scores})
# 显示表单,用户可以为每个学生打分
st.write("请为每个学生进行评分(1-100):")
for i in range(len(students)):
score = st.number_input(f"{students[i]}的评分:", min_value=0, max_value=100)
df.iloc[i, 1] = score
# 提交按钮,点击后生成csv文件保存数据
if st.button("提交"):
df.to_csv(f"{username}.csv", index=False)
st.success("提交成功!已将您的评分数据保存到csv文件中。")
运行结果如下:
这样我们把所有的评分输入后,点击提交,就能生成一个评分的csv文件了。
四、数据合并代码
当所有人提交后,在本地会生成每个人的评分文件,我们需要再运行一段代码来将评分文件进行合并。
代码如下:
import os
import pandas as pd
# 获取文件夹路径
dir_path = './'
# 获取文件夹下所有的 CSV 文件
csv_files = [f for f in os.listdir(dir_path) if f.endswith('.csv')]
# 创建一个空的 DataFrame
merged_df = pd.DataFrame()
# 循环读取并合并所有的 CSV 文件
for csv_file in csv_files:
# 读取 CSV 文件
csv_path = os.path.join(dir_path, csv_file)
df = pd.read_csv(csv_path, usecols=[1])
# 将 DataFrame 合并到之前创建的空 DataFrame 中
df.columns = [csv_file[:-4]] # 使用文件名作为列名
merged_df = pd.concat([merged_df, df], axis=1)
# 将合并后的 DataFrame 保存为 CSV 文件
merged_df.to_csv('merged.csv', index=False)
合并之后就能直观看到总平均分啦。当然还能进行优化,比如将这些代码整合到一起,实时计算等。
结果:
最后关于部署到服务器的内容可参考上一篇文章:
https://blog.csdn.net/tianhai12/article/details/131358430