You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于历史数据的Python教师培训名额预测算法及代码求助

推荐算法与Python实现方案

推荐算法:基于历史参训频次的加权随机选择

核心逻辑兼顾公平性与随机性:

  • 优先筛选从未参加过对应学科weekly培训的教师,保障未参训教师的参与机会
  • 若未参训人数不足18,从参训次数最少的教师中补充
  • 最终从候选池中随机抽取18人,避免固定排序导致的不公平

Python代码实现

代码适配初学者,依赖pandas和sqlite3(若Top_10k是CSV可直接替换):

import pandas as pd
import sqlite3
import random

# 配置目标参数,可按需修改
TARGET_DATE = "01/07/2023"
TARGET_SUBJECT = "Physics"  # 支持Mathematics/Chemistry等指定学科
TARGET_DURATION = "weekly"
QUOTA = 18

# 1. 加载历史培训CSV数据
history_df = pd.read_csv("training_history.csv")
# 过滤出当前学科+weekly时长的历史参训记录
subject_weekly_records = history_df[
    (history_df["Subject"] == TARGET_SUBJECT) & 
    (history_df["Training_duration"] == TARGET_DURATION)
]

# 2. 获取所有教师学号(假设Top_10k是SQLite数据库表,CSV则替换为pd.read_csv)
conn = sqlite3.connect("teachers_database.db")
all_teachers = pd.read_sql("SELECT Rollno FROM Top_10k", conn)
conn.close()

# 3. 统计每位教师的参训次数
# 合并数据,标记参训次数(未参训设为0)
participation_stats = pd.merge(
    all_teachers,
    subject_weekly_records.groupby("Selected_Rollno").size().reset_index(name="join_count"),
    left_on="Rollno",
    right_on="Selected_Rollno",
    how="left"
).fillna({"join_count": 0})

# 4. 按参训次数排序,优先选未参训教师
participation_stats = participation_stats.sort_values("join_count")

# 5. 抽取符合名额的教师
non_join_teachers = participation_stats[participation_stats["join_count"] == 0]["Rollno"].tolist()
if len(non_join_teachers) >= QUOTA:
    selected = random.sample(non_join_teachers, QUOTA)
else:
    # 未参训人数不足,补充参训次数最少的教师
    remaining = QUOTA - len(non_join_teachers)
    other_candidates = participation_stats[participation_stats["join_count"] > 0]["Rollno"].tolist()
    selected = non_join_teachers + random.sample(other_candidates, remaining)

# 输出结果
print(f"[{TARGET_DATE}] {TARGET_SUBJECT} weekly培训入选教师学号:")
for i, rollno in enumerate(selected, 1):
    print(f"{i}. {rollno}")

注意事项

  • 若Top_10k是CSV文件,将数据库连接代码替换为:all_teachers = pd.read_csv("Top_10k.csv"),确保文件中教师学号列名为Rollno
  • 可直接修改TARGET_SUBJECT切换目标学科,适配所有指定学科的weekly培训筛选
  • 若需避免教师在同一天参加多场培训,可额外添加逻辑过滤已有排期记录(需提前导入对应数据)

内容的提问来源于stack exchange,提问作者user2472463

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:13:27