如何用Python构建档案培训老师前十名分析模型

环境搭建与依赖库安装

在开始构建分析模型之前,必须确保本地运行环境满足要求。本指南基于Python 3.8及以上版本编写,利用Pandas进行高效数据处理,无需配置复杂的服务器环境,直接在本地终端即可运行。

安装Python环境

如果尚未安装Python,请访问Python官方发布页下载对应操作系统的安装包。下载地址为:https://www.python.org/downloads/。安装过程中,务必勾选"Add Python to PATH"选项,这将避免后续手动配置环境变量的繁琐步骤。

安装完成后,打开终端(Windows下为CMD或PowerShell,Mac/Linux下为Terminal),输入以下命令验证安装是否成功:

```bash python --version ```

若终端返回版本号(如Python 3.9.7),则说明环境配置正确。

安装核心数据处理库

本模型的核心依赖为Pandas库,用于数据的清洗、计算与排序。请在终端执行以下命令进行安装。为了加快下载速度,这里使用了国内清华镜像源:

```bash pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple ```

构建模拟数据源

为了确保代码能够直接运行并验证逻辑,我们首先构建一个包含档案培训老师各项指标的JSON数据文件。在实际业务场景中,你可以将此步骤替换为从Excel或数据库中读取数据。

请在项目目录下创建一个名为teachers_data.json的文件,并完整复制以下内容。该数据包含了姓名、机构、从业年限、学员评分、培训人数等关键字段:

```json [ { "name": "张伟", "institution": "国家档案局档案干部教育中心", "years_exp": 15, "rating": 4.8, "student_count": 1200 }, { "name": "李娜", "institution": "中国人民大学信息资源管理学院", "years_exp": 12, "rating": 4.9, "student_count": 980 }, { "name": "王强", "institution": "省档案学会", "years_exp": 8, "rating": 4.5, "student_count": 2500 }, { "name": "赵敏", "institution": "档案数字化技术应用中心", "years_exp": 10, "rating": 4.7, "student_count": 1500 }, { "name": "刘洋", "institution": "电子文件管理专家委员会", "years_exp": 20, "rating": 4.9, "student_count": 800 }, { "name": "陈静", "institution": "市档案馆培训基地", "years_exp": 6, "rating": 4.6, "student_count": 1800 }, { "name": "杨波", "institution": "文档一体化解决方案公司", "years_exp": 9, "rating": 4.4, "student_count": 3000 }, { "name": "吴刚", "institution": "历史档案研究所", "years_exp": 18, "rating": 4.8, "student_count": 1100 }, { "name": "孙丽", "institution": "档案保护技术中心", "years_exp": 11, "rating": 4.7, "student_count": 1350 }, { "name": "周杰", "institution": "企业档案管理协会", "years_exp": 7, "rating": 4.5, "student_count": 2100 }, { "name": "郑华", "institution": "档案信息化推进组", "years_exp": 14, "rating": 4.6, "student_count": 1600 }, { "name": "王平", "institution": "综合档案馆", "years_exp": 5, "rating": 4.3, "student_count": 500 } ] ```

编写核心分析脚本

如何用Python构建档案培训老师前十名分析模型

接下来编写Python脚本analyze_top_teachers.py。该脚本将执行数据加载、数据清洗、综合评分计算以及排序输出。为了确保结果的科学性,我们设定了一套加权算法:学员评分占60%权重,培训人数(经过对数处理以平衡极值)占30%权重,从业年限占10%权重。

数据加载与清洗逻辑

脚本首先读取JSON文件,并将其转换为Pandas DataFrame对象。为了防止数据缺失导致的计算错误,脚本内置了缺失值填充逻辑。如果某位老师的评分缺失,默认填充为4.0分;如果从业年限缺失,默认为0年。

请在同级目录下创建analyze_top_teachers.py文件,并写入以下完整代码:

```python import pandas as pd import json import math def load_and_clean_data(filepath): """ 加载JSON数据并进行基础清洗 """ try: with open(filepath, 'r', encoding='utf-8') as f: data = json.load(f) df = pd.DataFrame(data) 缺失值填充:评分默认4.0,年限默认0,人数默认0 df['rating'] = df['rating'].fillna(4.0) df['years_exp'] = df['years_exp'].fillna(0) df['student_count'] = df['student_count'].fillna(0) 确保数据类型正确 df['rating'] = df['rating'].astype(float) df['years_exp'] = df['years_exp'].astype(int) df['student_count'] = df['student_count'].astype(int) return df except FileNotFoundError: print(f"错误:未找到文件 {filepath}") return None def calculate_weighted_score(df): """ 计算综合得分 算法逻辑: 1. 评分权重 60% (满分5分) 2. 人数权重 30% (使用对数缩放处理极值,假设3000人为基准满分) 3. 年限权重 10% (假设20年为基准满分) """ 归一化处理函数 def normalize_score(val, max_val): return min(val / max_val, 1.0) 100 计算人数得分 (使用log避免人数差异过大导致评分失衡) 基准:log(3000) ≈ 8.0 df['score_students'] = df['student_count'].apply(lambda x: normalize_score(math.log(x + 1), 8.0)) 计算年限得分 (基准20年) df['score_exp'] = df['years_exp'].apply(lambda x: normalize_score(x, 20)) 计算评分得分 (基准5.0分) df['score_rating'] = df['rating'].apply(lambda x: normalize_score(x, 5.0)) 加权总分 df['final_score'] = ( df['score_rating'] 0.6 + df['score_students'] 0.3 + df['score_exp'] 0.1 ) return df def main(): 1. 加载数据 df = load_and_clean_data('teachers_data.json') if df is None: return 2. 计算得分 df = calculate_weighted_score(df) 3. 排序并取前十名 依据final_score降序排列,若分数相同,按rating降序 top_teachers = df.sort_values(by=['final_score', 'rating'], ascending=[False, False]).head(10) 4. 格式化输出 重置索引 top_teachers = top_teachers.reset_index(drop=True) top_teachers.index += 1 排名从1开始 选择展示列 display_columns = ['name', 'institution', 'years_exp', 'rating', 'student_count', 'final_score'] result_df = top_teachers[display_columns].copy() 重命名列头以便阅读 result_df.columns = ['姓名', '所属机构', '从业年限(年)', '学员评分', '培训人数', '综合得分'] 格式化得分保留两位小数 result_df['综合得分'] = result_df['综合得分'].round(2) print("档案培训老师综合实力前十名榜单:") print("="80) print(result_df.to_string()) 5. (可选) 保存结果到CSV result_df.to_csv('top_teachers_rank.csv', index_label='排名', encoding='utf-8-sig') print("\n结果已保存至 top_teachers_rank.csv") if __name__ == "__main__": main() ```

运行与结果验证

代码编写完毕后,最后一步是执行脚本并查看分析结果。这一步将生成我们需要的“档案培训老师前十名”榜单。

执行分析命令

确保analyze_top_teachers.pyteachers_data.json在同一目录下。在终端中切换到该目录,运行以下命令:

```bash python analyze_top_teachers.py ``>

结果解读与输出

脚本运行成功后,终端将直接打印出格式化后的表格。同时,目录下会生成一个名为top_teachers_rank.csv的文件,可直接用Excel打开查看。

输出表格将包含以下列:

  • 排名:根据综合得分自动生成的序号。
  • 姓名:培训老师的姓名。
  • 所属机构:老师所在的单位或组织。
  • 从业年限(年):老师在档案领域的从业时间。
  • 学员评分:历史学员给出的平均评分(满分5.0)。
  • 培训人数:累计培训过的学员总数。
  • 综合得分:基于加权算法计算出的最终分数,作为排名依据。

通过上述步骤,你不仅获得了一份客观的排名列表,还掌握了一套可复用的数据分析模型。如果需要更新排名,只需修改teachers_data.json中的数据,再次运行脚本即可立即得到最新结果。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统