使用pythonos库完成以下内容并生成代码 1、统计每个学院(部门)实验室开出的实验课程总学时数,总的实验人次数(一门实验只计一次,表中可能一门课程合并为一个单元格,也可能分多个,注意处理),按从高到低打印出结果,并绘制折线图;注:一个文件夹即一个学院或部门
时间: 2024-10-19 22:12:07 浏览: 19
实验室课程总结,包括数学相关的软件课程和学时、学生数的开设和总结
为了完成这个任务,你需要首先安装`pandas`, `matplotlib`, 和 `python-Levenshtein`(用于字符串相似度计算)库,如果你还没有安装,可以使用以下命令:
```bash
pip install pandas matplotlib python-Levenshtein
```
接下来,假设你有一个包含实验信息的数据文件,例如CSV格式,其中包含"学院", "课程名", "学时", "实验人数"等字段,你可以编写如下的Python代码来统计并排序数据:
```python
import os
import pandas as pd
from collections import defaultdict
from Levenshtein import distance
# 定义函数,统计学院的实验数据
def process_folder(folder_path):
total_hours = defaultdict(int)
total_people = defaultdict(int)
# 遍历文件夹中的所有CSV文件
for filename in os.listdir(folder_path):
if filename.endswith('.csv'):
file_path = os.path.join(folder_path, filename)
data = pd.read_csv(file_path)
# 合并相似的课程名
unique_courses = data['课程名'].apply(lambda x: ' '.join(sorted(x.split())))
data['课程名'] = unique_courses
# 统计学时和实验人数
for _, row in data.iterrows():
total_hours[row['学院']] += row['学时']
total_people[row['学院']] += row['实验人数']
# 按照学时和人数降序排列
sorted_data = {k: (v['total_hours'], v['total_people']) for k, v in total_hours.items()}
sorted_data = sorted(sorted_data.items(), key=lambda item: (-item[1][0], -item[1][1]))
return sorted_data
# 示例函数调用
sorted_info = process_folder('your_folder_path') # 替换为实际的文件夹路径
# 打印结果
for i, (college, (hours, people)) in enumerate(sorted_info, start=1):
print(f"{i}. 学院: {college}, 总学时: {hours}, 总实验人数: {people}")
# 绘制折线图
df = pd.DataFrame(sorted_info, columns=['学院', '学时', '实验人数'])
df.plot(kind='barh', x='学院', y=['学时', '实验人数'], stacked=True, figsize=(10, 6))
plt.xlabel('小时数和实验人数')
plt.title('各学院实验情况')
plt.show()
```
请将上述代码中的 `'your_folder_path'` 替换成你的实际文件夹路径。此代码会遍历文件夹内的CSV文件,合并相同的课程名称,并对每所学院的总学时和实验人数进行统计,最后按照学时和实验人数降序排序并绘制折线图。
阅读全文