十三、数据清洗

2023-05-16

1.清洗数据

数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等:

  • 缺失值处理;
  • 噪声数据处理;
  • 不一致数据的处理;

清洗数据的原则包括以下方面的内容:

  • 尽可能赋予属性名和属性值明确的含义
  • 统一多数据源的属性值编码
  • 去除重复属性
  • 去除可忽略字段
  • 合理选择关联字段
  • 尽可能赋予属性名和属性值明确的含义
  • 统一多数据源的属性值编码
  • 去除重复属性
  • 去除可忽略字段
  • 合理选择关联字段

2 处理缺失数据

  • 2.1 缺失值
    空值在数据处理过程中,经常见到数据为空的现象。比如在商场销售数据时,顾客的收入属性多数为空值。
  • 2.2 引起空值的原因
    1.设备异常
    2.与其他已有数据不一致而被删除
    3.因为误解而没有输入的数据
    对数据的改变没有进行日志记载
  • 2.3 处理空缺值要经过推断而补上
    忽略该记录
    去掉属性
    手工填写空缺值
    使用默认值
    使用属性平均值
    使用同类样本平均值
    预测最可能的值

3 处理噪声数据

  • 3.1 噪声的概念和原因
    噪声:在测量一个变量时可能出现的测量值相对于真实值的偏差或者错误。
    1.噪声数据指的是异常数据或错误数据
    2.引起噪声数据的原因可能是硬件故障、编程错误、语音或光学字符识别程序出错等。
    3.噪声数据对数据分析的结果影响很大,线性回归中,噪声数据回影响数据的收敛速度。
  • 3.2 噪声数据的处理-分箱
    分箱:把待处理的数据按照一定的规则放进一些箱子中,考察每一个箱子中的数据、采用某种方法分别对各个箱子中的数据进行处理。
    箱子:按照属性划分子区间,如果一个属性值处于某个子区间范围内,就把属性值放进这个子区间代表的“箱子”里。
  • 3.3 分箱的方法
    分箱的方法:分箱前对记录集按目标属性值的大小进行排序。
    1.等深分箱法
    2.等宽分箱法 3.用户自定义区间
    例子:客户收入属性income排序后的值(人民币:元)800 1000 1200 1500 1800 2000 2300 2800 3000 3500 4000 4500 4800 5000。
  • 3.4 等深分箱法(统一权重)
    按记录行数分箱,每箱具有相同的记录数,每箱记录数称为箱的权重,也称为箱子的深度。
    设定权重(箱子深度)为4,上述例子分箱后的结果如下
    箱1:800 1000 1200 1500
    箱2:1500 1800 2000 2300
    箱3:2500 2800 3000 3500
    箱4:4000 4500 4800 5000
  • 3.5 等宽分箱法(统一区间)
    在整个属性值的区间上平均分布,即每个箱的区间范围是一个常量,称为箱子宽度。
    设定区间范围(箱子宽度)为1000元人民币,分箱后。 箱1:800 1000 1200 1500 1500 1800
    箱2:2000 2300 2500 2800 3000
    箱3:3500 4000 4500
    箱4:4800 5000
  • 3.6 用户自定义区间
    用户自定义:如将客户划分为1000元以下、1000~2000、2000~3000、3000~4000和4000以上几组,分箱后
    箱1:800
    箱2:1000 1200 1500 1500 2000
    箱3:2300 2500 2800 3000
    箱4:3500 4000
    箱5:4500 4800 5000
  • 3.7 聚类处理聚类数据
    将物理的或抽象对象的集合分组为不同的簇,找出并清除哪些落在簇之外的值(孤立点),这些孤立点被视为噪声。
    特点:直接形成簇并对簇进行描述,不需要任何先验知识。

4 不一致数据处理

  • 4.1 数据不一致性的概念
    数据不一致性,是指各类数据的矛盾性、不相容性。其一是由于数据冗余造成的,二是由于并发控制不当造成的,三是由于各种故障、错误造成
    的。
  • 4…2 解决方法
    1、设定强制合法的规则范围。凡是不在此范围内的,强制设为最大值或者将其剔除。
    2、设定警告规则。凡是不在此规则范围内的,进行警告,然后人工处理
    3、离群值人工处理。使用分箱、聚类、回归等方式发现离群值

##5 数据清洗实战
###5.1 Lending Club借贷数据预处理

  1. 工作年份处理;
  2. 每月借贷金额处理;
  3. 借贷评级处理;
  4. 借贷期限处理;
    ###5.2 数据集介绍
  5. https://www.kaggle.com/wendykan/lending-club-loan-data
  6. 数据集包含2007-2015年间的借贷数据,包含当前借贷状态(current,Late,Paid,等)以及最新的付账信息
  7. 额外的信息包括:信用评分、金融咨询次数、住址邮政编码、所在州等
  8. 该数据集包括约890,000条记录,75列数据

5.3 资源和工具库

Python资源库
cycler==0.10.0
husl==4.0.3
joblib==0.14.1
matplotlib==1.5.3
numpy==1.18.0
pandas==0.23.0
pyparsing==2.4.6
python-dateutil==2.8.1
pytz==2019.3
scikit-learn==0.22.1
scipy==1.1.0
seaborn==0.7.1
six==1.14.0
sklearn==0.0

5.4 数据清洗的步骤

  1. 读取数据集
  2. 数据处理
  3. 借贷状态数据处理
  4. “工作年份” (emp_length) 数据处理
  5. “开始借贷每月付款金额” (installment) 数据处理
  6. “借贷评级” (grade) 数据处理
  7. “借贷期限” (term) 数据处理

6 完成代码

6.1 项目的目录结构

在这里插入图片描述

6.2 完成代码

# -*- coding: utf-8 -*-

"""
    作者: Guangzhan
    版本: 1.0
    项目名称:Lending Club借贷数据处理及初步分析
"""

from __future__ import division, print_function
import os
import pandas as pd
import zipfile
from sklearn import preprocessing

dataset_path = './dataset'
zip_file_name = 'loan.csv.zip'
csv_file_name = './loan.csv'


def create_label(status_val):
    label = 1
    if status_val == 'Fully Paid':
        label = 0
    return label


def proc_emp_length(emp_length_val):
    # 补全该函数
    if emp_length_val == '< 1 year' or emp_length_val == 'n/a':
        emp_length_feat = 0.5
    elif emp_length_val == '10+ years':
        emp_length_feat = 10
    else:
        emp_length_val = str(emp_length_val)
        emp_length_feat = float(emp_length_val.rstrip(' years'))
    return emp_length_feat


def run_main():
    """
        主函数
    """
    zip_file_path = os.path.join(dataset_path, zip_file_name)
    csv_file_path = os.path.join(dataset_path, csv_file_name)

    if not os.path.exists(csv_file_path):
        # 如果不存在csv文件,解压zip文件
        with zipfile.ZipFile(zip_file_path) as zf:
            zf.extractall(dataset_path)

    # == 1. 读取数据集 ==
    raw_data = pd.read_csv(csv_file_path)

    # == 2. 数据处理 ==
    # 数据处理及转换,用于后续模型的输入
    # 2.1 “借贷状态” (loan_status) 数据处理
    # 根据借贷状态筛选数据,只保留借贷状态为'Fully Paid', 'Charged Off'和'Default'的数据
    filter_mask = raw_data['loan_status'].isin(['Fully Paid', 'Charged Off', 'Default'])
    filter_data = raw_data[filter_mask]
    print(filter_data['loan_status'].value_counts())
    # 为数据添加 0, 1 标签,'Fully Paid' -> 0, Otherwise -> 1
    proc_filter_data = filter_data.copy()
    proc_filter_data['label'] = filter_data['loan_status'].apply(create_label)

    # 2.2 “工作年份” (emp_length) 数据处理
    # 使用apply函数处理emp_length特征
    proc_filter_data['emp_length_feat'] = filter_data['emp_length'].apply(proc_emp_length)

    # 2.3 “开始借贷每月付款金额” (installment) 数据处理
    proc_filter_data['installment_feat'] = proc_filter_data['installment'] / (proc_filter_data['annual_inc'] / 12)

    # 2.4 “借贷评级” (grade) 数据处理
    label_enc = preprocessing.LabelEncoder()
    proc_filter_data['grade_feat'] = label_enc.fit_transform(proc_filter_data['grade'].values)

    # 2.5 “借贷期限” (term) 数据处理
    proc_filter_data['term_feat'] = proc_filter_data['term'].apply(lambda x: int(x[1:3]))

    # 选择使用的列
    numeric_cols = ['int_rate', 'grade_feat', 'loan_amnt', 'installment', 'annual_inc', 'dti',
                    'delinq_2yrs', 'inq_last_6mths', 'open_acc', 'pub_rec', 'revol_bal', 'revol_util',
                    'total_acc', 'collections_12_mths_ex_med', 'acc_now_delinq', 'term_feat',
                    'installment_feat', 'emp_length_feat']

    category_cols = ['home_ownership']
    label_col = ['label']
    user_cols = numeric_cols + category_cols + label_col
    final_samples = proc_filter_data[user_cols]

    # 去掉空值
    final_samples.dropna(inplace=True)

    # 保存处理后的数据集
    proc_data_filepath = './output/proc_data.csv'
    final_samples.to_csv(os.path.join(proc_data_filepath), index=False)

    if os.path.exists(csv_file_path):
        # 如果存在csv文件,删除csv文件,释放空间
        os.remove(csv_file_path)


if __name__ == '__main__':
    run_main()
    final_samples.to_csv(os.path.join(proc_data_filepath), index=False)

    if os.path.exists(csv_file_path):
        # 如果存在csv文件,删除csv文件,释放空间
        os.remove(csv_file_path)


if __name__ == '__main__':
    run_main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十三、数据清洗 的相关文章

  • SQL数据分析之数据提取、数据查询、数据清洗【MySQL速查】

    文章目录 一 数据提取二 数据查询1 选取数据 xff08 select xff09 2 筛选 xff08 where xff09 3 范围匹配 xff08 IN xff09 4 排序 xff08 order by xff09 5 条件筛选
  • 数据分析----数据清洗

    文章目录 前言一 数据清洗是什么 xff1f 二 步骤1 选择列2 缺失值处理1 找到缺失值2 处理缺失值的方法 3 数据类型转化4 重复值处理 总结 前言 随着科技的不断发展 xff0c 数据在我们生活中越来越多 xff0c 面对繁杂的数
  • excel数据清洗_数据清洗步骤

    首先这是数据清洗步骤的思维导图 数据清洗步骤 步骤一 选择子集 在办公中 xff0c 经常会碰到excel表格中存在大量列 xff0c 但有一些列 xff0c 可能是近期不在使用 xff0c 就是暂时不在使用的 xff0c 为了更好的突出重
  • 【数据清洗】总结

    写在前面 xff08 201908 xff09 xff1a 数据质量问题往往会影响到工作效果 xff0c 我们学习现代工具后 xff0c 很容易就建立起一个初步的模型 但是真正的工作是如何优化它 xff0c 而关键节点就包括数据的清洗和模型
  • 数据清洗

    1 概念 数据清洗 xff1a 把脏数据清洗掉 xff0c 提高数据质量 Data cleansing Data cleaning Data scrubbing三种表达方式都可以 xff0c 意思都是检测和去除数据集中的噪声数据和无关数据
  • tensorflow数据清洗

    import tensorflow as tf import numpy as np import random import os import math from matplotlib import pyplot as plt def
  • 数据清洗方法

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1220 1 数据错误 脏数据或错误数据 比如 温度 2003 数据不正确 0 代表真实的0还是代表缺失 数据不一致 2 删除重复值 删除重复
  • kettle案例——数据清洗与校验(完全去重)

    1 源数据预览 2 打开kettle新建一个转换并添加下述步骤然后用跳连接 3 双击CSV文件输入进行配置 点击浏览导入文件 然后点击获取字段 最后点击预览看数据是否抽取进来 4 双击唯一行 哈希值 进行配置 在用来比较的字段处 添加要去重
  • 数据清洗遇到的问题思考

    因为本次任务是基础的数据预处理和数据集划分 所以本次讨论不涉及特征工程和模型相关的 问题一 缺失数据 有很多人问到了缺失值处理的问题 统一汇总提问 为什么需要处理缺失值 确实值会影响模型训练 某些特征值确实 有可能使得该条样本完全是负样本
  • Python之Pandas绘图

    Pandas绘图
  • 数据清洗:由坐标数据构成的轨迹去除漂移点的操作

    版权声明 转载请注明作者 独孤尚良dugushangliang 出处 https blog csdn net dugushangliang article details 102821219 先看看我们要处理的数据 首先根据点的经纬度数值
  • Matplotlib绘图的基本操作

    Matplotlib绘图
  • 数据清洗有哪些方法?

    随着大数据时代的发展 越来越多的人开始投身于大数据分析行业 当我们进行大数据分析时 我们经常听到熟悉的行业词 如数据分析 数据挖掘 数据可视化等 然而 虽然一个行业词的知名度不如前几个词 但它的重要性相当于前几个词 即数据清洗 顾名思义 数
  • 【Pandas 入门-4】时间序列数据处理与数据清洗

    文章目录 时间序列数据处理 to datetime 与 dt strftime 数据聚合函数 resample 数据清洗 数据替换 replace fillna 重复值处理 drop duplicates 缺失值处理 drop na 重命名
  • 数据清洗:Numpy基本操作

    Numpy介绍与应用
  • 数据分析-数据清洗与整理

    1 数据清洗 第一步 对异常值进行处理 首先 查看原数据库是否一样 然后 查询是否信息录入时出现错误 最后 看看是不是顾客随意填写的信息 第二步 对离群值进行处理 首先 查询是否与原数据库一致 然后 查询是否信息录入错误 最后 判断是否符合
  • 数据挖掘而之数据清洗

    数据清洗 是整个数据分析过程中不可缺少的一个环节 其结果质量直接关系到模型效果和最终结论 在实际操作中 数据清洗通常会占据分析过程的50 80 的时间 国外有些学术机构会专门研究如何做数据清洗 相关的书籍也不少 美亚搜data cleani
  • kettle(一)kettle介绍

    kettle介绍及组成 一 kettle 是什么 kettle 是一个ETL工具 ETL Extract Transform Load 数据抽取 转换 装载 kettle 是java编写 绿色无需安装 抽取高效稳定 kettle 主要用来对
  • 数据清洗---数据整合

    数据整合可以使用Pandas库中merge 函数合并数据集 import pandas as pd 建两个数据集 df1 DataFrame lkey b b a c data1 range 4 df2 DataFrame rkey a b
  • 用户权限数据转换为用户组列表(3/3) - Excel PY公式

    最近Excel圈里的大事情就是微软把PY塞进了Excel单元格 可以作为公式使用 轻松用PY做数据分析 系好安全带 老司机带你玩一把 实例需求 如下是AD用户的列表 每个用户拥有该应用程序的只读或读写权限 现在需要创建新的AD用户组 并根据

随机推荐

  • sklearn 实战指南

    0 引言 Sklearn 全称 Scikit Learn 是基于 Python 语言的机器学习工具 它建立在 NumPy SciPy Pandas 和 Matplotlib 之上 xff0c 里面的 API 的设计非常好 xff0c 所有对
  • 绘制频率分布直方图的三种方法,总结的很用心!

    直方图能帮助迅速了解数据的分布形态 xff0c 将观测数据分组 xff0c 并以柱状条表示各分组中观测数据的个数 简单而有效的可视化方法 xff0c 可检测数据是否有问题 xff0c 也可看出数据是否遵从某种已知分布 本次案例通过生成深圳市
  • Python 列表如何转化为二叉树?

    Day46 列表转化为二叉树 已知列表nums xff0c 将其转化为二叉树 举例 xff1a nums 61 3 9 20 None None 15 7 xff0c 转化为二叉树后 节点3的左子节点9 xff0c 右子节点20 xff0c
  • Peter Norvig 给程序员们的一份传世典文:10年编程无师自通

    你好 xff0c 我是zhenguo 这篇文章的作者 xff1a Peter Norvig xff0c 可以说是程序员中最牛叉的人物之一 xff0c 现任谷歌研究总监 xff0c 是誉满全球的人工智能专家 xff0c 著有 Artifici
  • 全球最优秀的14位程序员

    接下来带你一起膜拜大神 xff08 排名不分先后 xff09 1 Linus Torvalds Linus Torvalds 是开源操作系统Linux和Git之父 1997 2003年 xff0c Torvalds在硅谷Transmeta
  • 《数据分析咖哥十话》包邮送3本

    文末留言包邮送三本 小雪求职记 入秋以来 xff0c 市场就开始不景气 xff0c 我们的女主人公小雪从一家互联网公司的运营岗毕 xff08 cai xff09 业 xff08 yuan xff09 以来 xff0c 三个月都没接到任何面试
  • 梳理机器学习常用算法(含深度学习)

    你好 xff0c 我是你们的老朋友 xff0c zhenguo xff01 机器学习的任务主要分为三类 xff1a 监督学习非监督学习强化学习 监督学习是指在训练过程中 xff0c 模型是根据给定的输入和输出标签来学习的 监督学习的任务主要
  • 机器学习:单或双变量常用分析技巧

    你好 xff0c 我是你们的老朋友 xff0c zhenguo xff01 在机器学习EDA阶段 xff0c 变量分析及可视化是常做的事情 xff0c 这篇文章总结变量分析中 xff0c 最常使用的单变量 xff0c 双变量分析以及可视化
  • 【计算机三级网络技术】 第三篇 IP地址规划技术

    文章目录 一 IP 地址规划以及划分地址新技术1 IP地址的标准分类 xff08 第一阶段 xff09 2 划分子网的三级地址结构 第二阶段 3 构成超网的无类域间路由技术 第三阶段 4 网络地址转换技术 第四阶段 二 IP 地址分类1 A
  • 机器学习:处理缺失值方法总结

    你好 xff0c 我是你们的老朋友 xff0c zhenguo 处理缺失值是在进行机器学习时非常重要的一个步骤 缺失值会影响机器学习模型的准确度 xff0c 因此在训练模型之前 xff0c 通常需要先处理掉缺失值 这篇文章 xff0c 总结
  • 机器学习储备(8):numpy之linspace 和 logspace

    1 linspace在numpy中是创建等差数列 xff0c 先看例子 xff1a A 61 np linspace 1 11 11 结果 xff1a array 1 2 3 4 5 6 7 8 9 10 11 因此可以看到lisapce接
  • 矩阵特征值的求解例子

    请点击上面公众号 xff0c 免费订阅 实例 阐述算法 xff0c 通俗易懂 xff0c 助您对算法的理解达到一个新高度 包含但不限于 xff1a 经典算法 xff0c 机器学习 xff0c 深度学习 xff0c LeetCode 题解 x
  • 51单片机学习笔记:串口接收和发送数据

    芯片STC89C52RC 在PC端向单片机发送任意数据后 单片机向PC端发送4行文本 由于在windos下 回车换行用 r n include lt reg52 h gt include 34 MY51 h 34 void initSer
  • 51单片机学习笔记:利用ADC0804模数转换器采集电压

    电位器调节待检测电压值 在数码管上显示出来 代码大多从书上搬过来的 书上例5 3 1要求前3个数码管显示AD转换后的8位数字量 即0 255 我这里让前4个数码管显示具体电压值 比如1 352 include lt reg52 h gt i
  • 51单片机学习笔记,模拟iic总线连续读写24c02存储器

    AT24C02A 2K SERIAL EEPROM Internally organized with 32 pages of 8 bytes each the 2K requires an 8 bit data word address
  • 51单片机学习笔记:定时器产生PWM可调方波,控制led灯亮度

    使用定时器T0产生PWM方波 用按键调整占空比 20级可调 控制led灯的亮度等级 include 34 my51 h 34 include 34 timer0 h 34 define grading 20 亮度20级变化 sbit key
  • 汉字与GBK内码互转工具(支持批量转换)

    注 原程序不是我写的 原作者没有署名 我只是让它更好用些而已 感谢未署名的原作者 汉字与GBK内码互转工具 exe 支持批量转换 修改记录如下 1 修改标题 2 修改文本框位置和大小 3 修改按钮位置和大小 修改按钮内容 4 修改光标的初始
  • 51单片机学习笔记:ST7920控制器的12864液晶使用总结

    总结 1 控制芯片不同 液晶接口定义 或者寄存器定义也可能不同 2 显示方式有并行和串行 串行方式据说不能读数据寄存器 DR 那指令暂存器IR是否可读 3 含字库芯片显示字符时不必对字符取模了 但字库有可能缺斤少两 就是说有一部分字 哪怕是
  • 启用SecureCRT自带的tftp服务

    以前用Tftpd32在win端开启tftp服务 Tftpd32功能很多 但我暂时用不到那些功能 今天试试SecureCRT自带的tftp功能 挺好的啊 只能说 SecureCRT 很好很强大 图解 测试 book 64 ubuntu wor
  • 十三、数据清洗

    1 清洗数据 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序 xff0c 包括检查数据一致性 xff0c 处理无效值和缺失值等 xff1a 缺失值处理 xff1b 噪声数据处理 xff1b 不一致数据的处理 xff1b 清洗数据