作者

Snipaste_2021-04-24_14-20-12.png

单位:加州大学圣地亚哥分校 Department of Cognitive Science,微软PROSE组。

一作是博士生,三作是其导师

二作是研究员,四作是首席研究员,五作是PROSE组的leader

图片1.png

背景

  • Data wrangling

    • 前期数据准备
    • 消耗大量时间
  • Computational notebook,数据科学家经常需要使用的环境

    • 一系列的“cell”用于input,output

    • Jupyter notebook

    • D3 Observable

      Snipaste_2021-04-24_15-06-56.png

挑战

微软专家的正式访谈中进行总结,现有的工具和数据分析师现实中的工作环境的gap

  1. 现有的data wrangling工具需要专家切换使用环境(notebook)
  2. 现有的工具不能整合进专家的工作环境,来完成监控检测转换过程。

现有的data wrangling 工具 需要专家切换使用环境 到其它的使用环境中

专家不希望其它的工具以一种黑盒的形式来处理自己的数据,他们希望可以检测转换过程,同时希望可以使用自己更熟悉的Python or R。同时希望结合这些工具到自己的工作环境中,可以保留数据转换的代码,又可以容易复现。

贡献

  • 混合交互模型
    • programming-by-example with readable code synthesis
    • within the cell-based workflow of computational notebooks
  • 程序合成
    • 数据子集上进行代码合成,并应用到数据全局上
    • 合成的程序可以合并在现有的数据处理中
  • User Study
    • 减少了用户数据转化函数使用中的查阅和回顾
    • 合成的代码可以验证是否符合他们的预期,增加可信度
    • 插入cell的形式很自然

使用场景

用户:专业的数据分析师
数据:911报警(经纬度,时间,标题等)
任务:开放式探索

Snipaste_2021-04-24_15-07-14.png

Snipaste_2021-04-24_15-07-25.png

在6,7中,用户可以指定要转换成的结果当做example,然后8中生成代码,并可以任意插入到cell中

采访和设计目标

  • 7 位数据科学家,在微软频繁使用notebooks
  • Design goal
    • 过渡过多,数据来回切换->
      数据清洗工具应该集成在数据科学家的工作中(notebooks)
    • 黑盒不透明,缺少自定义,不满足格式,需要额外学习,希望使用更熟悉的语言->
      数据清洗工具应该可以生成数据科学家熟悉的代码,来进行监测和修订。

实施

  • 前端:Qgrid+修改

图片2.png

  • 后端:pandas

可读性代码合成算法

  • FlashFill toolkit (开源工具,最多的转换函数有30多行)

  • domain specifc languages:提供字符串转换,数值转换,日期转换,查阅转换,相互组合

    Snipaste_2021-04-24_15-07-50.png

  1. Standard Program:使用FlashFIll ranker来生成多可能的Program(代码片段)
  2. Readable Program:使用readability_ranker来挑选可读性强的Program
  3. Rewriting: 使用自定义规则来生成更容易理解的Program
  4. Translation to the Target Language:生成指定的语言,通过抽取语法树和DSL-Program,用映射及定制的format funtion,最后用autopep8来格式化代码

图片3.png

算法限制

  • 错误处理
    • 指定复杂的约束:Traffic-> TR, 尾随空格
    • 合成引擎不能识别
  • 有些任务不适合
    • 自然语言:“S.F.” to “San Francisco”
    • 求平均值等任务
  • 采样问题
    • 基于小样本数据做example,在全样本数据可能会有问题
  • 实例提供
    • 用户需要一直检查来确定是期望的清洗过程,有时更喜欢排名低的规则
  • 有些用户就是喜欢在Excel,Tableau,等工具中切换。集成在单应用中不一定是必要的

评估-实验

  • 用户:12名数据科学家
  • 数据集A:紧急呼救数据,包括日期,时间,经纬度,地理位置等
    • A1:使用位置信息,提取城市名字,首字母大写 (Horsham)
    • A2:使用日期和时间,格式化为12小时制,并增加@分隔符符 (Friday@1pm)
    • A3:使用经纬度,格式化为数组并四舍五入 [39.15,42.15]
  • 数据集B:纽约城市噪音投诉数据,包括各种时间,各种位置
    • B1:创建日期列,并提取为2小时的时间区间(00:00-02:00)
    • B2:使用地点类型和城市,组合成新的格式的title (Store/Commercial in New York, Manhattan).
    • B3:使用经纬度,格式化为数组并五舍 [39.15,42.15]

过程

  • A和B被均分,任务打乱,参与者在Jupyter notebook手写代码(也可以查阅网站)
  • 完成后做5-point Likert scale评估这些任务的使用频率,并讨论难点
  • 之后介绍Wrex,然后做另一个数据集
  • 完成后做5-point Likert scale打分以及代码可接受度、是否可能被用于生产环境
  • 讨论反馈

后续

  • 根据建议直接修订合成的代码
    • 去掉类,使用轻量级函数
    • 变量命名_0,_1替换为 s t 等简单的助记名
    • 删除了异常处理逻辑
  • 更改后让参与者重新评估

量化结果

  • 手写代码完成任务(12/36)
  • Wrex完成任务(36/36)

图片4.png

图片5.png

图片6.png

反馈

  • 减少了数据清洗的障碍

    • 回顾函数和语法
      • 问题:现在用太多的语法和函数,很难记得其中的细微差别,尽管有内嵌的文档,和自动补全等功能,但是还是不能直接帮助专家理解,需要哪些操作,以及如何使用它们。
      • 解决:programming-by-example,让专家更专注于要对数据的操作来生成代码
    • 解决方案的搜索
      • 问题:通常需要的解决方案只是众多网页上代码片段中的一小块,而有的时候这个问题的领域很小,没有人遇见,那么很难找到正确的解决方案
      • 解决:Wrex可以基于对数据的预期的输出来寻找到正确的解决方案。这可以让专家专注到自己的分析过程中,而不是网站上搜索或者代码存储库。
  • 适配数据科学家的工作流

    • 熟悉的交互,减少了学习成本
    • 专家对其交互反馈很积极,只有些轻微的增强建议,右击上下文菜单和水平滚动
    • 赞成在工作流中集成此工具,可以在notebook中使用,而别的工具中,需要在结果之后重写代码,并需要往返迭代,而wrex很容易嵌入
  • 数据科学家对合成代码的期望
    • 可读性:可以分享,可以修改,而且和自己期望的差不多就行,短变量名就可以接受
    • 可信性:最显著的方法就是读代码,有的人希望可以有边界情况,简单的输出总结,代码注释和数据可视化。最重要的不是机制和框架,而是输出,如果wrex的代码可读性差,他们将不信任它

讨论

  • 数据科学家需要场内(In-situ)工具在他们的工作流中
    • 数据清洗是数据分析的一部分,也会强化用户的分析任务
    • 不用离开工作流(notebook)去寻找解决方法
    • 不用导出数据到其它的工具,并重新导回数据
    • 减少挫败感,因为要来回搜索方法,复制粘贴
    • 生成的小代码片段和notebook cell很相似
    • 用户与代码的交互,通过不断的增加example来修正歧义
  • 可读性的合成代码对于数据科学家的优先级
    • 不应该是看起来像人类写的,而是专注于具有数据科学家需要的高优先级特性
  • 代码与数据间替换交互
    • Excel查看数据是flexibility,Python IDES是usability, Wrex合并了两者。
    • 可以生成多种转换和交互方案,来进行比较和选择
  • 合成的代码使数据科学更容易访问
    • 不同编程水平的人都可以进行数据科学,他们直接可以用清洗后的数据去完成分析
    • 不用时刻跟上API的更新,可以利用wrex来使用和学习这些代码。未来适合教学


Questions & Discussion: ✉️ dongminghan@zju.edu.cn