使用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中使用Queue和Condition进行线程同步的方法
Jan 19 Python
python实现按行切分文本文件的方法
Apr 18 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python查找文件中包含中文的行方法
Dec 19 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Python object类中的特殊方法代码讲解
Mar 06 Python
python批量修改交换机密码的示例
Sep 22 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
python开发一款翻译工具
Oct 10 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
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
Python的pycurl包用法简介
2015/11/13 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
详解Python 函数如何重载?
2019/04/23 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
安全生产检讨书
2014/01/21 职场文书
机关出纳岗位职责
2014/04/03 职场文书
我爱读书演讲稿
2014/05/07 职场文书
装配出错检讨书
2014/09/23 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2015年酒店工作总结
2015/04/28 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
nginx配置限速限流基于内置模块
2022/05/02 Servers