使用Tkinter构建数据预处理、模型训练和测试工具
使用Python Tkinter库构建一个GUI应用程序,实现数据预处理、模型训练、测试和评估功能。该工具可用于加载CSV数据,进行数据清理和转换,训练线性回归模型,并对模型进行测试和评估。
首先,我们需要导入必要的库和模块:
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
接下来,我们需要创建一个窗口和几个标签(Label):
root = tk.Tk()
root.title('数据预处理、模型训练和测试')
# 创建标签
label_title = tk.Label(root, text='数据预处理、模型训练和测试', font=('Arial', 20))
label_title.pack()
label_data = tk.Label(root, text='数据预处理', font=('Arial', 16))
label_data.pack()
label_train = tk.Label(root, text='模型训练', font=('Arial', 16))
label_train.pack()
label_test = tk.Label(root, text='模型测试和评估', font=('Arial', 16))
label_test.pack()
接下来,让我们来实现数据预处理的功能。我们可以通过'浏览'按钮选择一个CSV文件,然后将其加载到一个Pandas数据框中。然后,我们可以选择要删除的列和行,并将结果保存为一个新的CSV文件。
def load_data():
# 打开文件选择器
file_path = filedialog.askopenfilename()
# 读取CSV文件
data = pd.read_csv(file_path)
# 创建一个新窗口
top = tk.Toplevel()
top.title('数据预处理')
# 创建标签和文本框
label_delete_columns = tk.Label(top, text='要删除的列(逗号分隔):')
label_delete_columns.pack()
entry_delete_columns = tk.Entry(top)
entry_delete_columns.pack()
label_delete_rows = tk.Label(top, text='要删除的行(逗号分隔):')
label_delete_rows.pack()
entry_delete_rows = tk.Entry(top)
entry_delete_rows.pack()
# 创建'保存'按钮
def save_data():
# 获取要删除的列和行
delete_columns = entry_delete_columns.get().split(',')
delete_rows = entry_delete_rows.get().split(',')
# 删除指定的列和行
data = data.drop(delete_columns, axis=1)
data = data.drop(delete_rows, axis=0)
# 打开文件保存对话框
file_path = filedialog.asksaveasfilename(defaultextension='.csv')
# 保存数据框为CSV文件
data.to_csv(file_path, index=False)
# 显示消息框
messagebox.showinfo('保存成功', '数据已保存为CSV文件!')
button_save = tk.Button(top, text='保存', command=save_data)
button_save.pack()
接下来,让我们来实现模型训练的功能。我们可以通过'浏览'按钮选择一个CSV文件,然后将其加载到一个Pandas数据框中。然后,我们可以选择要用作自变量和因变量的列,并使用线性回归模型进行训练。
def train_model():
# 打开文件选择器
file_path = filedialog.askopenfilename()
# 读取CSV文件
data = pd.read_csv(file_path)
# 创建一个新窗口
top = tk.Toplevel()
top.title('模型训练')
# 创建标签和文本框
label_x_column = tk.Label(top, text='自变量列:')
label_x_column.pack()
entry_x_column = tk.Entry(top)
entry_x_column.pack()
label_y_column = tk.Label(top, text='因变量列:')
label_y_column.pack()
entry_y_column = tk.Entry(top)
entry_y_column.pack()
# 创建'训练'按钮
def train():
# 获取自变量和因变量列
x_column = entry_x_column.get()
y_column = entry_y_column.get()
# 将自变量和因变量分离
X = data[x_column].values.reshape(-1, 1)
y = data[y_column].values.reshape(-1, 1)
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 使用线性回归模型进行训练
model = LinearRegression()
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
# 显示均方误差
messagebox.showinfo('均方误差', f'均方误差为:{mse}')
button_train = tk.Button(top, text='训练', command=train)
button_train.pack()
最后,让我们来实现模型测试和评估的功能。我们可以通过'浏览'按钮选择一个CSV文件,然后将其加载到一个Pandas数据框中。然后,我们可以选择要用作自变量和因变量的列,并使用之前训练的线性回归模型进行预测和评估。
def test_model():
# 打开文件选择器
file_path = filedialog.askopenfilename()
# 读取CSV文件
data = pd.read_csv(file_path)
# 创建一个新窗口
top = tk.Toplevel()
top.title('模型测试和评估')
# 创建标签和文本框
label_x_column = tk.Label(top, text='自变量列:')
label_x_column.pack()
entry_x_column = tk.Entry(top)
entry_x_column.pack()
label_y_column = tk.Label(top, text='因变量列:')
label_y_column.pack()
entry_y_column = tk.Entry(top)
entry_y_column.pack()
# 创建'测试和评估'按钮
def test_and_evaluate():
# 获取自变量和因变量列
x_column = entry_x_column.get()
y_column = entry_y_column.get()
# 将自变量和因变量分离
X = data[x_column].values.reshape(-1, 1)
y = data[y_column].values.reshape(-1, 1)
# 在测试集上进行预测
y_pred = model.predict(X)
# 计算均方误差
mse = mean_squared_error(y, y_pred)
# 显示均方误差
messagebox.showinfo('均方误差', f'均方误差为:{mse}')
button_test = tk.Button(top, text='测试和评估', command=test_and_evaluate)
button_test.pack()
接下来,我们需要创建三个按钮,分别对应数据预处理、模型训练和模型测试和评估的功能:
# 创建按钮
button_load_data = tk.Button(root, text='浏览', command=load_data)
button_load_data.pack()
button_train_model = tk.Button(root, text='浏览', command=train_model)
button_train_model.pack()
button_test_model = tk.Button(root, text='浏览', command=test_model)
button_test_model.pack()
# 运行主循环
root.mainloop()
完整代码如下:
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
root = tk.Tk()
root.title('数据预处理、模型训练和测试')
# 创建标签
label_title = tk.Label(root, text='数据预处理、模型训练和测试', font=('Arial', 20))
label_title.pack()
label_data = tk.Label(root, text='数据预处理', font=('Arial', 16))
label_data.pack()
label_train = tk.Label(root, text='模型训练', font=('Arial', 16))
label_train.pack()
label_test = tk.Label(root, text='模型测试和评估', font=('Arial', 16))
label_test.pack()
def load_data():
# 打开文件选择器
file_path = filedialog.askopenfilename()
# 读取CSV文件
data = pd.read_csv(file_path)
# 创建一个新窗口
top = tk.Toplevel()
top.title('数据预处理')
# 创建标签和文本框
label_delete_columns = tk.Label(top, text='要删除的列(逗号分隔):')
label_delete_columns.pack()
entry_delete_columns = tk.Entry(top)
entry_delete_columns.pack()
label_delete_rows = tk.Label(top, text='要删除的行(逗号分隔):')
label_delete_rows.pack()
entry_delete_rows = tk.Entry(top)
entry_delete_rows.pack()
# 创建'保存'按钮
def save_data():
# 获取要删除的列和行
delete_columns = entry_delete_columns.get().split(',')
delete_rows = entry_delete_rows.get().split(',')
# 删除指定的列和行
data = data.drop(delete_columns, axis=1)
data = data.drop(delete_rows, axis=0)
# 打开文件保存对话框
file_path = filedialog.asksaveasfilename(defaultextension='.csv')
# 保存数据框为CSV文件
data.to_csv(file_path, index=False)
# 显示消息框
messagebox.showinfo('保存成功', '数据已保存为CSV文件!')
button_save = tk.Button(top, text='保存', command=save_data)
button_save.pack()
def train_model():
# 打开文件选择器
file_path = filedialog.askopenfilename()
# 读取CSV文件
data = pd.read_csv(file_path)
# 创建一个新窗口
top = tk.Toplevel()
top.title('模型训练')
# 创建标签和文本框
label_x_column = tk.Label(top, text='自变量列:')
label_x_column.pack()
entry_x_column = tk.Entry(top)
entry_x_column.pack()
label_y_column = tk.Label(top, text='因变量列:')
label_y_column.pack()
entry_y_column = tk.Entry(top)
entry_y_column.pack()
# 创建'训练'按钮
def train():
# 获取自变量和因变量列
x_column = entry_x_column.get()
y_column = entry_y_column.get()
# 将自变量和因变量分离
X = data[x_column].values.reshape(-1, 1)
y = data[y_column].values.reshape(-1, 1)
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 使用线性回归模型进行训练
model = LinearRegression()
model.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
# 显示均方误差
messagebox.showinfo('均方误差', f'均方误差为:{mse}')
button_train = tk.Button(top, text='训练', command=train)
button_train.pack()
def test_model():
# 打开文件选择器
file_path = filedialog.askopenfilename()
# 读取CSV文件
data = pd.read_csv(file_path)
# 创建一个新窗口
top = tk.Toplevel()
top.title('模型测试和评估')
# 创建标签和文本框
label_x_column = tk.Label(top, text='自变量列:')
label_x_column.pack()
entry_x_column = tk.Entry(top)
entry_x_column.pack()
label_y_column = tk.Label(top, text='因变量列:')
label_y_column.pack()
entry_y_column = tk.Entry(top)
entry_y_column.pack()
# 创建'测试和评估'按钮
def test_and_evaluate():
# 获取自变量和因变量列
x_column = entry_x_column.get()
y_column = entry_y_column.get()
# 将自变量和因变量分离
X = data[x_column].values.reshape(-1, 1)
y = data[y_column].values.reshape(-1, 1)
# 在测试集上进行预测
y_pred = model.predict(X)
# 计算均方误差
mse = mean_squared_error(y, y_pred)
# 显示均方误差
messagebox.showinfo('均方误差', f'均方误差为:{mse}')
button_test = tk.Button(top, text='测试和评估', command=test_and_evaluate)
button_test.pack()
# 创建按钮
button_load_data = tk.Button(root, text='浏览', command=load_data)
button_load_data.pack()
button_train_model = tk.Button(root, text='浏览', command=train_model)
button_train_model.pack()
button_test_model = tk.Button(root, text='浏览', command=test_model)
button_test_model.pack()
# 运行主循环
root.mainloop()
原文地址: https://www.cveoy.top/t/topic/ojd2 著作权归作者所有。请勿转载和采集!