无处不在的细微错误:为数据整理代码生成文档外文翻译资料

 2023-03-15 11:03:51

无处不在的细微错误:为数据整理代码生成文档

关键词:notebook、数据整理、代码理解、代码摘要

摘要:

据报道,数据科学家在日常工作中花费大量时间处理数据,即清理数据和提取特征。但是,数据整理代码通常是重复的并且产生容易编写错误。此外,在复用和采用现有代码时很容易引入细微的错误,从而导致模型质量下降。为了支持数据科学家进行数据整理,我们提出了一种为数据整理代码生成文档的技术。我们使用 (1) 程序合成技术来自动总结数据转换和 (2) 基于测试用例的选择技术,通过定制的动态程序分析收集的执行信息有目的地从数据中选择具有代表性的样例。我们证明了,使用我们的技术的 JupyterLab 扩展可以为流行notebook中的许多单元提供按需文档,并且在用户调查中发现,使用我们的插件的用户可以更快、更有效地发现数据整理代码中的实际错误。

Ⅰ简介

据报道,数据科学家在数据清理和特征工程[1]上花费了大量时间和精力,这是数据科学管道的早期阶段,在文献中统称为数据整理[2]。典型的数据整理步骤包括删除不相关的列、转换类型、填充缺失值以及从原始数据中提取和规范化重要特征。数据整理代码通常是密集的、重复的、容易出错的,并且在常用的计算notebook环境中通常没有得到很好的支持。

重要的是,数据整理代码通常包含一些微妙的问题,如果存在这些问题的发,可能要到后期才会暴露出来。在我们的评估中,我们发现了数十个可疑行为实例,例如使用了错误源的计算、未持久化或不一致地转换部分数据的计算。尽管它们不会使程序崩溃,但它们显然违反了代码的明显意图(通常在注释和markdown单元中指定),因此我们将它们视为错误。不幸的是,由于notebook[3]中的测试数据在数据科学代码中非常稀有,因此即使对于 Kaggle 等流行数据科学网站上的许多得到很多“投票”的notebook,这些错误仍未被发现。

为数据整理代码自动生成简明摘要,并有目的地选择具有代表性的示例,以帮助用户了解代码对其数据的影响。这种形式的自动化文档对于需要理解代码的多种场景很有用:

bull; 调试:数据整理代码通常很简洁,可以对多个重要的数据转换进行排序,如图-1a中的示例所示,但通常也没有经过很好的测试[3]。数据科学家目前主要依靠代码阅读和插入打印语句来寻找潜在问题。

bull; 复用:数据科学家通过复制和编辑代码片段来大量重用代码,通常在notebook、其他notebook、教程或 栈溢出[4]中。同时,重用数据处理代码可能具有挑战性且容易出错[5],尤其是在重用代码需要适应数据科学家自己的数据的情况下。

bull; 维护:notebook中的数据科学代码通常没有很好的文档记录[3]、[6]、[7],但是数据科学代码需要随着数据和模型的变化而维护和发展,尤其是在生产环境中采用时[8 ].为了避免维护任务中的错误和随着时间的推移降低模型质量,了解现有的数据整理代码和它所做的假设是必不可少的。

我们的工作受到过去代码摘要工作的启发,以自动创建可用作各种任务文档的代码片段摘要。

虽然,现有的代码总结工作[9]试图描述代码片段的一般作用(对于所有可能的输入),但我们的方法以数据框的形式总结了代码对特定输入数据的影响,突出了对行的代表性更改和表格数据列。鉴于数据整理代码以数据为中心的性质,了解数据整理代码对数据的影响通常是数据科学家最关心的问题。据我们所知,这是一种关于总结的新颖观点,专为数据科学家的调试、复用和维护任务而量身定制。

图 a 三个笔记本单元,加载表格数据,转换“Sizecolumn”(将k和M转换为数字,并根据设备的平均值替换变化),并从数据中学习模型。虽然这段代码相当线性,并且严重依赖于常见的API,但它紧凑地编码了非平凡的转换,这并不总是容易理解

图 b WRANGLEDOC接口:第二个单元格的文档:①:数据流入或流出单元格。②:更改的简明摘要,③:突出显示更改的列,④:列的元信息(类型、唯一性、范围),⑤:选定的示例

Figure 从Kaggle竞赛中摘录真实的数据争用代码,并使用WrangleDoc生成相应的文档。由于正则表达式中的大小写敏感,带有“k”的值不能正确转换,因为在生成的求和中很容易看到

此外,我们的方法根据需要生成手头代码和数据的文档,以帮助理解程序。这是通过检测数据科学代码以收集运行时数据并选择在运行时执行的数据访问路径和分支,使用程序合成技术生成简短的描述性摘要,并使用受测试套件最小化启发的技术来选择和组织示例来实现的。我们将我们的工具 WRANGLEDOC集成到 JupyterLab(一个常用的notebook环境)中。

我们以两种方式评估了我们的方法和工具。首先,我们使用 100 个 Kagglenotebook进行了案例研究,以评估正确性和运行时开销,另外探索我们可以为常见notebook生成的文档类型。其次,我们进行了一项以人体为主体的研究,以评估 WRANGLEDOC是否提高了数据科学家在调试notebook任务中的效率。通过这两项研究,我们得到了证据,证明我们的方法对于常见的数据整理代码既实用又有效。

总的来说,我们做出以下贡献:

bull; 一种基于程序合成总结数据整理代码的数据转换的方法。

bull; 受测试套件最小化技术的启发,一种有目的地选择行来说明数据整理代码变化的方法。

bull; 作为 JupyterLab 插件的原型实现。

bull; 经验证据表明,我们的方法可以以可接受的开销准确地为重要的、真实世界的数据科学代码生成摘要。

bull; 一项用户研究发现,我们的方法在调试数据整理代码时提高了数据科学家的效率。

我们在 GitHub 上共享该工具和我们的补充材料。 [1]

Ⅱ设计动机

许多先前的研究探讨了数据科学家在notebook中的实践以及他们面临的挑战。随着对机器学习的兴趣高涨,notebook是学习数据科学和生产数据科学项目的非常流行的工具[6]、[7]、[10]、[11],被具有广泛不同编程技能和软件工程背景的数据科学家使用。数据科学工作是高度探索性和迭代性的[11]-[13],大量使用来自其他notebook和在线示例的复制和粘贴[14]。虽然研究人员发现了广泛的挑战,包括可重复性[3]、[15]、[16]、协作编辑[17]、[18]和可靠性[5],但我们专注于理解和调试方面的挑战。

数据整理代码可能难以理解:尽管它通常是线性的并且在短单元中结构化,但数据整理代码可能很密集,并且可以使用强大的 API 进行非平凡的转换,如我们的示例所示(图1) 。

为了更好地理解数据科学家如何理解数据处理代码,我们进行了一个小型的非正式实验,在该实验中,我们为四名具有数据科学经验的志愿者提供了一个notebook和两个需要理解程序的任务。具体地来说,我们要求他们修改notebook以适应输入数据帧的更改并寻找模型性能的可能改进,并且始终独自思考[19]。

我们观察到我们的参与者用来理解数据争论代码的两种主要策略。一方面,他们经常对代码进行静态推理,逐行检查代码而不运行它。在这个过程中,他们经常离开notebook,根据需要查找所用数据科学库中众多函数的 API 文档和代码示例,例如提取和替换以及我们示例中的各种参数。另一方面,他们还通过观察执行情况进行动态推理。我们的参与者经常在单元格的开头和结尾或新单元格中注入打印语句,以检查数据样本(通常是前几行)并在数据整理步骤之前和之后手动比较它们。我们看到,在处理大量数据时,动态推理很快就会变得不堪重负和乏味,尤其是在触发有问题行为的数据不属于前几行的情况下。在我们的示例中(图1a) ,9360 行中的前五行包含以字母“M”结尾的大小并包含“Varied with device”的值,但不包含以“k”结尾的大小,这使得不正确k 结尾行的转换很难发现。

现有工具是有限的:notebook环境在不断发展,从业者和研究人员提出了各种新工具[20]。例如,最近的notebook环境现在提供代码补全功能,并且可以在工具提示中显示 API 文档; IDE PyCharm 和 JupyterLab 扩展集成了传统的调试器——IDE中的所有标准功能。几个扩展,比如pandas 分析[21],帮助检查存储在变量中的数据。

然而,用于理解数据整理代码的工具支持仍然有限,并且不能很好地支持我们观察到的活动。像调试器这样的经典工具(如果有的话)不能很好地匹配以数据为中心、线性且通常是探索性的notebook代码,其中一行可以一次将转换应用于数千行,并且实际计算在库中执行(通常在本机代码中)。探索变量中数据的工具对于在某个时间点理解数据很有用,但对理解单元格内的复杂转换没有帮助。

数据整理代码经常出现错误:一些研究人员在notebook中指出了代码质量问题[11]、[22]、[23]。notebook几乎从不包含任何测试代码[3],并且从业者报告测试是一个常见的痛点[5]。常用的数据整理API很大,很容易被误解[24]。由于Python和Pandas库设计的动态性和容错性,有缺陷的代码通常不会因异常而崩溃,而是会继续以错误的值执行,这可能会降低模型的准确性。

Figure 数据争用代码中的细微错误示例,从数据清理阶段(例如,将列“Reviews”规范化为整数)到功能工程阶段(例如,从“Joined”列中提取新功能“Join_year”)

通常很容易在数据整理代码中引入错误,当我们检查使用我们的工具在流行notebook上生成的文档示例时,这一点变得非常明显(其中一些是Kaggle上最受好评的notebook)。在没有积极寻找错误的情况下(并不总是清楚代码打算做什么),我们发现了许多在数据整理代码中存在细微问题的示例。例如,在图1a中的示例中存在一个细微的错误,其中代码尝试将下载计数中的“k”转换为 1000,将“M”转换为 1,000,000:第 14 行中大写的“K”导致转换“k”为 1 而不是 1000。代码无异常执行,但产生错误的结果,例如,“670.0k”的 670.0 而不是预期的 670000.0。如果可以观察到带有“k”的示例转换,则可以很容易地发现该问题。

在图2 中,我们说明了我们在评估中在100个流行notebook中反复发现的数据整理代码中的三种问题(稍后在第V-A节中描述) :

bull; API 滥用在函数调用看起来合理但对输入数据没有预期效果的情况下很常见(例如,如果将 dropna 应用于单个列,则 dropna不会删除表的整行)。这通常会导致计算不持久,并且对以后使用的数据没有影响。

bull; 变量名、列名和正则表达式中的简单拼写错误是许多其他问题的根源,通常会导致计算错误。

bull; 最后,多个问题与不正确的数据建模有关,通常源于对数据集中不同类型数据的错误假设,从而遗漏了极少数情况。

对API的模式,如何在数据整理代码中使用,以及在输入数据集下对特定实体的影响没有清晰深入的了解,都会使上述问题变得难以定位。

Ⅲ解决方案概述

在我们描述如何生成文档的技术细节之前,让我们从notebook用户的角度说明我们使用WRANGLE DOC生成的文档类型。简而

剩余内容已隐藏,支付完成后下载完整资料


英语原文共 13 页,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[596127],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。