在命名Jupyter笔记本时,如果使用空格,即
This is my notebook.ipynb
然后在使用Web浏览器打开时渲染效果非常好。但是,命令行环境中的空格是邪恶的。但如果相反:
This_is_my_notebook.ipynb
或
This-is-my-notebook.ipynb
然后呈现的标题不看起来不错。对替代惯例的任何建议,但看起来仍然有点好看?
答案 0 :(得分:2)
这实际上取决于您的个人喜好和用例。这是我使用的方法:
[#]_[2-4 word description]_[DS-initials]_[ISO 8601 date].ipynb
例如
- jupyter-notebooks
+ 1_exploratory_analysis_ag_2019-02-16.ipynb
+ 1_exploratory_analysis_jw_2019-02-19.ipynb
+ 1_exploratory_analysis.ipynb
+ 1_exploratory_analysis.py
+ 1_exploratory_analysis.html
+ 2_topic_modeling_ag_2019-02-20.ipynb
+ 2_topic_modeling.ipynb
+ 2_topic_modeling.py
+ 2_topic_modeling.html
+ dev_2019-02-15.ipynb
+ dev_2019-02-18.ipynb
+ dev.ipynb
+ dev.py
+ dev.html
在这里,我将所有笔记本放在名为jupyter-notebooks
的文件夹中。文件和脚本输出通常位于此文件夹之外。
如果适用,则笔记本计算机按逻辑顺序编号,例如首次创建的日期。在许多情况下,给文件编号(例如this repo of mine)是没有意义的。
笔记本使用时间戳和最新作者的姓名缩写(可选)进行版本控制。这可以通过保存后的挂钩自动完成(请参见下文)。
笔记本的非时间戳版本具有.py
和.html
版本。通过将.py
文件提交到git,可以获得版本控制的一些好处。这些文件也可以使用后保存挂钩生成。
其他开发工作可以放在dev...
文件中。
我设置了一个后保存钩子来自动执行此操作。在我的配置文件(~/.jupyter/jupyter_notebook_config.py
中,我得到了:
import os
from subprocess import check_call
import glob
import datetime
import re
def timestamped_file(fname):
return bool(re.match('.*\d{4}-\d{2}-\d{2}\.ipynb', fname))
def post_save(model, os_path, contents_manager):
if model['type'] != 'notebook':
return # only do this for notebooks
# Post-save hook for converting notebooks to .py scripts
d, fname = os.path.split(os_path)
if not timestamped_file(fname):
check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)
check_call(['jupyter', 'nbconvert', '--to', 'html', fname], cwd=d)
# Post-save hook for saving datestamped versions of the notebook
notebooks = glob.glob('*.ipynb') + glob.glob('jupyter-notebooks/*.ipynb')
if notebooks:
latest_mod_file = max(notebooks, key=os.path.getctime)
# Don't do this for datestamped notebooks
if not timestamped_file(latest_mod_file):
date = datetime.datetime.now().strftime('%Y-%m-%d')
fname_timestamped = '{}_{}.ipynb'.format(os.path.splitext(latest_mod_file)[0], date)
check_call(['cp', latest_mod_file, fname_timestamped])
c.FileContentsManager.post_save_hook = post_save
如果保存未添加时间戳的文件,它将自动转换为.py
和.html
,并创建带有时间戳的版本。
我的约定受到this blog post的极大启发。他们描述了我几年前开始采用的惯例,然后才采用自己的变体形式。
这是其中包括的示例:
- develop
+ [ISO 8601 date]-[DS-initials]-[2-4 word description].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
如您所见,开发笔记本和交付笔记本有单独的文件夹(和命名约定)。
答案 1 :(得分:0)
我发现自己也在寻找这个答案......
我搜索了一些流行的GitHub存储库,这些存储库涉及.ipynb文件,假装工作声名狼借。我发现利用短划线和下划线之间没有标准;但是,我没有看到任何使用空格的笔记本 - 所以不要这样做。
来源:
https://github.com/IRkernel/IRkernel/tree/master/example-notebooks
https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python/tree/master/Supporting_Notebooks