在数据摄取之前、期间或之后进行数据清理?

Data cleaning before, during or after data ingestion?

我正在 Python 中构建一个独立的数据分析项目。由于项目需要可扩展,因此需要相当可靠的数据处理和分析管道。

到目前为止,我计划使用 Singer (https://www.singer.io/) 通过 PostgreSQL 目标从多个来源获取数据。

管道目前看起来有点像这样: 数据源 --> 摄取 --> 存储在 postgreSQL 数据库中 --> 数据处理层 --> 分析环境。

我已经编写了 Pandas 代码来清理数据处理层中的数据 - 但我不确定在将数据从数据库拉入分析环境时清理数据是否是最佳做法。特别是每次提取数据时都会重复数据处理。我应该在摄取层处理数据吗?我将如何使用 Singer 管道执行此操作?

一如既往地视情况而定。

摄取前清理数据

优点

  • 降低网络流量/数据量
  • 它需要更少的存储空间

缺点

  • 每个数据源都需要额外的步骤
  • 很难编排,监控这些

在摄取期间清理数据

优点

  • 初步检查位于一个地方
  • 您可以报告指标
    • 摄取、丢弃、ingested-dropped 比率等
  • 可以更轻松地编排和监控此步骤

缺点

  • 这只是初步检查
    • 在数据建模期间,您可能需要做进一步清理
  • 维护这些规则是数据管道工程师的职责

摄取后清理数据

优点

  • 它不仅可以用于初步检查
    • 例如:去重、过滤不需要的异常值等
  • 可以根据数据模型定义不同的清理步骤

缺点

  • 需要更多存储空间
  • 每个数据科学家都必须实施his/her自己的清理步骤

这不是一个详尽的列表,但我希望它能告诉您应该如何开始考虑这个问题。