我正在构建一个工作流,用于从一个非常大的数据库(这里是 Vertica 通过SQLpandas
和预测变量的值。这在单个分析或统计平台中很简单——无论是 Python、R、Stata 等——但我很好奇在多平台工作流中最好找到这一步。sklearn
pyodbc
在 Python 中执行此操作非常简单,可以使用sklearn.preprocessing.Imputer
类、使用pandas.DataFrame.fillna
方法或手动(取决于所使用的插补方法的复杂性)。但由于我将在数亿条记录中使用数十或数百列,我想知道是否有更有效的方法可以提前通过 SQL 直接执行此操作。除了在像 Vertica 这样的分布式平台中执行此操作的潜在效率之外,这还有一个额外的好处,即允许我们创建一个自动化管道来构建“完整”版本的表,因此我们不需要填写新的集合每次我们想运行一个模型时从头开始的缺失值。
我还没有找到很多关于这个的指导,但我想我们可以:
- 为每个不完整的列创建一个替代值表(例如,平均值/中位数/众数,整体或按组)
- 将替换值表与原始表连接起来,为每一行和不完整的列分配一个替换值
- 使用一系列 case 语句来获取原始值(如果可用),否则使用替代值
这是在 Vertica/SQL 中做的合理的事情,还是有充分的理由不打扰而只在 Python 中处理它?如果是后者,是否有充分的理由在 pandas 而不是 sklearn 中执行此操作,反之亦然?谢谢!