推荐 :识别并解决数据质量问题的数据科学家指南

2024-04-28 11:48

本文主要是介绍推荐 :识别并解决数据质量问题的数据科学家指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Arunn Thevapalan  翻译:陈超  校对:王紫岳

本文约3000字,建议阅读9分钟
本文介绍了Python中的Ydata-quality库如何应用于数据质量诊断,并给出数据实例进行详细的一步步解释。

在你的下一个项目之前早点这么做将会让你免于几周的辛苦和压力。

b97aa7abf92574cb7ae2a13b7d2e2b85.png

图片由 Mikael Blomkvist拍摄 来自 Pexels


如果你在处理现实数据的AI行业工作,那么你会理解这种痛苦。无论数据收集过程多么精简 ,我们用于建模的数据总是一片狼藉。

就像IBM描述的那样,80/20规则在数据科学领域同样适用。数据科学家80%的宝贵时间都花费在发现、清洗以及组织数据上。仅仅留下了20%的时间用于真正的数据分析。

整理数据并不有趣。对于“垃圾输入进去,垃圾输出出来”这句话,我知道它的重要性,但是我真的不能享受清洗空白格,修正正则表达式,并且解决数据中无法预料的问题的过程。

根据谷歌研究:“每个人都想做建模工作,而不是数据工作”——我对此感到非常愧疚。另外 ,本文介绍了一种叫做数据级联(data cascade)的现象,这种现象是指由底层数据问题引发的不利的后续影响的混合事件。实际上,该问题目前有三个方面 :

  •   绝大多数数据科学技术并不喜欢清理和整理数据;

  •   只有20%的时间是在做有用的分析;

  •   数据质量问题如果不尽早处理,将会产生级联现象并影响后续工作。

只有解决了这些问题才能确保清理数据是容易,快捷,自然的。我们需要工具和技术来帮助我们这些数据科学家快速识别并解决数据质量问题,并以此将我们宝贵的时间投入到分析和AI领域——那些我们真正喜欢的工作当中。

在本文当中,我将呈现一种帮助我们基于预期优先级来提前识别数据质量问题的开源工具(https://github.com/ydataai/ydata-quality)。我很庆幸有这个工具存在,并且我等不及要跟你们分享它。

ydata-quality库拯救数据质量

2e54847c4f96fa56880abd7702795cfd.png

作者截图


Ydata-quality是一个开源的Python库,用于数据管道发展的多个阶段来评估数据质量。该库是直观、易用的,并且你可以直接将其整合进入你的机器学习工作流。

对我个人而言,这个库的好处在于它可以基于数据质量问题(接下来展开)的优先级排序。在我们时间有限时,这是很有帮助的,并且我们也想优先处理对我们数据质量影响较大的问题。

 

让我向你们展示一下如何使用一团乱麻的数据的现实例子。在这个例子当中,我们将会:

  1.   加载一个混乱的数据集;

  2.   分析数据质量问题;

  3.   进一步挖掘警告信息;

  4.   应用策略来减轻这些问题;

  5.   检查在半清洗过后的数据的最终质量分析报告。

在安装任何库之前,最好使用venv或者conda来为项目创建虚拟环境,一旦这一步完成,在你的终端输入下面这行代码来安装库:

pip install ydata-quality

现在你的环境已经准备就绪,让我们转移到数据上吧。

现实生活中混乱的数据

2299cc89bb5cfb0a7415ff4562781386.png

忍受混乱一段时间(图片由Pixabay拍摄来自Pexels)

在这个例子当中我们将会使用变换的人口普查数据,你可以从Github 库(https://github.com/ydataai/ydata-quality/blob/master/datasets/transformed/census_10k.csv)下载。你可以在这个Jupyter Notebook(https://github.com/ydataai/ydata-quality/blob/master/tutorials/main.ipynb)当中找到本教程当中所有的代码。我推荐你复制这个库或者下载这个notebook来跟上这个例子。

第一步:加载数据集

第一步中,我们将会加载数据集以及必要的库。注意,这个库有多个模块(偏差&公正,数据期望,数据关系,漂移分析,错误数据,标签,缺失值)用于单独的数据质量问题,但是我们可以从DataQuality引擎开始,该引擎把所有的个体引擎打包成了一个类。

 
 
from ydata_quality import DataQuality
import pandas as pd
df = pd.read_csv('../datasets/transformed/census_10k.csv')

第二步:分析数据质量问题

这是一个漫长的过程,但是DataQuality引擎在抽取所有细节方面确实做的很好 。只要简单地创建主类并使用evaluate() 方法。

# create the main class that holds all quality modules
dq = DataQuality(df=df)# run the tests
results = dq.evaluate()

我们将收到一个数据质量问题的报告。

Warnings:TOTAL: 5 warning(s)Priority 1: 1 warning(s)Priority 2: 4 warning(s)Priority 1 - heavy impact expected:* [DUPLICATES - DUPLICATE COLUMNS] Found 1 columns with exactly the same feature values as other columns.
Priority 2 - usage allowed, limited human intelligibility:* [DATA RELATIONS - HIGH COLLINEARITY - NUMERICAL] Found 3 numerical variables with high Variance Inflation Factor (VIF>5.0). The variables listed in results are highly collinear with other variables in the dataset. These will make model explainability harder and potentially give way to issues like overfitting. Depending on your end goal you might want to remove the highest VIF variables.* [ERRONEOUS DATA - PREDEFINED ERRONEOUS DATA] Found 1960 ED values in the dataset.* [DATA RELATIONS - HIGH COLLINEARITY - CATEGORICAL] Found 10 categorical variables with significant collinearity (p-value < 0.05). The variables listed in results are highly collinear with other variables in the dataset and sorted descending according to propensity. These will make model explainability harder and potentially give way to issues like overfitting. Depending on your end goal you might want to remove variables following the provided order.* [DUPLICATES - EXACT DUPLICATES] Found 3 instances with exact duplicate feature values.

让我们来仔细分析一下这个报告:

  • 警告(Warning):其中包括数据质量分析过程中检测到的问题细节。

  • 优先级(Priority):对每一个检测到的问题,基于该问题预期的影响来分配一个优先级(越低的值表明越高的优先性)。

  • 模块(Modules):每个检测到的问题与某一个模块(例如:数据关系,重复值,等)执行的数据质量检验相关联。

把所有的东西联系在一起,我们注意到有五个警告被识别出来,其中之一就是高优先级问题。它被“重复值”模块被检测出来,这意味着我们有一整个重复列需要修复。为了更深入地处理该问题,我们使用get_warnings()  方法。

输入下方内容:

dq.get_warnings(test="DuplicateColumns")

我们可以看到针对我们想解决问题的详细输出。

[QualityWarning(category='Duplicates', test='Duplicate Columns', description='Found 1 columns with exactly the same feature values as other columns.', priority=<Priority.P1: 1>, data={'workclass': ['workclass2']})]

根据这一结果,我们可以看到列workclass和workclass2是完全重复的[37] ,这可能会产生严重后果。

第三步:使用特定的模块分析数据质量问题

数据质量的全貌需要多个角度分析,因此我们需要八个不同的模块。虽然它们被封装在DataQuality 类当中,但一些模块并不会运行,除非我们提供特定的参数。

例如,DataQuality类不会执行偏差与公正(Bias & Fairness)质量检验,因为我们并没有指出敏感性特征。但是这个库的妙处在于,我们可以将其作为独立的检验并执行它。

让我们来通过运行偏差与公正检验来更好地理解它。

 
from ydata_quality.bias_fairness import BiasFairness#create the main class that holds all quality modules
bf = BiasFairness(df=df, sensitive_features=['race', 'sex'], label='income')# run the tests
bf_results = bf.evaluate()

当我们运行以上代码的时候,我们将会收到一份针对选定模块的相似的报告。

Warnings:TOTAL: 2 warning(s)Priority 2: 2 warning(s)Priority 2 - usage allowed, limited human intelligibility:* [BIAS&FAIRNESS - PROXY IDENTIFICATION] Found 1 feature pairs of correlation to sensitive attributes with values higher than defined threshold (0.5).* [BIAS&FAIRNESS - SENSITIVE ATTRIBUTE REPRESENTATIVITY] Found 2 values of 'race' sensitive attribute with low representativity in the dataset (below 1.00%).

从该报告中,我们了解到我们可能有一个泄露一种敏感性属性信息的代理特征,并且敏感性属性的特征严重不足。为了调查第一个Warning,我们可以利用筛选特定测试的get_warnings()方法来获得更多详细信息。

bf.get_warnings(test='Proxy Identification')

我们可以看到我们想要解决的问题的详细描述:

 
[QualityWarning(category='Bias&Fairness', test='Proxy Identification', description='Found 1 feature pairs of correlation to sensitive attributes with values higher than defined threshold (0.5).', priority=<Priority.P2: 2>, data=featuresrelationship_sex    0.650656Name: association, dtype: float64)]

基于详细的Warning,我们检查了relationship和sex列,并且注意到一些关系状态(例如,丈夫,妻子)是基于特定性别的,从而影响了相关性。我们可以将这些分类值改成性别中立(例如,已婚)。

第四步:解决识别的问题

让我们实际一点儿。我们永远不会拥有100%清洗过的数据。我们所要做的是在有限的时间内解决对数据影响最大的问题。对数据科学家来说,这是一个需要你根据当前情景的限制做出的决策。

对这个例子来说,让我们聚焦于消灭高优先级(P1)问题并解决至少一个偏差和公正Warning。基于warning的简单的数据清理函数如下:

def improve_quality(df: pd.DataFrame):"""Clean the data based on the Data Quality issues found previously."""# Bias & Fairnessdf = df.replace({'relationship': {'Husband': 'Married', 'Wife': 'Married'}}) # Substitute gender-based 'Husband'/'Wife' for generic 'Married'# Duplicatesdf = df.drop(columns=['workclass2']) # Remove the duplicated columndf = df.drop_duplicates()            # Remove exact feature value duplicatesreturn dfclean_df = improve_quality(df.copy())

我们可以放弃重复列work_class2并且替代 relationship 列的值为更通用且性别中立的。

如果你想进一步地数据清理,请继续你的工作。如果你选择继续,我想看看数据清理是什么样的。记住,你是数据科学家——决策掌握在你的手中。

第五步:运行最后的质量检验

你可能会跳过这一步,但是当我使用额外的最终检验来检查我处理过的数据时,我会感到安心。我非常推荐你也这样做,这样你会知道在完成数据清洗转换之后,你的数据的状态。

你可以先简单地调用质量引擎,然后调用evaluate()方法来再次检索示例报告。下面是清理数据后DataQuality引擎和BiasFairness引擎的报告。

*DataQuality Engine Report:*Warnings:TOTAL: 3 warning(s)Priority 2: 3 warning(s)Priority 2 - usage allowed, limited human intelligibility:* [ERRONEOUS DATA - PREDEFINED ERRONEOUS DATA] Found 1360 ED values in the dataset.* [DATA RELATIONS - HIGH COLLINEARITY - NUMERICAL] Found 3 numerical variables with high Variance Inflation Factor (VIF>5.0). The variables listed in results are highly collinear with other variables in the dataset. These will make model explainability harder and potentially give way to issues like overfitting. Depending on your end goal you might want to remove the highest VIF variables.* [DATA RELATIONS - HIGH COLLINEARITY - CATEGORICAL] Found 9 categorical variables with significant collinearity (p-value < 0.05). The variables listed in results are highly collinear with other variables in the dataset and sorted descending according to propensity. These will make model explainability harder and potentially give way to issues like overfitting. Depending on your end goal you might want to remove variables following the provided order.*Bias & Fairness Report:*Warnings:TOTAL: 1 warning(s)Priority 2: 1 warning(s)Priority 2 - usage allowed, limited human intelligibility:* [BIAS&FAIRNESS - SENSITIVE ATTRIBUTE REPRESENTATIVITY] Found 2 values of 'race' sensitive attribute with low representativity in the dataset (below 1.00%).

我们可以从上面的两个报告当中推断出,我们的高优先级问题已经被解决了,并且另外一个低优先级问题已经如我们所预料地解决了。

结束寄语

83719a6658386d61195835266bd8cf03.png

因为ydata-quality的存在我太轻松了(图片由Cookie_studio制作来自Freepik)

看,虽然我们痛恨清理数据,但是这并不意味着我们不会做这项工作。这就是为什么它是机器学习工作流(https://towardsdatascience.com/the-machine-learning-workflow-explained-557abf882079)当中的一个不可分割的阶段,而它的解决方法就是整合像ydata-quality(https://github.com/ydataai/ydata-quality)这样有价值的工具和库进入到我们的工作流里。

在这篇文章中,我们学到如何使用开源包来评估数据集的数据质量,用 DataQuality 主引擎和特定的模块引擎(例如BiasFairness)。进一步地,我们看到QualityWarning 如何提供高水平的严重性评定并向我们指出产生Warning的原始数据。

在这之后,我们基于数据质量问题定义数据清理管道,同时对混乱的数据进行转换,并观察它如何解决我们的目标Warning的。

YData团队开发了这个库,这个团队的使命就是改善人工智能行业的数据质量。更多问题请加入友好的slack社区并然后直接向开发团队询问所有问题(你也可以在那里找到我!)

我们一起肯定可以改善这个库,你的反馈将意味着这个库解决了你在未来的大部分紧迫问题。我迫不及待地想看到你使用这个ydata-Quality,并得到你在社区内的反馈。

原文标题:

A Data Scientist’s Guide to Identifyand Resolve Data Quality Issues

原文链接:

https://towardsdatascience.com/a-data-scientists-guide-to-identify-and-resolve-data-quality-issues-1fae1fc09c8d?gi=cbccd2061ee2

译者简介:陈超,北京大学应用心理硕士在读。本科曾混迹于计算机专业,后又在心理学的道路上不懈求索。越来越发现数据分析和编程已然成为了两门必修的生存技能,因此在日常生活中尽一切努力更好地去接触和了解相关知识,但前路漫漫,我仍在路上。

转自:数据派THU 公众号;

END


版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

1d842acd408dfbccde1540ec68179b1a.png

这篇关于推荐 :识别并解决数据质量问题的数据科学家指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943190

相关文章

google XTS测试遇到过得问题总结

一、问题 docker的mtt容器有一个端口5037映射到本地5037端口,与adb的5037端口冲突,只能起mtt容器或adb服务,不能2个服务同时起。 原因:adb版本为1,过低,adb目前版本已更新到30几 解决方法:下载新版的adb,解压后复制到/usr/bin/adb或添加环境变量 # 下载压缩包sudo wget https://dl.google.com/android

Redis经典问题:数据不一致

大家好,我是小米,今天我想和大家聊一聊Redis的一个经典问题——数据不一致。在使用Redis的过程中,你是否曾遇到过这样的问题?缓存和数据库中的数据不一致,可能导致应用程序的功能异常。下面,我将详细介绍数据不一致的原因,以及一些有效的解决方案。 什么是数据不一致 数据不一致是指缓存中的数据和数据库中的数据存在差异。这种问题通常出现在缓存系统与数据库之间的同步过程中。当缓存中的数据与数据库

GEE数据集——高分辨率全球树冠高度地图(1 米)Meta 公司

高分辨率 1 米全球树冠高度地图 简介 全球树冠高度地图数据集提供了对全球树冠高度的全面了解,有助于对森林生态系统、碳固存和气候变化减缓工作进行精确监测。该数据集由 Meta 和世界资源研究所合作开发,是了解森林结构和动态的基石。通过融合最先进的卫星图像和先进的人工智能技术,该数据集达到了无与伦比的详细程度。通过分析 2009 年至 2020 年的卫星图像,重点分析 2018 年至 2020

【计算机网络篇】数据链路层(9)使用集线器的共享式以太网

文章目录 🛸使用同轴电缆的共享总线以太网 🎆使用集线器的共享式以太网🥚集线器的特点 🍔10BASE-T星型以太网 🛸使用同轴电缆的共享总线以太网 若总线上的某个机械连接点接触不良或断开,则整个网络通信就不稳定或彻底断网。因此,这种使用同轴电缆的共享总线以太网早已被淘汰 🎆使用集线器的共享式以太网 在使用细同轴电缆的共享总线以太网之后,以太网发展出来了一种

tomcat无法启动且不报错,如何查看问题

转自 https://blog.csdn.net/isea533/article/details/51277786  如有侵权,请联系删除 如上,项目启动,不报错,但是就是起不来问题一般是XML文件报错。定位错误方法如下: 找到org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 类,在下面

动态规划----股票买卖问题(详解)

目录 一.买卖股票的最佳时机: 二.买卖股票的最佳时机含冷冻期: 三.买卖股票的最佳时期含⼿续费: 四.买卖股票的最佳时机III:  五.买卖股票的最佳时机IV: 买卖股票的最佳时机问题介绍:动态规划买卖股票的最佳时机是一个经典的算法问题。该问题的目标是在给定的股票价格数组中,找到最大的利润,即最佳的买入和卖出时间,使得买入时间早于卖出时间。 下面我们通过一些例题,来解决这一

成功解决No module named ‘huggingface_hub.inference._text_generation‘

成功解决No module named 'huggingface_hub.inference._text_generation' 目录 解决问题 解决思路 解决方法 解决问题 No module named 'huggingface_hub.inferen

利用IP地址查询解决被“薅羊毛”的方法

在互联网时代,随着各种网络诈骗手段的不断更新和演变,“薅羊毛”成为了一种常见的网络犯罪行为。其中,利用查询IP地址进行欺诈活动已经成为一种普遍的手段。当个人或组织的IP地址被不法分子查询后,可能会面临虚假注册、盗取个人信息、网络攻击等风险。因此,采取有效的方法来解决被“薅羊毛”的问题至关重要。 1. IP地址查询工具 首先,了解自己的IP地址是解决问题的第一步。可以通过各种在线IP地址查询工具

网络端口占用问题的综合调研与解决方案

原创 Randy 拍码场 问题背景 去年底信息安全团队进行网络权限治理,要求所有应用实例使用静态IP,公网访问策略与静态IP绑定;之后实例重启时偶现“端口被占用”错误。通过分析总结应用日志,共有以下4种错误类型,实质都是端口被占用。 // Netty框架Caused by: java.net.BindException: Address already in use // Jett

在 Navicat 17 创建一个数据字典

即将于 5 月 13 日发布的 Navicat 17(英文版)添加了许多令人兴奋的新功能。其中之一就是数据字典工具。它使用一系列 GUI 指导你完成创建专业质量文档的过程,该文档为跨多个服务器平台的数据库中的每个数据元素提供描述。在今天的博客中,我们将进一步了解数据字典,并了解在 Navicat 17 中创建数据字典的步骤。 什么是数据字典? 数据字典包含数据库中存储的数据元素的名称、定义和属