小编kur*_*sis的帖子

将jupyter笔记本变成python脚本的最佳实践

Jupyter(iPython)笔记本当之无愧地被认为是一个很好的工具,用于对代码进行原型设计并以交互方式进行各种机器学习.但是当我使用它时,我不可避免地遇到以下问题:

  • 笔记本电脑很快就变得过于复杂和混乱而无法进行维护和改进,而且我必须制作python脚本;
  • 当涉及到生产代码(例如每天需要重新运行的代码)时,笔记本电脑再次不是最好的格式.

假设我在jupyter中开发了一个整机学习管道,包括从各种来源获取原始数据,清理数据,特征工程和培训模型.现在用高效可读的代码从中制作脚本的最佳逻辑是什么?到目前为止,我曾经用几种方法解决它:

  1. 只需将.ipynb转换为.py,只需稍加修改,就可以将笔记本中的所有管道硬编码为一个python脚本.

    • '+':快
    • ' - ':脏,不灵活,维护不方便
  2. 制作一个包含许多函数的单个脚本(对于每一个或两个单元格大约有1个函数),尝试使用单独的函数组成管道的各个阶段,并相应地命名它们.然后通过指定所有参数和全局常量argparse.

    • '+':使用更灵活; 更可读的代码(如果您正确地将管道逻辑转换为函数)
    • ' - ':通常情况下,管道不能拆分成逻辑上完成的部分,这些部分可以成为函数而代码中没有任何怪癖.所有这些函数通常只需要在脚本中调用一次,而不是在循环,映射等内多次调用.此外,每个函数通常都会获取之前调用的所有函数的输出,因此必须将多个参数传递给每个函数.功能.
  3. 与point(2)相同,但现在将所有函数包装在类中.现在,所有全局常量以及每个方法的输出都可以存储为类属性.

    • '+':您不需要为每个方法传递许多参数 - 所有以前的输出都已存储为属性
    • ' - ':任务的整体逻辑仍未被捕获 - 它是数据和机器学习管道,而不仅仅是类.该类的唯一目标是创建,逐个调用所有方法,然后删除.除此之外,课程实施起来还很长.
  4. 使用多个脚本将笔记本转换为python模块.我没有试过这个,但我怀疑这是解决这个问题的最长方法.

我想,这种整体设置在数据科学家中非常普遍,但令人惊讶的是我无法找到任何有用的建议.

伙计们,请分享您的想法和经验.你有没有遇到过这个问题?你是怎么解决它的?

python refactoring readability ipython-notebook jupyter

37
推荐指数
2
解决办法
8503
查看次数

seaborn jointplot中的其他关键字参数

我试图找出matplotlib和seaborn绘图函数是如何关联的.特别是,我想知道什么样的pyplot参数可以传递给关键字dicts marginal_kwsannot_kws函数seaborn.jointplot().

假设我们有data包含列c0和的DataFrame c1.我猜测joint_kws接受来自的参数pyplot.hexbin(),所以当我试图用那里的参数调整外观时,它工作得很好:

import seaborn as sns   
sns.jointplot('c0', 'c1', data=data,  kind='hex',
               joint_kws={'gridsize':100, 'bins':'log', 'xscale':'log', 'yscale':'log'})
Run Code Online (Sandbox Code Playgroud)

然后我试图在直方图轴与参数设置日志规模log=Truepyplot.hist():

    sns.jointplot('c0', 'c1', data=data,  kind='hex',
                   joint_kws={'gridsize':100, 'bins':'log', 'xscale':'log', 'yscale':'log'}, 
                   marginal_kws={'log':True})
Run Code Online (Sandbox Code Playgroud)

这导致了

TypeError: distplot() got an unexpected keyword argument 'log'
Run Code Online (Sandbox Code Playgroud)

怎么说得对?

PS这个问题不是关于在seaborn中设置日志比例(JointGrid我知道),而是将matplotlib参数作为一个整体传递给seaborn函数.

python matplotlib seaborn

6
推荐指数
1
解决办法
7845
查看次数