大数据文摘■从全栈工程师到数据科学家,入职第一年我都做了些什么?( 二 )


文档记录
记录一切 , 我定义的一切是从模型超参数到从何处以及如何获得训练数据 , 到在整个项目中做出选择的理由 。 另外 , 以有序的逻辑方式编写文档 , 实现这一目标的一个秘诀是 ,哪怕你只是写给自己看(例如 , 在我的情况下 , 我是唯一的数据科学家) , 你应该想象有人会读这份文档 。
此外 , 记录时要对自己有一定的约束 , 不要拖拉 , 不要走捷径 。 不然等你开始写的时候 , 你可能已经忘记一些需要注意的细节 。 因此一定要及时写下来 。 在完成文档之前 , 我觉得工作就还没做完 。 我从一开始就遵循这种方法 , 我觉得至关重要 。
我发现一件事是 , 即使在一个中型企业 , 等到一个项目的研究成果在公司开始推广已经是一段时间以后了 , 利益相关方因为有其他事要忙 , 所以不会立刻作出回应 。
有时候在我完成一个项目几个月后 , 有人跑来问我问题 , 我一时想不起来 , 但如果我翻看我之前做的文档记录就能马上提供详尽答案 。 例如 , 有一次我与另一位经理聊起几个月前做的一个项目 , 我向他展示了我已经完成的工作 , 他问我训练集的大小是多少 , 以及我用来获取数据的日期区间 。 我并记不得那些数据 , 但我记得自己已经写下过 , 而且我也记得写在了哪里 。 所以我能马上把文档拿给他们看 。
我发现自己遇到的另一种情况是当业务优先级发生变化 , 你可能会需要停下手头还没完成的项目去做另一个项目 。 当你再回到之前开始的项目时 , 完整的文档可以让你从之前停下的地方继续进行下去 。
不顺利的一面
数据存储
回顾前一年 , 进展不顺利的一个原因是我处理数据的方式(对于数据科学家而言这非常关键) 。
当我没有使用数据库的经验时 , 我基本上复用了在博士期间使用数据的方式 。 使用平面文件(特别是CSV)来存储数据 。 我把从生产环境中提取的初始数据 , 清洗后的中间过程数据 , 分析后的数据和结果都存在了CSV里 。 我工作流程中的每一步骤都需要通过Python脚本读取上一步创建的文件 , 并创建新的文件 。
这种把内容存储在硬盘上 , 并通过Python脚本与数据交互的原始办法 , 很快就出现了一些问题:

  • 有时很难在大量文件中找到我要找的那个文件 。 即使我记录了文件的内容和位置 , 但有时还是很难找到我想要的确切文件 , 因为文件实在太多了 。
  • 我似乎总是在忙着用Python把从文件中读取数据或者将数据写入文件 。 我写了很多文件访问的命令 , 但其实是在做重复劳动 , 写这些代码对我要做的工作并没什么帮助 。
  • 想快速地将数据总结一下似乎都有点费力:读取数据 , 汇总统计 , 输出统计 , 查看统计结果 。
  • 有些文件很大 , 用起来很困难(在notepad中打开10GB以上的文件很麻烦) 。
第一年 , 我花了很长时间才意识到SQL是我的解药 。
在从事数据科学家工作之前我使用过SQL , 但是我一开始没有意识到它对我的价值 。 当我意识到SQL就是我的解决方案后 , 我花了很多时间来学习更多有关SQL的知识 , 因为我在做程序员的时候稍微学了一点SQL 。
具体来说 , 我学习了如何查询数据(特别是我以前没接触过的高级语句)以及搭建和维护数据库的基础知识 。 我甚至通过了两个Microsoft SQL的考试 。 我现在主张尽可能用SQL 。 我把所有项目的数据都存在了SQL数据库中 , 尽量在SQL中做数据查询和操作 。
我的原则是:能在SQL中完成的处理 , 就在SQL中做 。 SQL处理不了的任务再用Python(例如 , 模型训练和执行)这里延伸出一个问题:你需要学会使用Python库 , 例如 SQLAlchemy , 从 SQL读取数据到Python里 。
现在我的后SQL生活变得容易很多: