作者:Arunn Thevapalan
翻译:陈超校对:王紫岳本文约3000字,建议阅读9分钟
本文介绍了Python中的Ydata-quality库如何应用于数据质量诊断,并给出数据实例进行详细的一步步解释。

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

图片由 Mikael Blomkvist拍摄 来自 Pexels

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

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

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

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

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

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

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

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

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

ydata-quality库拯救数据质量

作者截图

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

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

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

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

  2. 分析数据质量问题;

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

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

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

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

pip install ydata-quality

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

现实生活中混乱的数据

忍受混乱一段时间(图片由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%).

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

结束寄语

因为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数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 识别并解决数据质量问题的数据科学家指南相关推荐

  1. 技术16期:如何更好的保证数据质量【大数据篇】

    数据质量管理不单纯是一个概念,也不单纯是一项技术.也不单纯是一个系统,更不单纯是一套管理流程,数据质量管理是一个集方法论.技术.业务和管理为一体的解决方案. 通过有效的数据质量控制手段,进行数据的管理 ...

  2. 数据质量治理与数据质量评价体系(术)

    目录 01 数据治理问题场景 02 数据质量的重要性 03 数据质量常见问题 04 数据质量问题原因 05 数据质量治理 06 数据质量评价体系 最后附上数据质量治理思维导图 数据质量人人有责,这不仅 ...

  3. 数据分析之数据质量分析和数据特征分析

    1.数据质量分析 数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础,没有可信的数据,数据挖掘构建的模型将是空中楼阁. 数据质量分析的主要任务 ...

  4. 数据质量评估入门数据监控

    这里的数据质量不是测试的那种质量,而是可以理解为数据自身的质量属性. 什么是数据质量 数据质量指数据是否适合其使用目的的程度,包括数据的准确性.完整性.一致性.可靠性和时效性等方面.数据质量评价是评估 ...

  5. 数据质量评估标准与数据质量规则梳理

    做过大数据的伙伴应该都清楚,数据的质量是直接影响着数据的价值,并且直接影响着数据分析的结果以及我们以此做出的决策的质量.质量不高的数据不仅仅是数据本身的问题,还会影响着企业经营管理决策:错误的数据还不 ...

  6. 数据治理:数据质量问题出现的原因及解决思路

    众所周知,要体现数据价值,前提就是数据质量的保障,质量没有得到 100% 保证的数据是很难体现出业务价值的,如果基于这些有问题的数据做决策支持,或做业务办理,将会得到灾难性的结果,让领导层和数据使用方 ...

  7. 十步法原则解决数据质量问题

    一.相关概念 1.1 数据质量 数据的一组固有属性满足数据消费者要求的程度. 1)数据固有属性 真实性:即数据是客观世界的真实反映 及时性:即数据是随着变化及时更新的 相关性:即数据是数据消费者关注和 ...

  8. 数据质量低该如何解决

    数据是一种珍贵资产.尤其是在当今快消品当道的背景下,你需要数据来帮助你准确定位.深度投入和优化前景.如果你不能合理的管理这些数据,就可能会错失良机.降低效率,甚至对你的盈亏造成负面影响.那么针对数据质 ...

  9. 数据流被污染?数据质量不高?蚂蚁金服数据资产管理平台了解一下

    今年年初,蚂蚁金服ATEC城市峰会在上海举办.金融智能专场分论坛上,蚂蚁金服数据平台部高级数据技术专家李俊华做了主题为<蚂蚁金服数据治理之数据质量治理实践>的精彩分享. 演讲中,李俊华介绍 ...

最新文章

  1. go kegg_零基础 GO 与 KEGG 分析,手把手教你用多种途径实现!
  2. 解决 iframe 在 ios 上不能滚动的问题
  3. javascript:void(0)与#区别
  4. 好用的侧边栏菜单/面板jQuery插件
  5. hadoop centos 安装
  6. 类oracle数据库pss,Oracle笔记
  7. bzoj 1146 [CTSC2008]网络管理Network
  8. kata_FizzBu​​zz Kata与Java流
  9. android 屏幕方向改变 重新测量,android – 扫描时自动更改屏幕方向(使用ZXING库)...
  10. html小游戏代码_厉害!84 行 JavaScript 代码实现塔式堆叠游戏
  11. 计算机万能知识,电脑知识讲解ppt课件.ppt
  12. Feature Statistics Mixing Regularization for Generative Adversarial Networks
  13. 13级计算机商务沟通与礼仪结课论文,商务沟通论文
  14. android 刷机 zip,ZipInstaller(ZIP刷机神器)
  15. 备案域名基础知识,网站备案新政策
  16. 劳务外包和劳务派遣有什么区别
  17. oracle扩充表空间
  18. py 爬取汽车之家新闻案例
  19. work english words
  20. matlab unifit,【matlab】matlab在概率统计中的应用(二)

热门文章

  1. 编程计算1+2+3+4+...+n的值超过500的和的第一个值
  2. 【c语言】hello
  3. linux efi启动,可启动USB Linux的EFI/ UEFI
  4. java thread通知_JAVA 多线程(6):等待、通知 (1)
  5. 可伸缩性架构常用技术——之数据切分
  6. 开源天气预报api整理
  7. 解决 java “错误:编码GBK 的不可映射字符”
  8. Java中Map用法详解
  9. linux iptables常用命令之配置生产环境iptables及优化
  10. 王高利:Kvm虚拟化(1)__基础搭建