前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Jupyter Notebook切换到Script的5个理由

从Jupyter Notebook切换到Script的5个理由

作者头像
计算机与AI
发布2020-12-14 15:23:12
1.1K0
发布2020-12-14 15:23:12
举报
文章被收录于专栏:计算机与AI计算机与AI

使用脚本可以帮助我实现Jupyter Notebook的缺点

动机

与大多数人一样,我开始学习数据科学时使用的第一个工具是Jupyter Notebook。大多数在线数据科学课程都使用Jupyter Notebook作为教学手段。这是有道理的,因为对于初学者来说,在Jupyter Notebook的单元格中开始编写代码比编写具有类和函数的脚本要容易得多。

Jupyter Notebook之所以成为数据科学中如此普遍的工具的另一个原因是,Jupyter Notebook使其易于浏览和绘制数据。当我们输入“ Shift + Enter”时,我们将立即看到代码的结果,这使我们很容易确定我们的代码是否有效。

但是,当我处理更多数据科学项目时,我意识到了Jupyter Notebook的一些后备功能:

  • 杂乱无章:随着我的代码变得更大,对我而言,跟踪自己的编写变得越来越困难。无论我使用了多少降价促销将笔记本分为不同的部分,断开的单元格都使我很难专注于代码的作用。
  • 难以进行实验:您 可能想用不同的数据处理方法进行测试,为机器学习算法选择不同的参数以查看准确性是否提高。但是,每次尝试新方法时,都需要重新运行整个笔记本。这很耗时,尤其是在处理过程或培训需要很长时间才能运行时。
  • 对于重现性而言并不理想:如果要使用结构略有不同的新数据,则很难在笔记本中识别错误源。
  • 难以调试:当您 的代码中出现错误时,很难知道错误的原因是代码还是数据更改。如果错误出在代码中,则代码的哪一部分导致了问题?
  • 对于生产而言并不理想: Jupyter Notebook在与其他工具配合使用时效果不佳。使用其他工具时,从Jupyter Notebook运行代码并不容易。

我知道必须有一种更好的方式来处理我的代码,所以我决定尝试一下脚本。这些是我在使用脚本时发现的好处:

有组织的

Jupyter Notebook中的单元格使得很难将代码组织成不同的部分。使用脚本,我们可以创建几个小函数,每个函数指定代码的功能,如下所示

更好的是,如果可以将这些函数归为同一类,例如处理数据的函数,我们可以将它们归为同一类!

每当我们要处理数据时,我们都知道该类中的函数Preprocess可用于此目的。

鼓励实验

当我们想尝试另一种预处理数据的方法时,我们可以通过注释掉这样的方式来添加或删除函数,而不必担心破坏代码!即使我们碰巧破坏了代码,我们也知道在哪里修复它。

我们还可以通过更改函数的输入来试验不同的参数。例如,如果我们想看看对Pandas系列重新采样的不同方法如何影响我的结果,我们可以从切换method_of_resample='sum’method_of_resample= 'average'。多么整洁!

重现性的理想选择

使用类和函数,我们可以使代码足够通用,以便能够与其他数据一起使用。

例如,如果我们想在新数据中删除不同的列,我们只需要更改columns_to_drop为要删除的列的列表,代码就可以平稳运行!

代码语言:javascript
复制
columns_to_drop = config.columns.to_drop

datetime_column = config.columns.datetime.sentiment

dropna_columns = config.columns.drop_na

processor = Preprocess(columns_to_drop, datetime_column, dropna_columns)

易于调试

使用函数,可以更轻松地测试该函数是否产生我们期望的输出。我们可以快速找出应该在代码中更改的位置以产生所需的输出。

代码语言:javascript
复制
def extract_date_hour_minute(string: str):
'''Extract data hour and minute from datetime string'''
try:
return string[:16]
except TypeError:
return np.nan

def test_extract_date_hour_minute():
'''Test whether the function extract date, hour, and minute '''

    string = '2020-07-30T23:25:31.036+03:00'
assert extract_date_hour_minute(string) == '2020-07-30T23:25'

或添加配置文件以控制变量的值。这样可以避免我们浪费时间跟踪代码中的特定变量以更改其值。

代码语言:javascript
复制
from preprocess import preprocess
from model import run_model
from predict import predict


def main(config):
    df = preprocess(config)

    df = run_model(config)

    df, df_scale, min_day, max_day, accuracy = predict(df, config)

我们还可以很容易地添加工具来跟踪实验。

那么如何从Jupyter Notebook切换到脚本?

如果您刚刚从Jupyter Notebook切换到脚本,那么用脚本编写代码可能并不直观,但是请相信我,您最终会习惯使用脚本。

一旦发生这种情况,相对于凌乱的Jupyter Notebook,您将开始认识到脚本的许多优点,并希望在脚本中编写大部分代码。

话虽如此,Jupyter Notebook仍可用于探索和可视化数据。您可以在脚本中创建类和函数,然后将其导入笔记本中,以使笔记本不那么混乱。但是请注意不要过度使用笔记本,尤其是当您要将代码投入生产时。

如果您对较大的变化不满意,请从小做起。

大变化始于小步。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机与AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用脚本可以帮助我实现Jupyter Notebook的缺点
  • 鼓励实验
  • 重现性的理想选择
  • 易于调试
  • 那么如何从Jupyter Notebook切换到脚本?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档