云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

百度云_华为云相册下载安装_精选特惠

小七 141 0

可重复研究:Stripe的数据科学方法

当人们谈论他们的数据基础设施时,他们往往会把重点放在技术上:Hadoop、spinding、Impala等等。然而,我们发现,与技术本身一样重要的是指导其使用的原则。我们想分享一个我们发现特别有用的原则:再现性。我们将讨论我们关注可复制性的动机,我们如何使用Jupyter笔记本作为我们的核心工具,以及我们围绕Jupyter开发的工作流程来实现我们的方法。Jupyter笔记本电脑是创建可重复数据科学研究的一个极好的方法。动机数据工具通常用于生成某种探索性分析报告。在Stripe,一个例子是调查一张卡被拒绝的概率,考虑到它上次充电后的时间。调查员编写一个查询,由Redshift这样的查询引擎执行,然后运行一些进一步的代码来解释和可视化结果。分享这类研究结果的最常见方法是撰写电子邮件并附上一些图表。但这意味着报表的查看者不知道查询是如何构造和分析的。因此,他们无法深入审查这项工作,也无法自行扩展。在提出数据问题时,很容易犯下方法论上的错误;这里的一个意外的偏差,或者那里漏掉的一个角落案例,都可能导致完全错误的结论。在学术界,同行评议制度有助于发现这些错误。科学界的许多人都支持开放科学的实践,即数据和代码随实验结果一起发布,这样评审人员就可以独立地重新创建原始结果。从这一运动中得到灵感,我们试图使条纹内的数据报告透明和可复制,这样公司的任何人都可以查看报告并了解它是如何生成的。就像一个总是绿色的测试套件迫使开发人员编写更好的代码一样,我们想看看要求所有分析都是可重复的是否会迫使我们生成更好的报告。实施我们的可复制分析的实现集中在Jupyter笔记本电脑上,这是一个基于web的Jupyter交互式计算环境的前端,它提供了类似Mathematica或Matlab的接口。Jupyter Notebook还提供了将笔记本转换为可发布HTML文档的内置功能。你可以看到我们出版的一本笔记本的样本,研究了本福德定律和条纹上每一次电荷量之间的关系。现在,假设爱丽丝想和鲍勃共用一个笔记本。交互环境的状态可以持久化为JSON文件,其中既包含输入到笔记本的代码,也包含从笔记本电脑输出的数据。为了共享笔记本,Alice通常会将此笔记本文件直接发送给Bob。现在,当Bob打开它时,他将看到与Alice相同的输出,但是可能无法对它们做太多操作。这些输出包括计算结果和绘图的图像数据,但不包括Alice正在处理的任何变量的值。为了检查这些变量并扩展Alice的工作,他必须从代码输入中重新计算它们。然而,可能有某些单元只在Alice的计算机上正确运行,或者某些单元被重新排列,无意中破坏了计算流程。当你能够共享一个嵌入结果的笔记本时,很容易错过这样的错误,所以我们决定尝试一些不同的方法。在我们的工作流中,开发人员和数据科学家在本地处理一个笔记本,并将此源文件签入Git。为了发布他们的工作,他们使用我们的通用部署框架,一旦笔记本代码到达我们的服务器,它就会执行它。结果被转换成HTML,以静态方式提供服务。重要的是,我们在预提交钩子中从笔记本文件中剥离结果,这意味着只有代码被签入到我们的存储库中。这确保了当笔记本发布时,结果完全从头开始复制。因此,它要求所有的笔记本电脑都可以从后台到前台以编程方式执行,而不需要任何手动步骤来运行。如果您使用的是条纹计算机,只需单击一次即可运行上面的笔记本并获得相同的结果。这是一笔大买卖!为了使这个工作流程成为可能,我们必须编写一些额外的工具,使相同的代码能够在开发人员的笔记本电脑和生产服务器上运行。这项工作的大部分涉及到对我们的查询引擎的访问,这可能是数据分析项目协作的最常见障碍。即使组织得很好的工作流也常常需要数据文件出现在特定的路径上,或者在运行查询的机器上执行一些带外身份验证步骤。克服这些挑战的关键是在代码中创建一个公共入口点,以便从开发人员的笔记本电脑以及我们的服务器访问这些查询引擎。这样,在一个开发人员的计算机上运行的笔记本在其他所有人的计算机上都能正常运行。添加此工具还大大改善了在笔记本中进行探索性数据分析的体验。在我们使用可再现性工具之前,设置数据访问是乏味、耗时和容易出错的。自动化和标准化这一过程使数据科学家和开发人员能够集中精力进行分析。结论再现性让Stripe的数据科学感觉就像在GitHub上工作,任何人都可以获得并扩展他人的工作。我们在一个中央知识库中分享我们的研究,而不是分析孤岛。这使得我们团队中的任何人都可以更轻松地进行数据科学研究,鼓励独立探索。我们的分析方法与我们对生产代码的严格程度相同:我们的报告感觉更像是成品,研究内容丰富且易于理解,而且每次分析从头到尾都有明确的程序步骤。我们已经切换到可复制的报告,我们不会回头看。交付它们需要更多的前期工作,但我们发现这是一项很好的长期投资。如果你试一试,我们认为你也会有同样的感受!喜欢这个帖子吗?加入条纹工程团队。视图洞口var播放=假;var$video=$('#jupyter screencast');//一旦视频在视口中可见,播放该视频函数shouldPlay(){如果($视频.is(':in viewport')&&!播放){$video[0].play();}}//检查页面加载、滚动和调整大小事件$(窗口).scroll(shouldPlay);$(窗口)。调整大小(shouldPlay);shouldPlay();