APP下载
报价宝  ›  科技  › 

Jupyter Notebook 最佳实践

报价宝 来源:baojiabao.com 发布时间:2019-11-05 16:02:00 11月14日更新
报价宝综合消息Jupyter Notebook 最佳实践

断断续续做过几个数据分析方面的专案,使用的是 Python 爱好者耳熟能详的 Jupyter Notebook。一开始把各种 .ipynb档案、资料来源档案都放在同一个专案目录下,看上去特别杂乱无章,整理的时候也是一团乱麻。

后来在Google上找到一篇介绍 Jupyter Notebook 最佳实践的文章,受益匪浅。按照书中所提的建议来组织专案,确实要清晰的多了,而且特别适合团队共同完成资料科学专案。

因此摘录其中的关键点分享出来,希望能帮助到正在学习使用 Jupyter 的朋友。

整体思路

将资料科学专案的 notebook 分为两大类:实验版和交付版,分别进行鍼对性的管理。

实验版 notebook参考传统实验室中整理笔记的方法,在使用 Jupyter notebook 时,遵循以下几点:

每个 notebook 都要保留分析历史(和日期)记录

每个 notebook 仅用于开发和实验。

每个 notebook 只有一位作者:标注作者的首字母缩写。

notebook 如果太长,可以进行拆分

如果需要,可以按主题区分 notebook。

交付版 notebook:可交付版的 notebook 则是打磨完善的版本,并且包含有最终的分析输出。这类 notebook 需要由整个团队来进行管理,而不是交给某一个人。

版本控制

多人协作进行资料分析时,建议采用 Pull Request 的方式提交程式码。通过 Git 和 Github 可以很好地实现这点。但是在检视 PR 的时候,审查人需要能给清晰地辨别出 .ipynb档案的变动。

推荐将 .ipynb档案转化成.py档案后,再进行档案差异对比,可以方便地检视程式码的变化。

另外,在审查分析程式码时,最好能给直接检视输出的变化。因此推荐储存一份 HTML 版的输出档案。

图1:修改前的拟合情况

图2:修改后的拟合情况

Post-save 钩子可以通过 post-save的钩子,很方便地完成上节所说的.ipynb档案转换成.py档案的工作。只需要按照如下程式码所示,修改 ipython 的配置档案即可:

〜/ .ipython / profile_nbserver / ipython_notebook_config.py

新增以下程式码:

#如果您想自动储存笔记本的.html和.py版本:modified from:https://github.com/ipython/ipython/issues/8009

import os

from subprocess import check_call

def post_save(model,os_path,contents_manager):

"""用于将笔记本转换为.py指令码的储存后挂钩"""

if model ['type']!='notebook':

return # only do this for notebooks

d,fname = os.path.split(os_path)

check_call(['ipython','nbconvert',' - to','script',fname],cwd = d)

check_call(['ipython','nbconvert',' - to','html',fname],cwd = d)

c.FileContentsManager.post_save_hook = post_save

现在,每次储存到笔记本都会更新名称相同的.py和.html档案。在提交和拉取请求中新增这些,您将从这些档案格式中获益。

完整示例

这是正在进行的专案的目录结构,有一些关于命名档案的明确规则。

示例目录结构:

- develop#(实验版 notebook)

+ [ISO 8601日期] - [DS-作者首字母简称] - [2-4字描述] .ipynb

+ 2015-06-28 -jw-initial-data-clean.html

+ 2015-06-28-jw-initial-data-clean.ipynb

+ 2015-06-28-jw-initial-data-clean.py

+ 2015-07-02-jw-coal-productivity-factors.html

+ 2015-07-02-jw-coal-productivity-factors.ipynb

+ 2015-07-02-jw-coal-productivity-factors.py

- deliver#(最终分析,程式码,简报等)

+Coal-mine-productivity.ipynb

+Coal-mine-productivity.html

+ Coal-mine-productivity.py

- figures

+ 2015-07-16-jw-production-vs-hours -working.png

- src#(模组和指令码)

+ init.py

+ load_coal_data.py

+ figures#(数字和图表)

+ production-vs-number-employees.png

+ production-vs-hours-working.png

- data(备份 - 与版本控制分开)

+ coal_prod_cleaned.csv

优点总结

本文分享的这种工作流程和目录结构,主要由两大明显的优点

首先,我们可以看到资料分析的执行过程,通过日期、作者、主题就可以进行检索

按日期(ls 2015-06 * .ipynb)

作者(ls 2015 * -jw - * .ipynb)

按主题(ls * -coal - * .ipynb)

其次,在审查 PR 时,储存 .py和.html档案可以快速定位变动,以及直观确认输出的变化。而且采用post-save的钩子也是一劳永逸。

大家可以结合自己团队的情况,有选择地采纳上述建议。如果有更合理的解决方案,也欢迎大家反馈。

--

source:https://www.svds.com/jupyter-notebook-best-practices-for-data-science/

回复下方“关键词”,获取优质资源

回复关键词“ pybook03”,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词“pybooks02”,立即获取 O'Reilly 出版社推出的免费 Python 相关电子书合集

回复关键词“书单02”,立即获取主页君整理的 10 本 Python 入门书的电子版

Python 或将超越 C、Java,成为最受欢迎的语言

Python 容器使用的 5 个技巧和 2 个误区

题图:pexels,CC0 授权。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 手机价格 笔记本电脑价格 电视机价格 华为手机价格