好吧,坐下 我知道这是一个令人难以置信的双关语,但是起立鼓掌吗? 来吧。


Makefile很容易。 Makefile将改变您的生活。 每个数据科学家都应该使用Makefile。 您需要Makefile。
GNU make是应该在更多数据科学家的工具箱中使用的工具。 它使用了称为Makefiles的东西,它们是数据科学家每天所做的流水线工作类型的自然映射,并允许我们和其他人轻松地复制工作。


- Makefile只是👏规则的👏列表👏
- 规则组成如下:
目标:先决条件
食谱
- 您必须缩进制表符 。 别客气。
- 您可以通过从命令行调用
make来执行规则。


这使您的代码面向任务 -任何人都可以输入您的存储库,并查看执行给定任务所需的一系列步骤。 甚至更好的是,他们可以只运行make命令,而不必担心内部运行情况。 您不必等待Pythonella,Pythonella上周才去度假,并且是唯一知道如何为明天的季度业务评估报告中使用的模型更新权重的人。
但是,也许这种面向任务的演讲太抽象了。 我没有在花哨的shmancy Makefile中看到它的用法(*抬起头,拿出小指*),因为所有示例都涉及到编译C代码,而我的脑海中却密密麻麻这将使我受益,数据科学家Extraordinaire™️。 如果您希望自己的眼睛呆呆,建议在此处查看Wikipedia页面上的Makefile。
为了说明起见,我们将以机器学习项目为例。 众所周知,由于存在松散的模型和参数,超参数,数据和图表,因此很难组织它们。 我将向您展示如何使用makefile简化此过程(微风,漂亮, CoverGirl )。


我个人喜欢像脑海中的穴居人一样阅读Makefile,以使事情保持生动。 弄干净。 制作数据。 着火。 咕 试试吧。 坚持一下。
设置项目
让我们从热身开始。 您刚刚克隆了一个具有比整个一生都更多依赖的仓库。 首先是第一时间:建立环境。 在这些示例中,我将向您展示旧方法(无Makefile)和新方法(已配置Makefile)。
旧:
虚拟环境
来源venv / bin / activate
pip install -r requirements.txt 新:
提出要求
清除缓存
春季大扫除从未如此轻松。 您知道当您认为自己的代码更改无效时,但实际上只是忘了清除缓存,而现在却感到愚蠢吗? 如果您只是保持身体make clean就可以避免自我厌恶。
旧:
嗯...您需要在哪里清除缓存? *关于缓存和项目名称的技巧,也许可以找到*
rm -rf path / to / cache / you / maybe / found 新:
弄干净
在计算机和远程存储之间同步数据
承认这一点-您一直想要一个刷新按钮来保存数据。 我的意思是,它不是您的愿望清单上的第一名,但它在那里。
旧:
scp user @ ip-address:/ path / to / data / on / remote / server / path / to / data / on / local / machineUgh数据再次保存在哪里? 是在ec2-user@555.110.12还是kill-me-now @ help? 新:
同步到S3
在幕后,您的Makefile中将具有以下规则:
桶=
sync_data_to_s3:
aws s3同步数据/ s3:// $(桶)/ data /
注意Makefiles中变量的经典用法。
整理—使您的代码一尘不染
我知道我们所有人都在设置git pre-commit钩子,但我在这里是为了带走您的喜悦。
旧:
点安装预提交
预提交安装
-设置讨厌的隐藏配置文件
-选择您的短毛绒,并从Github上的粗略镜像中找到提交哈希
-想知道为什么它仍然不起作用,并在记住童年愿望的同时凝视窗外新:
使皮棉
创建(可重现)数据集
在此类应用程序中,Makefile真正发挥了作用。 请注意,您甚至可以从命令行传递参数! 创建数据集通常是一个涉及SQL查询的高度可变的多步骤过程,可能需要使用Python进行一些预处理,然后再推送到AWS S3或其他某种类型的存储。 Makefile可以将这样的管道简化为一个命令
旧:
Pythonella在哪里? 我需要她用来为该模型提取数据的查询。 哦,好吧,我自己写吧... *在痛苦中写查询* ... *遭受*运行:
python preprocess.py / path / to / questionable / data
aws s3 cp / path / to / still / questionable / data / path / in / s3 --recursive我们使用什么采样率? 班级重量现在会被弄乱吗? (是。可能是。) 新功能:
制作样本RATE = .10
这很干净,设置了默认值,并将所有内容捆绑为一个步骤。
执行测试套件
最后,由于我们始终拥有覆盖率达100%的单元测试套件,因此我们可以设置:
旧:
pytest 新:
做测试
您可能在想“这个实际上更长一些……”,对此我要说“哦”。
现在,您刚刚加入了一个新的机器学习团队,该团队已构建了深层卷积神经网络,可以为某技术公司的P̶r̶i̶m̶e̶交付无人机执行对象识别。 他们说:“欢迎加入团队!! 请为明天的客户演示重新训练模型。 这真的很重要。 谢谢。”
幸运的是,这里有一个Makefile,您只需阅读本文即可。 您打开指关节并敲门:
弄干净
提出要求
制作数据
开火车
做评估
做演讲
从此我们所有人都过着幸福的生活。
Makefile极大地帮助了数据科学家的工作流程。 我们使用许多不同的工具,混合并匹配广告素材,有时只是想记住使用一段时间以来未使用过的工具的基本步骤,这确实会使我们放慢脚步。 Makefile帮助记录和简化需要采取的步骤。 由于关键的开发人员正在休假或不再在公司工作,因此它们减轻了可以延缓项目的人为知识传递组件。 最后,它们有助于确保可重复性,有助于使数据科学牢固地扎根于科学领域。
维护良好的数据科学项目的三重奏是git,一个测试套件和make 。
那么,如何使用Makefiles作为数据科学家呢? 您发现哪些动作特别有帮助? 您认为我错过了什么吗? 在下面的评论中让我知道。
并且,如果您觉得这很有用,或者希望看到更多类似的数据科学内容,请推荐或分享。
cookiecutter-data-science的Makefile示例[必须单击]
GNU Make手册[应该点击]