使用Python制作一个数据预处理小工具(多种操作一键完成)


Posted in Python onFebruary 07, 2021

在我们平常使用Python进行数据处理与分析时,在import完一大堆库之后,就是对数据进行预览,查看数据是否出现了缺失值、重复值等异常情况,并进行处理。

使用Python制作一个数据预处理小工具(多种操作一键完成)

本文将结合GUI工具PySimpleGUI,来讲解如何制作一款属于自己的数据预处理小工具,让这个过程也能够自动化!最终效果如下

使用Python制作一个数据预处理小工具(多种操作一键完成)

本文将分为三部分讲解:

  • 制作GUI界面
  • 数据处理讲解
  • 打包与测试

主要涉及将涉及以下模块:

  • PySimpleGUI
  • pandas
  • matplotlib

一、GUI界面制作

思路

老规矩,先讲思路再上代码,首先还是说一下,使用PySimpleGUI还是那四个流程

引入模块==>创建元素并填充layout==> 创建窗体 ==>创建事件循环

从元素看,从图中可以知道我们需要的元素有使用说明这个菜单栏、看上去是凹下去的数据预处理框、框内的3个单选项值、读取文件路径的3个元素(固定文本、输入文本、浏览按钮)、"查看、处理、关闭"三个按钮。

从总体看,整个窗体中我们需要所有的元素呈现正中间的分布状态。其中菜单栏在窗体边缘靠左分布。采用行衔接式的总分布。

从事件上看,我们需要在使用说明菜单中加上使用者需要的注意事项。而文件读取位置我们设置我们常用的2种数据存储格式(“.xlsx”,“.xls”)的Excel格式。

读取后,我们在数据预处理框架选择一种处理。接着,我们可以对每一种错误进行弹出框查看,查看完之后对数据做最终处理。

处理的过程需要将处理好的数据覆盖原来的数据文件。整个过程必须是持续不间断的。这里说个tips:每次数据分析之前最好做一个备份,防止分析过程中失败但是又找不到原来数据文件的尴尬。

代码

看望思路后是不是有种蠢蠢欲动的感觉?!我们来实现一波,先看完整代码,后面详细拆解

import PySimpleGUI as sg 
import pandas as pd 
import matplotlib 
matplotlib.use("TkAgg") 
sg.ChangeLookAndFeel('GreenTan') 
menu_def = [['&使用说明', ['&注意']]] 
layout = [ 
  [sg.Menu(menu_def, tearoff=True)], 
  [sg.Frame(layout=[ 
  [sg.Radio('重复值处理', "RADIO1",size=(15,1),key="dup"), sg.Radio('缺失值处理', "RADIO1",size=(15,1),key="mis"), sg.Radio('异常值处理', "RADIO1",default=True,key="war")]], title='数据预处理',title_color='green',title_location='n',relief=sg.RELIEF_SUNKEN, tooltip='选择其中一种处理方式' )], 
  [sg.Text('文件位置', size=(8, 1), auto_size_text=False, justification='right'), 
   sg.InputText(enable_events=True,key="lujing"), sg.Button('浏览',key = 'getf')], 
  [sg.Button('查看',key = 'look'),sg.Submit('处理',key = 'handle'), sg.Cancel('关闭')]] 
 
window = sg.Window('特征工程', layout, default_element_size=(40, 1), grab_anywhere=False) 
while True: 
  event, values = window.read() 
  if event == 'getf': 
    text = sg.popup_get_file('请点击浏览键或自行填入文件绝对路径',title = '获取件',file_types = (("Excel Files", "*.xlsx"),("Excel Files", "*.xls"),)) 
    sg.popup('提示', '是否确认选择文件---', text) 
    window['lujing'].update(text)  
  if event == "look": 
 ''' 
 用户点击查看按钮促发的事件 
 ''' 
  if event == "handle": 
 ''' 
 用户点击处理按钮促发的事件 
 '''    
  if event == "Cancel" or event == sg.WIN_CLOSED: 
    break   
  if event == "注意": 
 ''' 
 注意事项编写 
 '''

代码解释

其实有了思路后,你就会发现似乎一切都变得简单了。接下来讲解相关参数的作用。

首先是matplotlib.use("TkAgg"):使用matplotlib模块并且调用这个函数的目的是在我们进行查看异常值处理(箱型图展示)所用到,是改变图像显示的方式:TkAgg(一个交互式后台)。

所谓交互式后台就是你可以对图像进行任意操作,区域放大缩小、值查看等功能。

之所以调用这个函数首先是因为我们使用的是GUI是要有那种交互的感觉的,其次是如果数据量较大时,箱型图会很小,这样子可以利于查看。

其次sg.ChangeLookAndFeel('GreenTan'):改变窗体颜色。

那么menu_def就是菜单栏,使用【“”,【“”】】这种格式来定义主菜单栏和子菜单栏。tearoff这个函数是加一条可爱的虚线间隔每个字段。

sg.Frame():这个和sg.columns()元素的用法是一样的,主要是用来多个子元素的,我们这里设置了relief参数来让整个框架在观感上显得凹形。tooltip参数是你鼠标移动框架的位置出现的小提示框。

title_location参数的用法非常有趣,是标题字符串的位置设置,有(n,s,e,w,se等),你很快会发现这个位置和其他元素布局位置设置不一样,他是以地理位置坐标做子参数的。

sg.Radio:单选选项框,要将所有的单选选项框的子参数group_id都设成一样的,这样你才能三个选项中选一个,这里我们以"RADIO1"为group_id。

sg.Button():整个GUI中我们使用了4个按钮,其中有一个专有的按钮Cancel。

sg.popup():比较初级的弹出框,显示提示类的关键信息所用到。

sg.popup_get_file():这是一个高级的弹出框元素,是从带有文本输入字段和浏览按钮的弹出窗口,以便用户选择文件。效果如下

使用Python制作一个数据预处理小工具(多种操作一键完成)

二、数据预处理

GUI部分搞定后,接着我们讲解数据处理部分,主要是针对重复值、缺失值和异常值。

数据准备

我们这里用到的是2020年10月28日A股的行情。数据部分展示:

使用Python制作一个数据预处理小工具(多种操作一键完成)

我们可以看到这里面有重复的行、有缺失值的地方。

重复值处理

对于二维列表DataFrame来讲使用Pandas模块是最方便最象征办公简洁化的模块

import pandas as pd 
df = df.read_excel('文件绝对路径') 
imfor = df[df.duplicated()] 
imfor = str(imfor)

首先调用Pandas模块并读取文件路径,这里我们采取绝对路径而不采取相对路径的原因是我们之后打包的GUI是不依靠文件的靠Python自带的环境,所以相对路径读取是无法识别的。

df[df.duplicated()]这个Pandas内的函数是以二维列表形式来打印重复值对应的行。这里把df变量变为str字符串形式是因为我们在后来GUI中使用弹出窗口的元素时要以字符串形式加载。

最终处理重复值的方法如下:

df = df.drop_duplicates(inplace = True)

代码只有一行,却能做到将整个数据表中的重复值都删除,说明Pandas函数的强大。

至于为什么用inplace = True,是因为删除函数不并不能改变原表格结构,所以需要将新表覆盖原来的表格。

缺失值处理

先看代码,其实在之前有关缺失值处理我在一年前就写过相关文章点击查看

import pandas as pd 
df = df.read_excel('文件绝对路径') 
#df.isnull() 
imfor1 = df.isnull().sum() 
#df.isnull().any() 
imfor1 = str(imfor1)

对于有缺失值的的数据表来说,df.isnull()或者df.isna()来查看空值。这个函数的作用时判断是否为空值,若是为空值则赋予True,否则赋予False。

这里我们使用df.isnull().sum()来统计每一列字段的缺失值数量。如果数据量大的话,还可以使用df.isnull().any()来查看只有缺失值的行。

解决方法,处理缺失值的方法有很多种,取均值、取中位数、删除、取下方的值等。我们这里用取上方值的方法来填补。

df = df.fillna(method='pad')

异常值处理

所谓异常值,就是在一个数字字段里出现一个或多个不合群得数字。举个例子,在一列都为个位数得数字列中出现了一个百位数的数字,这个百位数就是异常值。

用Python检测异常值有两种:箱线图图观察和标准差观察。这里我们选则箱体图观察。

箱线图是用于显示所选数据分散情况的统计图,通过设定标准,将大于或小于箱体图上下线的数值表示为异常点。

使用Python制作一个数据预处理小工具(多种操作一键完成)

如图,下四分分位数指的是样本中有百分之25的数据小于这个数,记为。上四分分位数指的是样本中有百分之25大于这个数,记为。上四分位数和下四分位数的差值的1.5倍加上上四分位数就是上边缘,反之为下边缘。

使用Python制作一个数据预处理小工具(多种操作一键完成)

在Pandas中可以调用.boxplot()函数来画箱型图
import pandas as pd 
df.boxplot()

使用Python制作一个数据预处理小工具(多种操作一键完成)

打包与效果展示

在写完全部代码之后,我们可以使用pyinstaller进行打包。

假定你的程序命名为yuchuli.py,在cmd窗口输入即可完成打包。

pyinstaller -F yuchuli.py

打包后,exe在Python文件所在文件夹的dist文件夹中。我们启动来看下效果

使用Python制作一个数据预处理小工具(多种操作一键完成)

使用Python制作一个数据预处理小工具(多种操作一键完成)

使用Python制作一个数据预处理小工具(多种操作一键完成)

可以看到,我们需要的数据预处理的三个功能:重复值、缺失值、异常值都能按照指定方式进行处理!

当然你可以在本文提供的方法上,自己进行修改,来定制一款属于你自己平时习惯的数据预处理小软件!

到此这篇关于使用Python制作一个数据预处理小工具(多种操作一键完成)的文章就介绍到这了,更多相关Python数据预处理小工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 Python
Django中提供的6种缓存方式详解
Aug 05 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
通过实例学习Python Excel操作
Jan 06 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
Python在字符串中处理html和xml的方法
Jul 31 Python
Pandas数据分析的一些常用小技巧
Feb 07 #Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
Feb 07 #Python
python实现经典排序算法的示例代码
Feb 07 #Python
Python自动化测试基础必备知识点总结
Feb 07 #Python
10张动图学会python循环与递归问题
Feb 06 #Python
PyCharm 光标变成黑块的解决方式
Feb 06 #Python
使用Python下载抖音各大V视频的思路详解
Feb 06 #Python
You might like
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
PHP学习记录之数组函数
2018/06/01 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
利用python代码写的12306订票代码
2015/12/20 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
德国帽子专家:Hutshopping
2019/11/03 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
大学军训感言300字
2014/03/09 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
关于责任的演讲稿
2014/05/20 职场文书