做一款软件用于分析excel中的数据: 需求如下: 将给定目录(课程成绩)中每一个excel表格中的期末成绩读取出来,然后分段显示>=90、>=80 and <90、>=70 and <80、>=60 and <70、<60 and >=0 的学生人数以及在班级人数当中的比例。 将给定目录(课程成绩)中每一个excel表格中的总成绩读取出来,然后分段显示>=90、>=80 and <90、>=70 and <80、>=60 and <70、<60 and >=0的学生人数以及在班级人数当中的比例。 通过界面选择要分析的excel文件和分析的数据类型(期末成绩、总成绩),然后显示出相应分数段的人数和比例。 将统计的结果写入到CSV文件当中保存 美化界面
时间: 2024-02-12 18:04:54 浏览: 70
好的,这是一个比较全面的需求,需要用到Python的pandas、os和tkinter库。以下是代码实现:
```python
import pandas as pd
import os
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
class AnalysisApp:
def __init__(self, master):
self.master = master
master.title('Excel数据分析软件')
master.geometry('500x300')
# 创建选择文件按钮和数据类型选择框
self.file_btn = tk.Button(master, text='选择文件夹', command=self.choose_folder)
self.file_btn.pack(pady=10)
self.type_label = tk.Label(master, text='请选择要分析的数据类型:')
self.type_label.pack()
self.type_var = tk.StringVar(value='期末成绩')
self.type_box = tk.OptionMenu(master, self.type_var, '期末成绩', '总成绩')
self.type_box.pack(pady=10)
# 创建分析按钮和结果显示框
self.analyze_btn = tk.Button(master, text='开始分析', command=self.analyze_data)
self.analyze_btn.pack(pady=10)
self.result_text = tk.Text(master, height=10, width=50)
self.result_text.pack(pady=10)
def choose_folder(self):
# 弹出文件选择框,选择要分析的文件夹
self.folder_path = filedialog.askdirectory()
messagebox.showinfo('提示', '选择文件夹成功!')
def analyze_data(self):
# 获取要分析的数据类型
data_type = self.type_var.get()
# 定义分段区间
ranges = ['>=90', '>=80 and <90', '>=70 and <80', '>=60 and <70', '<60 and >=0']
# 初始化每个区间的人数为0
counts = [0] * len(ranges)
# 统计总人数
total_count = 0
# 遍历每个文件
for file in os.listdir(self.folder_path):
if file.endswith('.xlsx'):
# 读取excel文件
df = pd.read_excel(os.path.join(self.folder_path, file))
# 统计总人数
total_count += len(df)
# 统计每个区间的人数
if data_type == '期末成绩':
for i in range(len(ranges)):
if i == 0:
counts[i] += len(df[df['期末成绩'] >= 90])
elif i == len(ranges) - 1:
counts[i] += len(df[df['期末成绩'] < 60])
else:
counts[i] += len(df[(df['期末成绩'] >= (len(ranges) - i) * 10) & (df['期末成绩'] < (len(ranges) - i + 1) * 10)])
elif data_type == '总成绩':
for i in range(len(ranges)):
if i == 0:
counts[i] += len(df[df['总成绩'] >= 90])
elif i == len(ranges) - 1:
counts[i] += len(df[df['总成绩'] < 60])
else:
counts[i] += len(df[(df['总成绩'] >= (len(ranges) - i) * 10) & (df['总成绩'] < (len(ranges) - i + 1) * 10)])
# 输出每个区间的人数和比例
result_str = ''
for i in range(len(ranges)):
result_str += '{}: {}人,占比{:.2%}\n'.format(ranges[i], counts[i], counts[i] / total_count)
# 在界面上显示结果
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, result_str)
# 将结果保存到CSV文件中
with open('result.csv', 'w') as f:
f.write('分数段,人数,占比\n')
for i in range(len(ranges)):
f.write('{},{}人,{:.2%}\n'.format(ranges[i], counts[i], counts[i] / total_count))
messagebox.showinfo('提示', '分析完成!结果已保存到result.csv文件中。')
root = tk.Tk()
app = AnalysisApp(root)
root.mainloop()
```
运行该程序后,会弹出一个界面,用户可以选择要分析的文件夹和数据类型。点击“开始分析”按钮后,程序会统计数据并在界面上显示结果,同时将结果保存到“result.csv”文件中。此外,该程序还对界面进行了美化,使用户操作更加友好。
阅读全文