使用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()
使用Tkinter构建数据预处理、模型训练和测试工具

原文地址: https://www.cveoy.top/t/topic/ojd2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录