数据预处理之数据清洗案例

2023-05-16

建议学习文章:https://zhuanlan.zhihu.com/p/111499325

https://mp.weixin.qq.com/s/jNoXHO4qU34gcha4zOGRLA

https://mp.weixin.qq.com/s/ra48vJTsQltydOtfoy5YHQ

参考数据缺失、混乱、重复怎么办?最全数据清洗指南让你所向披靡 (qq.com

数据清洗:从记录集、表或数据库中检测和修正(或删除)受损或不准确记录的过程。它识别出数据中不完善、不准确或不相关的部分,并替换、修改或删除这些脏乱的数据。

为了将数据清洗简单化,本文介绍了一种新型完备分步指南,支持在 Python 中执行数据清洗流程。读者可以学习找出并清洗以下数据的方法:

 

  • 缺失数据;

  • 不规则数据(异常值);

  • 不必要数据:重复数据(repetitive data)、复制数据(duplicate data)等;

  • 不一致数据:大写、地址等;

 

该指南使用的数据集是 知识追踪数据集你可以换成你要用的数据

数据概况

# import packages
import pandas as pd
import numpy as np
import seaborn as sns

import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib
plt.style.use('ggplot')
from matplotlib.pyplot import figure

%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (12,8)

pd.options.mode.chained_assignment = None

# read the data
df = pd.read_csv(
    'F://su//study//知识追踪学习路线//code//Deep-Knowledge-Tracing-master//examples//data//ASSISTments_skill_builder_data.csv')

# shape and data types of the data
print(df.shape)
print(df.dtypes)
# select numeric columns
df_numeric = df.select_dtypes(include=[np.number])
numeric_cols = df_numeric.columns.values
print(numeric_cols)

# select non numeric columns
df_non_numeric = df.select_dtypes(exclude=[np.number])
non_numeric_cols = df_non_numeric.columns.values
print(non_numeric_cols)

(525534, 30)
order_id                  int64
assignment_id             int64
user_id                   int64
assistment_id             int64
problem_id                int64
original                  int64
correct                   int64
attempt_count             int64
ms_first_response         int64
tutor_mode               object
answer_type              object
sequence_id               int64
student_class_id          int64
position                  int64
type                     object
base_sequence_id          int64
skill_id                float64
skill_name               object
teacher_id                int64
school_id                 int64
hint_count                int64
hint_total                int64
overlap_time              int64
template_id               int64
answer_id               float64
answer_text              object
first_action            float64
bottom_hint             float64
opportunity             float64
opportunity_original    float64
dtype: object
['order_id' 'assignment_id' 'user_id' 'assistment_id' 'problem_id'
 'original' 'correct' 'attempt_count' 'ms_first_response' 'sequence_id'
 'student_class_id' 'position' 'base_sequence_id' 'skill_id' 'teacher_id'
 'school_id' 'hint_count' 'hint_total' 'overlap_time' 'template_id'
 'answer_id' 'first_action' 'bottom_hint' 'opportunity'
 'opportunity_original']
['tutor_mode' 'answer_type' 'type' 'skill_name' 'answer_text']

cols = df.columns[:30] # first 30 columns
colours = ['#000099', '#ffff00'] # specify the colours - yellow is missing. blue is not missing.
sns.heatmap(df[cols].isnull(), cmap=sns.color_palette(colours))

 

下表展示了前 30 个特征的缺失数据模式。横轴表示特征名,纵轴表示观察值/行数,黄色表示缺失数据,蓝色表示非缺失数据。

例如,下图中特征skill——id在多个行中存在缺失值。而特征skillname出现零星缺失值。

方法 2:缺失数据百分比列表

当数据集中存在很多特征时,我们可以为每个特征列出缺失数据的百分比


# if it's a larger dataset and the visualization takes too long can do this.
# % of missing.
for col in df.columns:
    pct_missing = np.mean(df[col].isnull())
    print('{} - {}%'.format(col, round(pct_missing*100)))
order_id - 0%
assignment_id - 0%
user_id - 0%
assistment_id - 0%
problem_id - 0%
original - 0%
correct - 0%
attempt_count - 0%
ms_first_response - 0%
tutor_mode - 0%
answer_type - 0%
sequence_id - 0%
student_class_id - 0%
position - 0%
type - 0%
base_sequence_id - 0%
skill_id - 13%
skill_name - 15%
teacher_id - 0%
school_id - 0%
hint_count - 0%
hint_total - 0%
overlap_time - 0%
template_id - 0%
answer_id - 91%
answer_text - 18%
first_action - 0%
bottom_hint - 85%
opportunity - 0%
opportunity_original - 15%

方法 3:缺失数据直方图

在存在很多特征时,缺失数据方图也不失为一种有效方法。

要更深入地了解观察值中的缺失值模式,我们可以用直方图的形式进行可视化。


# first create missing indicator for features with missing data
for col in df.columns:
    missing = df[col].isnull()
    num_missing = np.sum(missing)

    if num_missing > 0:  
        print('created missing indicator for: {}'.format(col))
        df['{}_ismissing'.format(col)] = missing


# then based on the indicator, plot the histogram of missing values
ismissing_cols = [col for col in df.columns if 'ismissing' in col]
df['num_missing'] = df[ismissing_cols].sum(axis=1)

df['num_missing'].value_counts().reset_index().sort_values(by='index').plot.bar(x='index', y='num_missing')

如何处理缺失数据?

 

这方面没有统一的解决方案。我们必须研究特定特征和数据集,据此决定处理缺失数据的最佳方式。

下面介绍了四种最常用的缺失数据处理方法。不过,如果情况较为复杂,我们需要创造性地使用更复杂的方法,如缺失数据建模。

解决方案 1:丢弃观察值

在计学中,该方法叫做成列删除(listwise deletion),需要丢弃包含缺失值的整列观察值。

只有在我们确定缺失数据无法提供信息时,才可以执行该操作。否则,我们应当考虑其他解决方案。

此外,还存在其他标准。

例如,从缺失数据直方图中,我们可以看到只有少量观察值的缺失值数量超过 35。因此,我们可以创建一个新的数据集 df_less_missing_rows,该数据集删除了缺失值数量超过 35 的观察值。

 

解决方案 2:丢弃特征

与解决方案 1 类似,我们只在确定某个特征无法提供有用信息时才丢弃它。

例如,从缺失数据百分比列表中,我们可以看到 hospital_beds_raion 具备较高的缺失值百分比——47%,因此我们丢弃这一整个特征。

 

解决方案 3:填充缺失数据

当特征是数值变量时,执行缺失数据填充。对同一特征的其他非缺失数据取平均值或中位数,用这个值来替换缺失值。

当特征是分类变量时,用众数(最频值)来填充缺失值。

不规则数据(异常值)

异常值指与其他观察值具备显著差异的数据,它们可能是真的异常值也可能是错误。

如何找出异常值?

根据特征的属性(数值或分类),使用不同的方法来研究其分布,进而检测异常值。

方法 1:直方图/箱形图

当特征是数值变量时,使用直方图和箱形图来检测异常值。

correct是学生回答问题的值只有0 1我们可以检验一下

df['correct'].hist(bins=100)

df.boxplot(column=['correct'])#箱线图

 

如何处理异常值?

 

尽管异常值不难检测,但我们必须选择合适的处理办法。而这高度依赖于数据集和项目目标。

 

处理异常值的方法与处理缺失值有些类似:要么丢弃,要么修改,要么保留。(读者可以返回上一章节处理缺失值的部分查看相关解决方案。)

 

不必要数据

处理完缺失数据异常值,现在我们来看不必要数据,处理不必要数据的方法更加直接。

输入到模型中的所有数据应服务于项目目标。不必要数据即无法增加价值的数据。

这里将介绍三种主要的不必要数据类型。

不必要数据类型 1:信息不足/重复

有时一个特征不提供信息,是因为它拥有太多具备相同值的行。

如何找出重复数据?

我们可以为具备高比例相同值的特征创建一个列表。


num_rows = len(df.index)
low_information_cols = [] #

for col in df.columns:
    cnts = df[col].value_counts(dropna=False)
    top_pct = (cnts/num_rows).iloc[0]
    
    if top_pct > 0.95:
        low_information_cols.append(col)
        print('{0}: {1:.5f}%'.format(col, top_pct*100))
        print(cnts)
        print()
tutor_mode: 99.93664%
tutor    525201
test        333
Name: tutor_mode, dtype: int64

type: 100.00000%
MasterySection    525534
Name: type, dtype: int64

first_action_ismissing: 99.99391%
False    525502
True         32
Name: first_action_ismissing, dtype: int64

opportunity_ismissing: 99.99391%
False    525502
True         32
Name: opportunity_ismissing, dtype: int64

 

 

缺失值处理

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

数据预处理之数据清洗案例 的相关文章

  • MATLAB实验一 数字图像处理+函数调用笔记

    函数调用 https www cnblogs com gshang p 12763028 html 1 Write and test a MATLAB script file called lab1 plot m to plot the f
  • MATLAB学习之矩阵与幻方矩阵

    原文见https ww2 mathworks cn help matlab learn matlab matrices and magic squares html 上面为官方MATLAB原网址 xff0c 写此博客为方便复习回顾 矩阵和幻
  • matlab入门学习系列之表达式 变量运算符

    目录 变量 矩阵运算符 数组运算符 函数 表达式示例 变量 与大多数其他编程语言一样 xff0c MATLAB 语言提供数学表达式 xff0c 但与大多数编程语言不同的是 xff0c 这些表达式涉及整个矩阵 MATLAB 不需要任何类型声明
  • MATLAB入门学习系列之输入输出和索引

    取消输出 如果您在仅键入语句后按 Return 或 Enter xff0c MATLAB 会在屏幕上自动显示结果 但是 xff0c 如果使用分号结束行 xff0c MATLAB 会执行计算 xff0c 但不会显示任何输出 当生成大型矩阵时
  • MATLAB入门学习系列之基本绘图函数

    目录 创建绘图 在一幅图形中绘制多个数据集 指定线型和颜色 绘制线条和标记 将绘图添加到现有图形中 图窗窗口 在一幅图窗中显示多个绘图 控制轴 保存图窗 保存工作区数据 创建绘图 plot 函数具有不同的形式 xff0c 具体取决于输入参数
  • MATLAB入门学习系列之图像

    显示图像 图像数据 您可以将二维数值数组显示为图像 在图像中 xff0c 数组元素决定了图像的亮度或颜色 例如 xff0c 加载一个图像数组及其颜色图 xff1a gt gt load durer gt gt whos Name Size
  • 知识跟踪的深度知识跟踪和动态学生分类 Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing

    Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing xff08 译 xff09 知识跟踪的深度知识跟踪和动态学生分类 摘要 在智能辅
  • 知识追踪常见建模方法之IRT项目反应理论

    目录 A 项目反应理论 xff08 IRT item response theory xff09 概述 历史发展 特点 模型 A 项目反应理论 xff08 IRT item response theory xff09 概述 IRT理论即项目
  • MATLAB图像处理基本操作(1)

    matlib软件巨大 xff0c 没有安装 找了几个在线网址 http www compileonline com execute matlab online php https octave online net 从文件读取图像 a xf
  • Python学习系列之类的定义、构造函数 def __init__

    python def init self name等多参数 def init self 常见的两种类的定义方式如下 第一种 class Student def init self 两者之间的区别 self name 61 None self
  • ChatGPT,爆了!

    这段时间真是太刺激了 xff0c AI领域几乎每天都会爆出一个超震撼的产品 xff0c 有一种科幻马上要成现实的感觉 不知道大家朋友圈是什么样 xff0c 在整个创业的圈子里面 xff0c 几乎全是 AI 相关 就连 N 多年 xff0c
  • 分类回归模型评估常见方法及ROC AUC

    目录 模型评估常见方法 ROC和AUC定义 sklearn计算ROC具体实现 计算ROC需要知道的关键概念 1 分析数据 2 针对score xff0c 将数据排序 3 将截断点依次取为score值 3 1 截断点为0 1 sklearn
  • Coursera 吴恩达《Machine Learning》课堂笔记 + 作业

    记录一下最近学习的资源 xff0c 方便寻找 xff1a Github 上已经有人把作业整理成为 Python 的形式了 有 py 和 ipynb 两种格式 https github com nsoojin coursera ml py h
  • tensflow学习小知识tf.train.exponential_decay

    tf train exponential decay是tensflow1 X版本的2 版本使用以下语句 tf compat v1 train exponential decay 将指数衰减应用于学习率 tf compat v1 train
  • PyTorch学习系列之PyTorch:nn和PyTorch:optim优化

    PyTorch xff1a nn 在构建神经网络时 xff0c 我们经常考虑将计算分为几层 xff0c 其中一些层具有可学习的参数 xff0c 这些参数将在学习过程中进行优化 在TensorFlow xff0c 像包 Keras xff0c
  • tf.gather()用法详解

    tf gather params indices validate indices 61 None axis 61 None batch dims 61 0 name 61 None 请注意 xff0c 在CPU上 xff0c 如果找到超出
  • 代码学习之Python冒号详解

    最近看代码发现对冒号用法理解不够透彻 xff0c 记录学习一下 xff1a 1 冒号的用法 1 1 一个冒号 a i j 这里的i指起始位置 xff0c 默认为0 xff1b j是终止位置 xff0c 默认为len a xff0c 在取出数
  • Jupyter Notebook导入和删除虚拟环境 超详细

    记录一下Jupyter Notebook导入和删除虚拟环境的步骤 xff0c 网上博客参差不齐 xff0c 每次找好几个才看到简明容易理解的 方法一步骤 为不同的环境配置kernel 有时候使用conda命令创建了新的python环境 xf
  • tf.expand_dims用法详解

    看官方讲解一些博客感觉一直不是很懂 xff0c 下面是我的个人理解结合官方文档 xff0c 有问题欢迎指出 tf expand dims tf expand dims input axis 61 None name 61 None dim

随机推荐

  • argparse 命令行选项、参数和子命令解析器

    最近看到很多论文代码都是用解析器写的 argparse 命令行选项 参数和子命令解析器 argparse 模块可以让人轻松编写用户友好的命令行接口 程序定义它需要的参数 xff0c 然后 argparse 将弄清如何从 sys argv 解
  • torch.unsqueeze和 torch.squeeze() 详解

    1 torch unsqueeze 详解 torch unsqueeze input dim out 61 None 作用 xff1a 扩展维度 返回一个新的张量 xff0c 对输入的既定位置插入维度 1 注意 xff1a 返回张量与输入张
  • Android中获取唯一的id

    文章目录 Android唯一设备ID现状IMEIMAC地址唯一Id实现方案那些硬件适合硬件标识工具类 Android唯一设备ID现状 设备ID xff0c 简单来说就是一串符号 xff08 或者数字 xff09 xff0c 映射现实中硬件设
  • debian虚拟机下如何安装增强功能

    1 安装gcc和kernel headers gcc有可能默认安装的有 xff08 如果没有还需要安装gcc xff09 xff0c 但是还需要安装build essential sudo apt get install build ess
  • PyTorch学习系统之 scatter() 函数详解 one hot 编码

    torch Tensor scatter scatter 和 scatter 的作用是一样的 xff0c 只不过 scatter 不会直接修改原来的 Tensor xff0c 而 scatter 会 torch Tensor scatter
  • 最新RNN相关模型

    最近在看最新RNN相关模型 找到很多论文 Fundamentals of Recurrent Neural Network RNN and Long Short Term Memory LSTM network 递归神经网络 xff08 R
  • 知识追踪模型的应用

    背景 MOOC 近年来 xff0c 随着在线学习系统在教育环境中越来越普及 xff0c 在线学习人数越来越多 xff0c 教育者不可能追踪每一个学习者的知识状态并提供个性化的学习指导 xff1b 在线学习系统中的知识需要学习者通过各种冗余信
  • 自然语言处理之语料库

    语料库 定义 xff1a 语料库 corpus 就是存放语言材料的仓库 语言数据库 xff09 语料库技术的发展 早期 xff1a 语料库在语言研究中被广泛使用 xff1a 语言习得 方言学 语言教学 句法和语义 音系研究等 沉寂时期 xf
  • 知识追踪入门系列-论文资料汇总

    Paper xff1a 知识追踪相关论文 下载论文和代码见reference第一个链接 Deep Knowledge Tracing 首次提出将RNN用于知识追踪 xff0c 并能够基于复杂的知识联系进行建模 xff08 如构建知识图谱 x
  • 知识追踪方法比较

    DKT xff1a Deep knowledge tracing In Advances in neural information processing systems 这是一种开创性的方法 xff0c 它使用单层LSTM模型来预测学生的
  • 机器学习 注意力 笔记资料贴

    Self Attention与Transformer详解 https zhuanlan zhihu com p 47282410 写的非常详细 https jalammar github io illustrated transformer
  • 图像的几何变换maketform imtransform imresize imcrop

    背景 几何变换是将图像像素从一个位置映射到另一个位置 几何变换有五种常见类型 xff1a 剪切变换 平移变换 缩放变换 旋转变换和投影变换 它们如图4 1所示 在该图中 xff0c 原始图像显示在 A 中 xff0c 而变换后的图像显示在
  •  决策树(Decision Tree)原理及实现

    决策树 xff08 Decision Tree xff09 原理及实现 一 算法简介 1 1 基本模型介绍 决策树是一类常见的机器学习方法 xff0c 可以帮助我们解决分类与回归两类问题 模型可解释性强 xff0c 模型符合人类思维方式 x
  • Python 一维及多维数组及基本操作

    2 创建一般的多维数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import numpy as np a 61 np array 1 2 3 dty
  • java操作word方式 设置国内镜像命令

    java操作word方式还有 个人认为通过jacob最好 xff0c 自己可以扩展 xff0c 网上除poi之外几乎全是java com技术实现的 1 Apache POI Java API To Access Microsoft Form
  • matlib 多种方法实现图像旋转不使用imrotate函数

    原理 方法很棒https blog csdn net qq 41140138 article details 104737705 方法一 function g 61 rotate image1 f theta M N 61 size f t
  • MATLAB实现满秩LU/QR等分解 及求方程组的解 范数

    矩阵分解 矩阵的LR分解 方阵A是非奇异的 clear A 61 2 1 4 4 3 13 2 2 20 format rat L U 61 lu A L U P 61 lu A 矩阵QR分解 Q R 61 qr A xff09 R为上三角
  • Deep Knowledge Tracing(DKT)具体实现

    有关dkt可参考的文章http blog kintoki me 2017 06 06 tensorflow dkt 问题陈述 传统的评价方法 xff0c 如考试和考试 xff0c 只允许在考试结束后对学生进行评价 因此 xff0c 这些方法
  • pandas数据预处理 缺失值

    缺失值的分类 按照数据缺失机制可分为 xff1a 可忽略的缺失 完全随机缺失 missing completely at random MCAR xff0c 所缺失的数据发生的概率既与已观察到的数据无关 也与未观察到的数据无关 随机缺失 m
  • 数据预处理之数据清洗案例

    建议学习文章 xff1a https zhuanlan zhihu com p 111499325 https mp weixin qq com s jNoXHO4qU34gcha4zOGRLA https mp weixin qq com