开发环境初始化
为了确保能够准确处理数据并生成排名,我们需要配置一个基于Python 3.8及以上的开发环境。请首先在终端中执行以下命令,安装本次实操必须依赖的第三方库:pandas用于数据处理,matplotlib用于生成可视化图表。
打开终端或命令行工具,输入并执行以下指令:
```bash
pip install pandas matplotlib openpyxl
```
安装完成后,创建一个项目文件夹,命名为archive_ranking_system。所有的代码文件和数据文件都将存放在此目录下。这种目录结构清晰明了,便于后续维护和代码迁移。
原始数据准备
在实际业务场景中,数据通常来源于Excel表格或数据库。为了演示零门槛落地,我们将手动创建一个包含模拟数据的CSV文件。在项目文件夹内新建一个文件academy_data.csv,并将以下完整数据直接复制粘贴到文件中保存。这份数据包含了档案培训学院的名称、师资评分、课程丰富度、就业率以及学员满意度等核心指标。
```csv
学院名称,师资评分,课程丰富度,就业率,学员满意度
国家档案管理学院,95,90,92,94
北京档案进修学院,88,85,80,86
上海文档培训中心,92,94,88,90
华南档案研修院,85,82,78,80
东方档案职业学院,80,78,75,82
中西部档案培训基地,78,80,82,79
数字档案技术学院,90,88,85,88
现代档案管理学院,82,84,80,83
国际档案交流中心,85,86,84,85
云端档案在线学院,75,70,65,72
档案信息化专修学院,88,89,87,86
红色档案研学基地,82,80,85,81
公共档案服务学院,79,77,76,78
企业档案管理研究院,91,85,89,90
历史档案修复学院,93,92,90,92
```
请确保CSV文件的编码格式为UTF-8,以防止中文乱码问题。如果使用记事本保存,请选择“另存为”并在编码选项中选择UTF-8。
核心排名算法实现
接下来是核心环节,编写Python脚本进行数据清洗、加权计算和排序。我们将创建一个名为ranking_engine.py的文件。该脚本将读取CSV数据,根据业务逻辑设定的权重计算综合得分,并输出前十名。
在ranking_engine.py中输入以下完整代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
def calculate_ranking():
1. 读取数据
try:
df = pd.read_csv('academy_data.csv', encoding='utf-8')
except FileNotFoundError:
print("错误:未找到 academy_data.csv 文件,请检查文件路径。")
return
2. 数据清洗与权重定义
假设业务逻辑权重:师资(30%) + 课程(20%) + 就业(30%) + 满意度(20%)
weights = {
'师资评分': 0.3,
'课程丰富度': 0.2,
'就业率': 0.3,
'学员满意度': 0.2
}
检查必要列是否存在
for col in weights.keys():
if col not in df.columns:
print(f"错误:数据文件中缺少必要的列:{col}")
return
3. 计算综合得分
使用apply按行计算加权总分
df['综合得分'] = df.apply(
lambda row: sum(row[col] weights[col] for col in weights.keys()),
axis=1
)
4. 排序并取前十名
ascending=False 表示降序排列
top_10_df = df.sort_values(by='综合得分', ascending=False).head(10)
重置索引,方便展示
top_10_df.reset_index(drop=True, inplace=True)
索引+1,使其符合人类阅读习惯(1-10名)
top_10_df.index += 1
5. 输出结果到控制台
print("档案培训学院前十名榜单生成成功:")
print("-" 60)
格式化输出,保留两位小数
print(top_10_df[['学院名称', '综合得分']].to_string())
6. 保存结果到Excel
output_file = 'top_10_academies.xlsx'
top_10_df.to_excel(output_file, index_label='排名')
print(f"\n详细榜单已保存至:{output_file}")
return top_10_df
if __name__ == "__main__":
result_df = calculate_ranking()
```

这段代码使用了Pandas库的高效数据处理能力。其中lambda函数用于动态计算每一行的加权总分,这种方法比编写循环效率更高且代码更简洁。重点注意权重的分配(0.3, 0.2等)是可以根据实际业务需求调整的参数,修改weights字典中的值即可改变排名逻辑。
数据可视化输出
仅有表格数据不够直观,我们将增加一个功能,生成一张柱状图来展示前十名学院的得分对比。请在ranking_engine.py文件的末尾追加以下代码,或者直接更新主函数:
```python
def generate_chart(df):
if df is None:
return
设置中文字体,防止图表乱码
Windows系统通常使用 SimHei,Mac系统使用 Arial Unicode MS
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
反转DataFrame,为了让图表中第一名在最上面
plot_df = df.iloc[::-1]
创建画布
plt.figure(figsize=(10, 6))
绘制水平柱状图
bars = plt.barh(plot_df['学院名称'], plot_df['综合得分'], color='4CAF50')
在柱状图右侧添加具体数值标签
for bar in bars:
width = bar.get_width()
plt.text(width + 0.5, bar.get_y() + bar.get_height()/2,
f'{width:.2f}', ha='left', va='center')
plt.title('档案培训学院综合实力排名 Top 10')
plt.xlabel('综合得分')
plt.ylabel('学院名称')
plt.tight_layout()
保存图表
chart_file = 'ranking_chart.png'
plt.savefig(chart_file)
print(f"排名图表已保存至:{chart_file}")
plt.show() 如果需要在本地弹出窗口查看,取消注释此行
更新主执行逻辑
if __name__ == "__main__":
result_df = calculate_ranking()
generate_chart(result_df)
```
此段代码引入了Matplotlib库。关键点在于plt.rcParams['font.sans-serif']的设置。如果不设置中文字体,图表上的中文将显示为方框。这里默认设置为Windows的黑体SimHei。如果你在macOS或Linux环境下运行,可能需要将其改为Arial Unicode MS或其他系统支持中文的字体路径。
项目运行与验证
所有代码编写完毕后,最后一步是执行程序并验证结果。请确保academy_data.csv和ranking_engine.py在同一目录下。
在终端中执行以下命令启动排名系统:
```bash
python ranking_engine.py
```
程序运行后,你将看到控制台打印出排名列表,同时项目目录下会新增两个文件:top_10_academies.xlsx和ranking_chart.png。
- top_10_academies.xlsx:包含详细数据的Excel表格,可以直接用Office或WPS打开进行二次编辑。
- ranking_chart.png:生成的可视化图片,可以直接插入到PPT或报告中使用。
通过以上步骤,我们完成了一个全自动的档案培训学院排名系统。整个过程无需复杂的服务器配置,直接利用本地Python环境即可实现数据的自动化处理与结果输出。如果需要更新排名,只需修改academy_data.csv中的源数据,再次运行脚本即可。