数据集处理工具:缺失值处理、模型训练和可视化
这是一个使用 Python 的 tkinter 库构建的数据集处理工具,可以进行缺失值检测和填充、数据划分、模型训练,并显示结果。
功能:
- 选择数据集: 可以从本地选择 csv 格式的数据集。
- 缺失值检测: 检测数据集中的缺失值并显示结果。
- 缺失值填充: 使用均值或后向填充方法填充缺失值。
- 数据划分: 根据用户输入的训练集比例,将数据集划分为训练集和测试集。
- 模型训练: 支持三种模型:逻辑回归、K近邻和高斯模型。
- 模型评估: 显示训练后的模型准确率。
- 可视化: 提供图形界面,方便用户查看处理结果。
使用方法:
- 运行程序,打开一个窗口。
- 点击 '选择csv数据集' 按钮,选择要处理的 csv 数据集。
- 点击 '缺失值检测' 按钮查看数据集的缺失值情况。
- 点击 '缺失值填充' 按钮填充缺失值。
- 在 '确定训练集比例' 的输入框中输入训练集比例(例如 0.7 表示 70% 的数据用于训练)。
- 点击 '确定训练集比例' 按钮进行数据划分。
- 点击 '逻辑回归模型'、'K近邻模型' 或 '高斯模型' 按钮,训练对应的模型。
代码:
import tkinter as tk
import pandas as pd
import numpy as np
from tkinter import *
from tkinter import messagebox #一个弹窗库
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
from tkinter import filedialog
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.pyplot as plt
root = Tk()#创建一个窗口
root.title('数据集处理窗口')#给窗口命名
root.geometry('2000x1000')#设置窗口的大小
lb1 =Label(root, text='选择数据集')#root是主体,text是内容
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)#设置位置
data=pd.read_csv('train.csv')
def openfile():#打开文件并显示
openfile = filedialog.askopenfilename() #获得选择好的文件,单个文件
imgtype=['.csv']#规定读取的文件类型
return openfile
def duru(txt):
txt=pd.read_csv(txt,engine='python')
txt=txt.describe()
text = Text(root)
text.place(rely=0.6, relheight=0.4)
text.insert(END,txt)
c=True
def jiance():
t=data.isnull().any()
global c
global yu1
if c==True:
c=False
yu1=Label(root,text=t)
yu1.pack(side='right')
else:
yu1.pack_forget()
c=True
def tianchong():
global a
global yu2
a1=data.fillna(data.mean())
a=a1.fillna(method='bfill')
global c
if c==True:
c=False
yu2=Label(root,text=a)
yu2.pack(side='right')
else:
yu2.pack_forget()
c=True
#选择数据集、关闭、缺失值检测、缺失值填充、数据划分、标准化(逻辑回归、线性回归、贝叶斯模型、基尼系数)、制作各种图形(可视化)
btn1 =Button(root,text='选择csv数据集',command=lambda:duru(openfile()))
btn1.place(relx=0.3, rely=0.2, relwidth=0.1, relheight=0.1)
btn2 = Button(root, text='关闭窗口', command=root.destroy)
btn2.place(relx=0.6, rely=0.2, relwidth=0.1,relheight=0.1)
btn3 = Button(root, text='缺失值检测', command=lambda:jiance())#调用来处理缺失值
btn3.place(relx=0.4, rely=0.2, relwidth=0.1,relheight=0.1)
btn4 = Button(root, text='缺失值填充', command=lambda:tianchong())#调用queshizhi函数来处理缺失值
btn4.place(relx=0.5, rely=0.2, relwidth=0.1,relheight=0.1)#设置位置
iris_data=pd.read_csv('train.csv')
X=iris_data[['android_id','media_id','cus_type','package']]
y=iris_data[['label']]
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=10)
def func1():
global a1
my_model=LogisticRegression()
my_model.fit(X_train,y_train)
y_pred=my_model.predict(X_test)
score=metrics.accuracy_score(y_test,y_pred)
a1=Label(root,text=('逻辑回归模型的准确率为:',score),font=('微软雅黑 -20')) #font指定字体和字体大小的参数
a1.place(relx=0.2, rely=0.6, relwidth=0.5, relheight=0.1) #place确定窗体布局的方法
def func2():
global a2
my_model=KNeighborsClassifier()
my_model.fit(X_train,y_train)
y_pred=my_model.predict(X_test)
score=metrics.accuracy_score(y_test,y_pred)
a2=Label(root,text=('K近邻模型的准确率为:',score),font=('微软雅黑 -20'))
a2.place(relx=0.2, rely=0.7, relwidth=0.5, relheight=0.1)
def func3():
global a3
my_model=GaussianNB()
my_model.fit(X_train,y_train)
y_pred=my_model.predict(X_test)
score=metrics.accuracy_score(y_test,y_pred)
a3=Label(root,text=('高斯模型的准确率为:',score),font=('微软雅黑 -20'))
a3.place(relx=0.2, rely=0.8, relwidth=0.5, relheight=0.1)
def func4():
global X_train,X_test,y_train,y_test
global b1
a=float(var1.get())
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=a,random_state=10)
b1=Label(root,text=('训练集占比为:',1-a,',测试集占比为:',a),font=('微软雅黑 -20'))
b1.place(relx=0.2, rely=0.3, relwidth=0.5, relheight=0.1)
var1=StringVar() #输入框变量
entry=Entry(root,textvariable=var1)
entry.place(relx=0.35, rely=0.3, relwidth=0.1,relheight=0.05)
btn8 =Button(root,text='确定训练集比例',command=lambda:func4())
btn8.place(relx=0.45, rely=0.3, relwidth=0.1, relheight=0.1)
btn5 =Button(root,text='逻辑回归模型',command=lambda:func1())
btn5.place(relx=0.35, rely=0.4, relwidth=0.1, relheight=0.1)
btn6 = Button(root, text='K近邻模型', command=lambda:func2())
btn6.place(relx=0.45, rely=0.4, relwidth=0.1,relheight=0.1)
btn7 = Button(root, text='高斯模型', command=lambda:func3())
btn7.place(relx=0.55, rely=0.4, relwidth=0.1,relheight=0.1)
root.mainloop()#让窗口一直循环下去
注意:
- 确保你的系统已经安装了必要的 Python 库,包括
tkinter、pandas、numpy、sklearn和matplotlib。 - 将代码中的 'train.csv' 替换为你的数据集文件名。
- 可以根据需要调整代码中的模型和可视化部分。
更多功能:
- 可以添加更多模型选择,例如支持决策树、随机森林等。
- 可以添加更多可视化功能,例如绘制混淆矩阵、ROC 曲线等。
- 可以添加数据预处理功能,例如特征缩放、特征选择等。
- 可以添加结果保存功能,将训练结果保存到文件。
原文地址: http://www.cveoy.top/t/topic/olfC 著作权归作者所有。请勿转载和采集!