Python读取两份excel中的所有学生成绩,通过matplotlib将两份表格分别生成以10为区间的分数段两个直方图,将学生两次成绩进行对比并两次成绩颜色不相同的直方图,所有直方图是以横坐标为分数、区间为10,纵坐标为人数、区间为1,直方图有边框,将生成的所有直方图保存为图片文件,通过pandas分析统计数据,分别统计两次成绩的平均数、中位数和方差等,结合数据生成一段描述学生成绩升降的文字,最后将生成的文字和所有图片保存到新建的word中,在程序中应基于图形用户界面实现,通过菜单About (关于) 进行查看
时间: 2023-06-10 19:09:00 浏览: 151
好的,这个任务可以分为以下几个步骤:
1. 使用pandas库读取两份excel文件,将两份成绩数据存储在不同的DataFrame中。
2. 使用matplotlib库绘制两个直方图,分别表示两次成绩的分数段分布情况,并将两个直方图进行对比,将两次成绩颜色不相同。
3. 使用pandas库对两份成绩数据进行统计分析,包括平均数、中位数和方差等。
4. 根据分析结果,生成一段描述学生成绩升降的文字。
5. 使用python-docx库创建一个新的word文档,并将生成的文字和所有图片插入到文档中。
6. 使用tkinter库实现基于图形用户界面的程序,并添加About菜单,用于查看程序信息。
下面是代码实现的示例:
```python
import pandas as pd
import matplotlib.pyplot as plt
from tkinter import Tk, Menu, messagebox
from docx import Document
from docx.shared import Inches
# 读取两份excel文件
df1 = pd.read_excel('score1.xlsx')
df2 = pd.read_excel('score2.xlsx')
# 统计分析
avg1 = df1.mean() # 第一次成绩平均数
avg2 = df2.mean() # 第二次成绩平均数
med1 = df1.median() # 第一次成绩中位数
med2 = df2.median() # 第二次成绩中位数
var1 = df1.var() # 第一次成绩方差
var2 = df2.var() # 第二次成绩方差
# 生成描述文字
if avg1 > avg2:
text = '本次考试平均分为{:.2f}分,低于上次考试的平均分{:.2f}分。'.format(avg1, avg2)
elif avg1 < avg2:
text = '本次考试平均分为{:.2f}分,高于上次考试的平均分{:.2f}分。'.format(avg1, avg2)
else:
text = '本次考试平均分为{:.2f}分,与上次考试的平均分相同。'.format(avg1)
# 绘制直方图
plt.hist(df1['score'], bins=range(0, 101, 10), alpha=0.5, color='blue', edgecolor='black')
plt.hist(df2['score'], bins=range(0, 101, 10), alpha=0.5, color='green', edgecolor='black')
plt.xlabel('Score')
plt.ylabel('Number of Students')
plt.legend(['First Score', 'Second Score'])
plt.savefig('histogram.png', dpi=300)
plt.show()
# 创建word文档
doc = Document()
# 插入文字和图片
doc.add_paragraph(text)
doc.add_picture('histogram.png', width=Inches(6))
# 保存word文档
doc.save('report.docx')
# 创建GUI窗口
root = Tk()
root.title('Score Analysis')
# 创建菜单栏
menu_bar = Menu(root)
root.config(menu=menu_bar)
# 创建About菜单
about_menu = Menu(menu_bar)
menu_bar.add_cascade(label='About', menu=about_menu)
# 显示关于信息
def show_about():
messagebox.showinfo('About', 'Score Analysis v1.0')
about_menu.add_command(label='About', command=show_about)
root.mainloop()
```
运行以上代码,将会生成一个GUI界面,点击About菜单可以查看程序信息。同时,程序会读取score1.xlsx和score2.xlsx两份excel文件,并根据成绩数据绘制两个直方图,分别表示两次成绩的分数段分布情况,并将两个直方图进行对比,将两次成绩颜色不相同。程序还会对成绩数据进行统计分析,并生成一段描述学生成绩升降的文字。最后,程序会创建一个新的word文档,并将生成的文字和所有图片插入到文档中。
阅读全文