帮我写一个python归一化算法,包含功能如下:1.让用户选择是手动输入数据还是按照模板导入数据;2.根据用户选择如果是手动输入数据,告诉用户用什么区分多个数据,回车结束输入,根据用户输入的数据及个数来计算归一化结果;3.如果选择导入数据,需要设计个用户填数的Excel模板,让用户下载模板通过下载的模板填入数据,上传回来,跟据上传的Excel表格判断数据的个数及数据值,然后计算归一化值;4.此程序要能打包成exe文件
时间: 2024-03-05 12:52:09 浏览: 182
好的,以下是一个基本的归一化算法的Python实现,包含了你提到的功能:
```python
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tkinter import *
from tkinter import filedialog
class Normalization:
def __init__(self):
self.root = Tk()
self.root.title("数据归一化")
self.root.geometry("300x150")
self.root.resizable(width=False, height=False)
self.label = Label(self.root, text="请选择数据输入方式:", font=("Arial", 12))
self.label.pack()
self.manual_input_button = Button(self.root, text="手动输入数据", command=self.manual_input)
self.manual_input_button.pack(pady=10)
self.import_data_button = Button(self.root, text="导入数据", command=self.import_data)
self.import_data_button.pack()
def manual_input(self):
self.root.destroy()
self.manual_input_window = Tk()
self.manual_input_window.title("手动输入数据")
self.manual_input_window.geometry("300x200")
self.manual_input_window.resizable(width=False, height=False)
self.label = Label(self.manual_input_window, text="请输入数据,用逗号分隔每个数据,按回车结束输入:", font=("Arial", 12))
self.label.pack()
self.input_box = Text(self.manual_input_window, height=5)
self.input_box.pack(pady=10)
self.submit_button = Button(self.manual_input_window, text="提交", command=self.normalize_manual_input)
self.submit_button.pack()
def normalize_manual_input(self):
data = self.input_box.get("1.0", END).strip().split(",")
data = pd.DataFrame(data, columns=["data"])
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print(normalized_data)
def import_data(self):
self.root.destroy()
self.import_data_window = Tk()
self.import_data_window.title("导入数据")
self.import_data_window.geometry("300x150")
self.import_data_window.resizable(width=False, height=False)
self.label = Label(self.import_data_window, text="请先下载模板,按照模板填入数据,再上传:", font=("Arial", 12))
self.label.pack(pady=10)
self.download_button = Button(self.import_data_window, text="下载模板", command=self.download_template)
self.download_button.pack()
self.upload_button = Button(self.import_data_window, text="上传数据", command=self.normalize_imported_data)
self.upload_button.pack(pady=10)
def download_template(self):
file_path = filedialog.asksaveasfilename(defaultextension=".xlsx")
data = {"data": ["", "", "", "", ""]}
df = pd.DataFrame(data)
df.to_excel(file_path, index=False)
def normalize_imported_data(self):
file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
data = pd.read_excel(file_path)
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print(normalized_data)
def run(self):
self.root.mainloop()
if __name__ == "__main__":
normalizer = Normalization()
normalizer.run()
```
这个程序使用了`pandas`和`sklearn`库进行数据的归一化。在用户界面中,你可以选择手动输入数据或者导入数据。如果选择手动输入数据,程序将让用户用逗号分隔每个数据,按回车结束输入。如果选择导入数据,程序将会下载一个Excel模板,让用户按照模板填入数据,再上传Excel文件。程序会自动判断数据的个数及数据值,然后计算归一化值。最后,这个程序可以使用PyInstaller等工具打包成exe文件,以便在Windows系统上运行。
阅读全文