import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import pandas as pd import numpy as np from tkinter import * from tkinter import filedialog from sklearn import preprocessing from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import GaussianNB from sklearn.neighbors import KNeighborsClassifier from sklearn import metrics import matplotlib.pyplot as plt from pyecharts.charts import Pie from pyecharts.charts import Bar from sklearn.ensemble import RandomForestClassifier from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg as FigureCanvas from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk

root = tk.Tk() root.geometry('500x400+500+300') root.title('登录页')

username = tk.StringVar() password = tk.StringVar()

page = tk.Frame(root) page.pack()

tk.Label(page).grid(row=0, column=0) tk.Label(page, text='账户:').grid(row=1, column=1) tk.Entry(page, textvariable=username).grid(row=1, column=2)

tk.Label(page, text='密码:').grid(row=2, column=1, pady=10) tk.Entry(page, textvariable=password).grid(row=2, column=2)

def login(): name = username.get() pwd = password.get() print(name, pwd)

if name == 'admin' and pwd == '123456':
        
    messagebox.showwarning(title='验证', message='登陆成功')
    print('登陆成功')
    root.destroy()
    mainwindow()
else:
    messagebox.showwarning(title='警告', message='登陆失败')

tk.Button(page, text='登录', command=login).grid(row=3, column=1, pady=10) tk.Button(page, text='退出', command=page.quit).grid(row=3, column=2)

def mainwindow(): mainwindow.root = tk.Tk() mainwindow.root.geometry('500x250') mainwindow.root.title('数据处理系统')

page2 = tk.Frame(mainwindow.root)

width = 600
height = 400
screenwidth = mainwindow.root.winfo_screenwidth()
screenheight = mainwindow.root.winfo_screenheight()
x = (screenwidth - width) / 2
y = (screenheight - height) / 2
mainwindow.root.geometry('%dx%d+%d+%d' % (width, height, x, y))

# 添加欢迎文本
name_label = tk.Label(mainwindow.root, text='欢迎进入系统', bg='pink', fg='white', font=('Arial', 24))
name_label.pack(pady=50)


# create a menu bar
menu_bar = tk.Menu(mainwindow.root)
mainwindow.root.config(menu=menu_bar)

# create a file menu
file_menu = tk.Menu(menu_bar)

def shujuyuchuli():
    yuchuliwindow()

def huitu():
    huituwindow()

menu_bar.add_cascade(label='菜单:', menu=file_menu)
menu_bar.add_command(label='数据预处理', command=shujuyuchuli)
menu_bar.add_command(label='绘制图像',command=huitu)

mainwindow.root.mainloop()

def yuchuliwindow():

GUI界面

root = tk.Tk()
root.title('数据预处理和模型训练')
root.geometry('400x400')

# 文件选择函数
def select_file():
    filepath = filedialog.askopenfilename()
    file_entry.delete(0, tk.END)
    file_entry.insert(0, filepath)

# 数据读取和预处理函数
def process_data():
    # 读入数据集
    filepath = file_entry.get()
    df = pd.read_csv(filepath)

    # 数据清洗
    df.dropna(inplace=True)

    # 数据标准化
    scaler = StandardScaler()
    scaled_data = scaler.fit_transform(df)

    # 输出预处理后的数据
    output_text.delete('1.0', tk.END)
    output_text.insert(tk.END, str(scaled_data))

    # 将数据分为特征和标签
    X = scaled_data[:, :-1]
    y = scaled_data[:, -1]

    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # 训练线性回归模型
    model1 = LinearRegression()
    model1.fit(X_train, y_train)

    # 在测试集上评估线性回归模型
    y_pred = model1.predict(X_test)
    r2 = r2_score(y_test, y_pred)
    result_text.delete('1.0', tk.END)
    result_text.insert(tk.END, '线性回归模型评估结果:R2 Score = {:.4f}'.format(r2))
    
    
     # 训练K近邻回归模型
    model2 = KNeighborsClassifier()
    model2.fit(X_train, y_train)

    # 在测试集上评估K近邻线性回归模型
    y_pred = model2.predict(X_test)
    r3 = r3_score(y_test, y_pred)
    result_text.delete('1.0', tk.END)
    result_text.insert(tk.END, 'K近邻模型评估结果:R3 Score = {:.4f}'.format(r3))
           

# 文件选择按钮和输入框
file_label = tk.Label(root, text='请选择数据文件:')
file_label.pack()
file_entry = tk.Entry(root, width=30)
file_entry.pack()
file_button = tk.Button(root, text='选择', command=select_file)
file_button.pack()

# 数据处理按钮和输出框
process_button = tk.Button(root, text='处理数据', command=process_data)
process_button.pack()
output_label = tk.Label(root, text='预处理后的数据:')
output_label.pack()
output_text = tk.Text(root, width=50, height=10)
output_text.pack()

# 线性回归模型训练和评估界面
result_label = tk.Label(root, text='线性回归模型训练和评估')
result_label.pack()
result_text = tk.Text(root, width=50, height=2)
result_text.pack()


 # K近邻模型训练和评估界面
result_label = tk.Label(root, text='K近邻模型训练和评估')
result_label.pack()
result_text = tk.Text(root, width=50, height=2)
result_text.pack()
root.mainloop()


root.mainloop()
  
    
def huituwindow():
    class DataPreprocessor:
        def __init__(self, master):
                self.master = master
                self.data = None
                self.X_train = None
                self.X_test = None
                self.y_train = None
                self.y_test = None
                self.clf = None

                # 窗口布局
                self.load_data_button = tk.Button(master, text='导入数据', command=self.load_data)
                self.load_data_button.place(relx=0.1, rely=0.2, relwidth=0.3, relheight=0.1)

                self.train_button = tk.Button(master, text='训练模型', command=self.train_model)
                self.train_button.place(relx=0.4, rely=0.2, relwidth=0.3, relheight=0.1)


                self.plot_type = tk.StringVar()  # 创建一个变量,用于存储当前选中的图像类型
                self.plot_type.set('请选择图像类型')  # 设置默认值
                self.plot_menu = tk.OptionMenu(master, self.plot_type, '直方图', '饼图', '箱线图')
                self.plot_menu.configure(width=20)
                self.plot_menu.place(relx=0.6, rely=0.3, relwidth=0.3, relheight=0.1)

                self.plot_button = tk.Button(master, text='绘制图像', command=self.plot)
                self.plot_button.place(relx=0.6, rely=0.8, relwidth=0.3, relheight=0.1)

                


        def plot(self):
            plot_type = self.plot_type.get()
            if plot_type == '请选择图像类型':
                tk.messagebox.showwarning(title='Warning', message='请选择图像类型!')
                return
            elif plot_type == '直方图':
                    self.histogram()
            elif plot_type == '饼图':
                    self.pie_chart()
            elif plot_type == '箱线图':
                    self.box_plot()

        def load_data(self):
            # 加载数据集,这里使用 Pandas 库中的 read_csv() 方法
            filename = filedialog.askopenfilename(initialdir='./data', title='Select file', filetypes=(('CSV files', '*.csv'),))
            if not filename:
                return
            self.data = pd.read_csv(filename)
            tk.messagebox.showinfo(title='Info', message=f'成功导入 {self.data.shape[0]} 条数据!')

            # 划分训练集和测试集
            self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(self.data.iloc[:, :-1], self.data.iloc[:, -1], test_size=0.3)
            tk.messagebox.showinfo(title='Info', message=f'成功划分训练集和测试集!')


        def histogram(self):
            # 检查是否已经完成数据导入、划分训练集和测试集、训练模型等操作
            if not hasattr(self, 'X_train') or not hasattr(self, 'X_test') or not hasattr(self, 'y_train') or not hasattr(self, 'y_test') or not self.clf:
                tk.messagebox.showwarning(title='Warning', message='请先导入数据集并划分训练集和测试集,再训练模型!')
                return

            # 绘制直方图
            fig, ax = plt.subplots()
            ax.hist(self.X_train.iloc[:, 0], bins=20)
            ax.set_xlabel('Feature 1')
            ax.set_ylabel('Count')
            ax.set_title('Histogram')
            histogram_window = tk.Toplevel(self.master)
            canvas = FigureCanvasTkAgg(fig, master=histogram_window)
            canvas.draw()
            canvas.get_tk_widget().pack()
            toolbar = NavigationToolbar2Tk(canvas, histogram_window)
            toolbar.update()
            canvas.get_tk_widget().pack()
        def pie_chart(self):
            if not hasattr(self, 'X_train') or not hasattr(self, 'X_test') or not hasattr(self, 'y_train') or not hasattr(self, 'y_test') or not self.clf:
                tk.messagebox.showwarning(title='Warning', message='请先导入数据集并划分训练集和测试集,再训练模型!')
                return
            counts = self.data['species'].value_counts()

                # 创建饼状图
            self.fig = Figure(figsize=(5, 4), dpi=100)
            self.fig.add_subplot(111).pie(counts, labels=counts.index, autopct='%1.1f%%')

                # 在窗口中显示饼状图
            self.canvas = FigureCanvasTkAgg(self.fig, master=self.master)
            self.canvas.draw()
            self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)


        def box_plot(self):
            # 检查是否已经完成数据导入、划分训练集和测试集、训练模型等操作
            if not hasattr(self, 'X_train') or not hasattr(self, 'X_test') or not hasattr(self, 'y_train') or not hasattr(self, 'y_test') or not self.clf:
                tk.messagebox.showwarning(title='Warning', message='请先导入数据集并划分训练集和测试集,再训练模型!')
                return

            # 绘制箱线图,用于展示特征的分布情况
            fig, ax = plt.subplots()
            box_data = pd.concat([self.X_train, self.X_test], axis=1)
            box_data.columns = [f'Feature {i}' for i in range(1, box_data.shape[1]+1)]
            box_data.plot(kind='box', ax=ax)
            ax.set_title('Box plot')
            box_window = tk.Toplevel(self.master)
            canvas = FigureCanvasTkAgg(fig, master=box_window)
            canvas.draw()
            canvas.get_tk_widget().pack()
            toolbar = NavigationToolbar2Tk(canvas, box_window)
            toolbar.update()
            canvas.get_tk_widget().pack()

        def train_model(self):
            # 检查是否已经完成数据导入、划分训练集和测试集等操作
            if not hasattr(self, 'X_train') or not hasattr(self, 'X_test') or not hasattr(self, 'y_train') or not hasattr(self, 'y_test'):
                tk.messagebox.showwarning(title='Warning', message='请先导入数据集并划分训练集和测试集!')
                return

            # 训练模型,这里使用 scikit-learn 库中的 RandomForestClassifier() 方法
            self.clf = RandomForestClassifier(n_estimators=10, max_depth=5)
            self.clf.fit(self.X_train, self.y_train)
            tk.messagebox.showinfo(title='Info', message='成功训练模型!')

    if __name__ == '__main__':
        root = tk.Tk()
        root.geometry('600x400')
        app = DataPreprocessor(root)
        root.mainloop()
root.mainloop()            

root.mainloop()

数据处理系统 - 数据预处理和模型训练

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

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