无论是做机器学习还是做数据分析,都离不开获取数据后的第一步-数据清洗工作。据统计,数据清洗工作占据整个工作时间百分之50左右,有的甚至能达到百分之70。下面我将介绍我进行数据清洗得思路流程。

数据清洗整体流程脑图(不断更新中…)

数据准备

本次数据清洗工作我们使用得数据是一个借贷机构开放的用户数据(仅用于个人练习),由于源数据量有将近30万,考虑到运行速度,这里例子从这30万中随机抽取1万条数据。
下载地址:LCIS.csv
提取码:ag8t
注:此数据仅仅作为方法演示使用,忽略真实数据分析时的业务逻辑考虑。

导入相应的python工具包和数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']#这两句作用为防止中文乱码
plt.rcParams['axes.unicode_minus']=False
data = pd.read_csv('data/LCIS.csv')
data = data.sample(10000)#抽取样例10000个
data.reset_index(inplace=True)#重置索引

数据缺失值判定

一、热力图显示数据的缺失
sns.heatmap(data.isnull(),cmap="YlGnBu")
plt.show()

深颜色的横线就代表缺失值。因为数据中我们使用了innull()方法,若判断为空,则值为1,否则值为0。从上图中,我们可以看到,最后几个属性的缺失值最多,其他的几乎没有。
优点:能够清楚看到哪些地方有缺失,缺失程度。

二、使用info()查看缺失值
print(data.info())



info()这个方法能够统计每个属性下非空值的数量,总个数以及数据量的大小。
优点:操作方便,执行更快,能立刻发现哪个属性存在缺失值。

三、使用apply()统计缺失率
count_missing = data.apply(lambda x:'{}%'.format(round(100*sum(x.isnull())/len(x),2)))
print(count_missing)


通过这样的方法,可以统计出每一个属性的缺失率。
优点:百分比显示缺失率更加直观,对于缺失率高的属性,可以考虑删除。

缺失值处理

一、单行数据删除
data.dropna(inplace=True)

该方法将存在缺失值的数据全部删除,这里省略axis=0,因为axis默认为0.

二、整列属性删除
data.dropna(inplace=True,axis=1)

该方法将存在缺失值的属性删除。

三、均值、众数、0填充缺失值
#单列填充
data['下次计划还款利息'].fillna(value=data['下次计划还款利息'].mean(),inplace=True)
#多列同时填充
data1 = data[['下次计划还款本金','下次计划还款利息']].apply(lambda x:x.fillna(value=x.mean()))

上述方法是均值填充,众数填充只需要将mean()换成mode()[0]
0填充将x.mean()换成0即可。

异常值检测

一、均值标准差异常值检测

此方法公式是:均值±2x标准差
数值不在区间【均值-2x标准差的,均值+2x标准差的】判定为异常值。

datamean = data['下次计划还款利息'].mean()#均值
datastd = data['下次计划还款利息'].std()#标准差
topdata = datamean+2*datastd#上限
bottomdata = datamean-2*datastd#下限
countdata = data['下次计划还款利息'].between(left=bottomdata,right=topdata)
#统计异常值和非异常值数量
print(countdata.value_counts())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、上下四中位和中位差异常值检测

此方法公式:上(下)四中位±1.5x中位差
正常值区间位:【下四中位-1.5x中位差,上四中位+1.5x中位差】

mediandata = data['下次计划还款利息'].quantile(0.75)-data['下次计划还款利息'].quantile(0.25)
topdata = data['下次计划还款利息'].quantile(0.75)+1.5*mediandata
bottomdata = data['下次计划还款利息'].quantile(0.25)-1.5*mediandata
countdata = data['下次计划还款利息'].between(left=bottomdata,right=topdata)
#统计异常值和非异常值数量
print(countdata.value_counts())


这两种方法取决于你的数据,大家可以在实践中尝试选择合适的方法进行异常值检测。

异常值处理

一、异常值删除

异常值删除操作需要两步,第一步是判断,第二步删除

mediandata = data['下次计划还款利息'].quantile(0.75)-data['下次计划还款利息'].quantile(0.25)
topdata = data['下次计划还款利息'].quantile(0.75)+1.5*mediandata
bottomdata = data['下次计划还款利息'].quantile(0.25)-1.5*mediandata
countdata = data['下次计划还款利息'].between(left=bottomdata,right=topdata)
#取出异常值索引
index_list = data[countdata==False].index.tolist()
data['下次计划还款利息'].drop(labels=index_list,inplace=True)

当发现某一列异常值特别多的时候,我们会选择删除改属性。

data.drop(columns=['下次计划还款利息'],axis=1,inplace=True)
二、异常值重写

检测完异常值之后,除了删除数据之外,我们做的最多的就是重写异常值。

使用数据的最大值重写:

mediandata = data['下次计划还款利息'].quantile(0.75)-data['下次计划还款利息'].quantile(0.25)
topdata = data['下次计划还款利息'].quantile(0.75)+1.5*mediandata
bottomdata = data['下次计划还款利息'].quantile(0.25)-1.5*mediandata
countdata = data['下次计划还款利息'].between(left=bottomdata,right=topdata)
index_list = data[countdata==False].index.tolist()
data.loc[index_list ,'下次计划还款利息'] = data[countdata]['下次计划还款利息'].max()#最大值填充
data.loc[index_list ,'下次计划还款利息'] = data[countdata]['下次计划还款利息'].min()#最小值填充
data.loc[index_list ,'下次计划还款利息'] = -1#特殊值填充

原文链接:https://blog.csdn.net/lzx159951/article/details/104793585

数据分析--数据清洗详解流程相关推荐

  1. 操作系统之银行家算法—详解流程及案例数据

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  2. mysql binlog协议_MySql-Binlog协议详解-流程篇

    MySql-Binlog协议详解-流程篇 MySql-Binlog在MySql主从不同方面发挥着不可或缺的作用,同时我们也能通过Binlog实时监控数据的变化.本系列就讲述了怎样接收并解析Binlog ...

  3. 大数据学习之经典数据分析算法详解

    在大数据行业,懂算法的大数据工程师是非常有核心竞争力的,之前科多大数据的一位培训学员面试之后,回来和我们分享,懂得算法在面试过程中是非常加分的,即便算法的底层逻辑不是很了解,但一定要懂得具体应用,本文 ...

  4. 华为云 IoT 物联网数据分析能力详解

    1如何做好 IoT 数据分析? 物联网数据主要是指传感器和设备发过来的数据.这些数据一部分是对现实环境参数的采集值,一部分是设备的一些常规信息值,比如:状态.故障信息.错误代码.运行情况等.物联网数据 ...

  5. Python,Power BI,excel,商业数据分析技能详解

    [文末领取免费福利] 4月17日,有消息称亚马逊将于本周宣布退出中国,具体的时间待定.此后,亚马逊在中国仅保留两项业务,一是Kindle:二是跨境贸易,主营业务电商将全部退出中国. 有网友表示了震惊, ...

  6. 聚类分析在用户行为中的实例_用户关注行为数据分析过程详解-描述统计+聚类...

    以下是基于一小段用户关注产品的行为数据分析过程详细描述,各位老师如有不同意见或优化建议,还请不吝赐教. 一.数据大致是这样的(已经脱敏处理) 二.数据预处理 从年款提取出年限,从价格标识出价格区间,随 ...

  7. PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解

    使用Python进行数据分析,大家都会多少学习一本经典教材<利用Python进行数据分析>,书中作者使用了Ipython的交互环境进行了书中所有代码的案例演示,而书中的Ipython交互环 ...

  8. HMS华为账号登入全部流程加详解流程机制

    安卓登入华为账号获取授权全过程 1.第一步创建一个安卓项目 2.创建完我们先把登入页面的前端ui写出来(源码放在下方) <?xml version="1.0" encodin ...

  9. python数据分析入门详解!!!非常详细!!!

    python数据分析可视化 python内存管理方式:基于值的内存管理 一.体验Numpy(数值计算)多维数组对象 numpy实现数组相加 import numpy as np def plus(n) ...

最新文章

  1. 2021年大数据Spark(四十四):Structured Streaming概述
  2. Leetcode 739. 每日温度 (每日一题 20211014)
  3. 图像特征 可视化_使用卫星图像可视化建筑区域
  4. 求旋转数组的最小元素
  5. 冷美人为什么“冷”?
  6. 一篇真正教会你开发移动端页面的文章(一)
  7. 小程序php没执行完,解决微信小程序 app onLaunch异步请求,在没有请求执行完就加载首页了的问题...
  8. UTF-8 encode decode 集合
  9. 苹果手机与苹果tv连接服务器无响应,屏幕镜像正在查找Apple Tv,隔空播放无法连接?...
  10. 【用html做个人简历的网页(初级)】
  11. 常用计算机信息检索策略,信息检索的策略和方法
  12. 小提琴机器人拉法_小提琴的弓怎么拉 有什么技巧
  13. 矩阵分析L3内积空间
  14. 全国大学生数学竞赛公式(全)
  15. adb不是内部或外部命令,也不是可运行的程序或批处理文件
  16. CMOS器件与TTL器件CMOS电平与TTL电平
  17. 因子分析累计贡献率_[2018年最新整理]多元统计分析之因子分析.doc
  18. QGIS制图表达-符号大小随比例尺变化
  19. p什么水管_pvc管规格-P是什么意思pvc给水管规格中T?pvc给 – 手机爱问
  20. 目前消防信息化建设采用的服务器类型,智慧消防整体解决方案(1).doc

热门文章

  1. 免费的mac办公套件推荐:Polaris Office mac版
  2. 国内服务器使用TG机器人
  3. 机器人制图建模仿真(一)
  4. 被培训机构诈骗如何维权?中创教育为你支招
  5. 视频处理(转码加水印修剪合并)后声音画面不一致现象分析
  6. 一个有坏道U盘的拯救过程
  7. java栈堆溢出怎么解决_JVM之栈溢出和堆溢出
  8. [GBase 8s 教程]GBase 8s 创建表格
  9. Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能
  10. 《知网》被停用的背后,CNKI数据库是否占据主要因素?