我们正在努力为在Kedro中使用的数据建立正确的模型--我们使用的是推荐的Raw\Int\Prm\Ft\Mst模型,但是我们正在为一些概念而奋斗。
我理解数据建模没有硬性和快速的规则,但这些都是大的建模决策&任何关于Kedro建模的指导或最佳实践都会非常有用,我只能找到一个定义凯德罗博士中的层的表。
如果有人能提供任何进一步的建议或博客\docs谈论Kedro数据建模,那将是很棒的!
发布于 2021-06-10 18:30:06
问得好。正如您所说,这里没有硬性规定,意见也不尽相同,但让我分享一下我作为一名QB数据科学家和kedro维护者的观点,他使用了您多次提到的分层惯例。
首先,让我强调,如果kedro不适合您的需求,那么绝对没有理由坚持它所建议的数据工程惯例。99%的用户不更改data中的文件夹结构。这并不是因为kedro默认值对他们来说是正确的结构,而是因为他们不考虑改变它。您绝对应该添加/删除/重命名层以适合自己。最重要的是选择一组适用于您的项目的层(甚至是非分层结构),而不是试图压缩数据集以满足kedro的默认建议。
现在,假设您正在遵循kedro建议的结构--回答您的问题:
什么时候数据集是特性而不是主数据集?区别似乎很模糊..。
在简单特性的情况下,特征数据集可以非常类似于主特性。如果您考虑到更复杂的特性,例如,通过时间窗口聚合而形成的特性,那么这种区别可能是最清晰的。主数据集将有一个列,该列提供原始数据的清洁版本,但不对其进行任何复杂的计算,只进行简单的转换。假设原始数据是所有经过你家一周以上的汽车的颜色。当数据处于初级状态时,它将是干净的(例如,将"rde“更正为"red",可能将"red”和“red”映射为相同的颜色)。在主层和特征层之间,我们将对其进行一些不那么琐碎的计算,例如每天找出最常见的一种热编码的汽车颜色。
主数据集可以使用来自另一个主数据集的数据吗?
在我看来是的。如果要将多个主表连接在一起,这可能是必要的。一般来说,如果您正在构建复杂的管道,如果您不允许这样做,就会变得非常困难。例如,在特性层中,我可能想要形成一个包含来自两个输入的composite_feature = feature_1 * feature_2 ( feature_1和feature_2 )的数据集。如果功能层中没有多个子层,就无法做到这一点。
但是,通常值得避免的是节点会消耗来自多个不同层的数据。例如,从特征层接收一个数据集和从中间层接收一个数据集的节点。这似乎有点奇怪(为什么后一个dataset没有通过特性层)。
从INT层构建特性数据集是一种良好的实践吗?还是应该一直通过小学?
从中间层构建功能并非闻所未闻,但似乎有点奇怪。主层通常是一个重要的层,它构成了所有特征工程的基础。如果您的数据是可以构建功能的形状,那么这意味着它可能已经是主要层了。在这种情况下,您可能不需要中间层。
上述各点可由下列规则概括(如有需要,无疑应予以违反):
L中节点的输入数据集都应该位于同一层,可以是L,也可以是L-1。L中节点的输出数据集都应该位于同一层L中,这可以是L,也可以是L+1。如果有人能提供任何进一步的建议或博客\docs谈论Kedro数据建模,那将是很棒的!
我也想看看其他人在这里的想法!值得注意的一件可能有用的事情是,kedro是受炊具数据科学启发的,而kedro层结构是有什么建议的扩展版本。也许其他项目采用了这种目录结构,并以不同的方式对其进行了调整。
发布于 2021-07-08 13:26:10
你的问题促使我们写了一篇媒体文章,更好地解释了这些概念,这只是“迈向数据科学”杂志
https://stackoverflow.com/questions/67925860
复制相似问题