国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

十大至简规则,用Jupyter Notebook写代码应该这样来

发布时间:2019/07/29标签:   代码    点击量:

原标题:十大至简规则,用Jupyter Notebook写代码应该这样来
Jupyter Notebook 是一个十分罕用的代码编纂器,它十分合适做数据剖析与代码展现,许多云效劳也采纳它作为代码编纂器。别的,由于用这类编纂器看代码比拟轻松,文档描写和输入后果也能进一步关心懂得,许多研讨者都市采纳 Jupyter 作为说明研讨完成的东西。假如 Jupyter Notebook 写的好,那末研讨完成及复现就更精美,假如再放到 Colab 等存在收费算力的东西上,那就比拟完善了。在呆板之心之前先容过的文章中,咱们存眷 Jupyter Notebook 的炫酷插件与主题作风,更夸大东西自身的应用姿势。而一篇发在 arXiv 上的文章先容了甚么是展现完成代码的十大简略规矩,我该又该怎样应用它们构建 Jupyter 名目。这关于研讨者和盼望展现名目完成的开辟者而言十分主要,咱们能够像说故事一样先容咱们的完成。论文链接:https://arxiv.org/pdf/1810.08055.pdf上面,咱们就以展现可复现性研讨结果为目的,看看 Jupyter 要怎么写才比拟公道。Jupyter Notebook 与研讨的可复现性可复现性(Reproducibility)须要供给研讨所用数据、软件、依靠项和盘算情况(如硬件或云设置)的人类可读和呆板可读的描写,以及先容怎样组合以上全部局部的文档。之前剖析职员平日将这些信息保留在独自的数据、剖析、成果、设置和解释文件中(这些文件平日很难组合和同享),不外他们越来越多地应用盘算型 notebook(如 Jupyter Notebooks 和 R Notebooks),在单个交互式和可移植文档中组合可履行代码、衬着可视化后果和描写性文本。Jupyter Notebooks 大大下降了可复现性的艰苦,它使迷信家可能轻松地编写混杂了代码、成果和文本的同享盘算叙说,从而支撑可复现性研讨。但是,像 Jupyter Notebook 如许的盘算型 notebook 并没有处理完成可复现性的全部阻碍,并且它们还引入了另一些奇特的挑衅,此中局部挑衅源于它们的交互性。斟酌到在 Jupyter Notebooks 上公布可复现研讨的技巧和社会阻碍,来自加州大学圣地亚哥分校和伯克利分校的研讨者体例了一套规矩、提醒、东西和示例 notebook。这套规矩专一于 Jupyter Notebooks,不外也实用于其余混杂了及时代码和叙说性描写的文档。下图 1 展现了在 notebook 开辟周期差别阶段所利用的规矩。图 1:将十个简略规矩利用于创立 Jupyter Notebooks 的任务流。从上到下,该图描写了开辟一个记载细致、功效精良、用于可复现性研讨的 Jupyter Notebooks 所需的三个差别的阶段。规矩 1:为观众讲故事应用 Jupyter Notebooks 的一个重要利益是,它能将说明性文本与代码和成果交错在一同,创立盘算性叙说 [8]。不要只保存零碎的条记,而是用说明性笔墨报告一个惹人入胜的故事,故事的扫尾先容主题,旁边先容步调,开头说明成果。不只要描写你做了甚么,还要描写为甚么要如许做、这些步调是怎样衔接的,以及它们象征着甚么。怎样报告这个故事将取决于你的观众。你盘算和试验室的非技巧共事、另一个试验室的剖析师、某一期刊的读者仍是大众分享你的 notebook?你能够须要为每一类观众供给差别品种和级其余说明。规矩 2:记载进程,而不只仅是成果盘算型 notebook 的交互特征使得实验和对照差别方式或参数愈加疾速和轻易,甚至于咱们在履行这些交互式调研时每每无奈将其记载上去。因而,这个倡议变得愈加主要:确保记载下全部的探究,乃至那些招致进入死胡同的探究!这些将关心你记着做了甚么和为甚么做。很多 notebook 用户比及剖析停止、失掉了牢靠成果后,才增加如许的说明性笔墨。不要等,到当时你能够曾经忘却了为甚么抉择某个特定参数值、从那里复制了一段代码,或许旁边成果的有味之处是甚么。假如你没偶然间片面记载你现在正在做甚么或在想甚么,那末留下冗长的描写性条记来提示本人,在能够停下时放松把这些内容增加上。规矩 3:增加宰割,使步调更清楚notebook 是一个交互式的情况,以是它很轻易编写和运转单行单位格。这有益于试验,但会让 notebook 混乱不胜,充斥难以懂得的短小片断。那末,实验让 notebook 中的每个单位格履行一个故意义的剖析步调,而且该步调能够依据单位格中的代码或四周的 markdown 描写很轻易地舆解。按单位格模块化代码,并在单位格上方用 markdown 标志。将每个单位格设想为一个段落、领有一个函数或实现一个义务(比方,创立一个画图)。幸免长单位格(任何超越 100 行或一页的内容都太长了)。在代码解释中放入初级文档。应用描写性的 markdown header 将 notebook 分区,使其能够轻松导航和增加名目。将长 notebook 拆分为一系列 notebook,并保存一个 top-level index notebook,此中包括指向各个 notebook 的链接。规矩 4:模块化代码幸免反复代码老是很好的做法,然而在 notebook 中,复制一个单位格、调剂几行、将天生的代码粘贴到新单位格或其余 notebook 中并再次运转是特殊轻易的。这类实验情势很便利,但假如你想变动复制的代码的功效或修复此中的 bug,就会使 notebook 难以浏览,而且简直弗成能停止保护。因而你能够将要复制和重用的代码包装在一个函数中,如许便可以依据须要从恣意多个单位格中挪用该函数。假如你要在其余名目或 notebook 中重用代码,请斟酌将其转换为模块、包或库,并遵守精良的软件开辟实际(如单位测试)。模块化不只节约空间,支撑保护,调试便利,还使增添交互性变得愈加简略。规矩 5:记载依靠项将来从新天生剖析时,不只须要拜访代码,还须要拜访依靠项。盘算迷信的最好实际是,从一开端就应用诸如 conda 的 environment.yml 或 pip 的 requirements.txt 之类的东西明白地治理依靠项,以列出全部相干的依靠项(包含它们的软件版本)。一直在这些依靠项创立的情况中任务,以确保不增加未记载的依靠项。在 notebook 中,你能够应用 notebook 的扩大(如 watermark)显式打印依靠项。列出 notebook 中要害依靠项的版本(最好列在最下方),假如 notebook 与情况断绝应用,那末这将保障 notebook 中依然包括要害信息,从而关心读者复制成果。规矩 6:应用版本操纵版本操纵是 notebook 应用的一个主要帮助东西,由于 notebook 的交互特征使其很轻易不测地变动或删除主要内容。别的,因为 notebook 中包括代码,代码弗成幸免会有 bug,因而断定 bug 引入与修复的时光(及其能够影响的剖析)是迷信盘算中的一项要害才能。然而,请留神,Jupyter Notebook 将每个单位格的代码和特定且普遍的元数据存储为 JSON 格局的文本文件。版本操纵体系比拟这些 JSON 文件中的差别,而不是用户友爱型 notebook GUI(图形用户界面)中的差别。规矩 7:构建 pipeline记载开端探究性研讨的 notebook 很少能被普遍推行,但一旦断定了某种稳固的剖析方式,计划精良的 notebook 便可以经过 pipeline 推行到其余义务中,从而应用差别的输出数据和参数很轻易地反复剖析。记着这一点,从一开端就计划你的 notebook,以同意未来从新调剂用处。把要害变量申明(特别是在停止新的剖析时会转变的变量)放在 notebook 的顶部,而不是埋在旁边的某个处所。间接在 notebook 中履行预备步调,如数据清算,并尽能够幸免手动干涉。规矩 8:分享息争释数据假如底层数据被锁定,那末拜访清楚解释的 notebook 对可复现性也简直没有效处。尽力使你的数据或数据样本与 notebook 一同公然。notebook 能够很轻易地供给输出数据和下游处置步调的描写,这关于说明成果相当主要。幻想情形下,你能够在 notebook 中同享全部数据集。咱们意识到很多数据集太大或太敏感,无奈以这类方法同享。在这些情形下,斟酌将大型和庞杂的数据集剖析为多个档次,如许即便原始数据太大,无奈与已公布的 notebook 一同同享,或许遭到隐衷或其余拜访成绩的限度,也不会影响到可复现性。规矩 9:同意浏览、运转和探究 notebook假如你遵守了后面的规矩,那末你的 notebook 应当可能捕捉全部进程并易于浏览。然而其余人怎样拜访、运转和探究它们呢?你能够经过多种方法支撑别人重用你的 notebook。起首,将 notebook 存储到一个具有清楚 README 文件的大众代码库中。除了同意重用以外,你还要斟酌怎样应用 notebook 的奇特构造来支撑浏览和探究。最少,将全部 notebook 的动态 HTML/PDF 版本存储在出书物附带代码库的终极版本中。规矩 10:增进可复现和凋谢的研讨明显,仅应用盘算型 notebook 并不能保障研讨的可复现。假如 notebook 的方便性和交互性让你中意,那你能够采用下一步举动,在试验室或任务场合宣扬其可复现性。让试验室的共事试着运转你的 notebook,而后听他们说明在甚么处所出了成绩。也试着运转他们的 notebook,让他们晓得你能否碰到了阻碍。将可复现性作为研讨小组全部盘算任务的要害因素,而不是在剖析实现后才履行,或被期刊或评审职员请求后才情考。【本文是51CTO专栏机构“呆板之心”的原创译文,微信大众号“呆板之心( id: almosthuman2014)”】戳这里,看该作者更多好文【编纂推举】赤壁之战,曹操大北只因缺了Service Mesh这是谁写的代码,给我站进去,保障不打死你!JavaScript九大口试成绩集锦,助你顺遂通关!Java后端如许口试,拿到Offer的概率是99%搞定Java渣滓接纳,就这一篇!【义务编纂:赵宁宁 TEL:(010)68476606】点赞 0

版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号