如何讓 Jupyter Notebook 自動(dòng)導(dǎo)入代碼?
大家好,我是早起。
作為使用 Python 工作的數(shù)據(jù)科學(xué)家。每天我們都會(huì)啟動(dòng)多個(gè)新的Jupyter筆記本,并且在會(huì)用到多個(gè)不同的庫(kù),例如pandas、matplotlib等。
但是,在開始實(shí)際工作之前,我們總是需要為每一個(gè) Notebook 寫一堆的導(dǎo)入代碼,雖然這不困難,但是卻很繁瑣,有時(shí)還需要查找對(duì)應(yīng)的導(dǎo)入語句例如:
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn import feature_selection
怎樣才能在啟動(dòng)Jupyter 筆記本時(shí)自動(dòng)加載這些代碼,讓我們只專注于使用這些庫(kù)?本文介紹兩種辦法。
方法一 : 修改配置文件
一個(gè)常見的方法就是通過修改Jupyter的配置文件來實(shí)現(xiàn),這也是我在??之前文章中介紹過的方法??。
以macOS為例,你可以進(jìn)入~/.ipython/profile_default文件夾(Windows下也可以在安裝目錄中找到對(duì)應(yīng)的文件夾),如果找不到該目錄需在命令行執(zhí)行ipython profile create生成配置文件:
如上圖所示,在該文件夾下新建一個(gè)名為startup的文件夾(如果有則不用新建),之后進(jìn)入startup文件夾新建一個(gè)Python腳本start.py,現(xiàn)在你可以在start.py中盡情的添加你每次啟動(dòng)jupyter notebook后都需要手動(dòng)敲入的那段代碼,之后保存即可:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, tree, linear_model, neighbors, naive_bayes, ensemble, discriminant_analysis, gaussian_process
from xgboost import XGBClassifier
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn import feature_selection
from sklearn import model_selection
.
現(xiàn)在重啟Jupyter Notebook后就可以直接使用pandas、numpy等我們配置好的庫(kù)!
但這個(gè)方法也有一個(gè)弊端,就是由于文件缺少相關(guān)導(dǎo)入代碼,因此可能打包發(fā)給別人用時(shí)會(huì)無法執(zhí)行,我們也不可能再次檢查所用的代碼然后手動(dòng)導(dǎo)入一遍,所以只能在自己修改了配置文件的設(shè)備上用用。
方法二 : 使用 pyforest
這是我最近新發(fā)現(xiàn)的一個(gè)方法,由國(guó)外大神開發(fā)的一個(gè)插件,相比較修改配置文件,更適合小白操作。
我們只需要在終端(命令行)執(zhí)行以下代碼:
pip install --upgrade pyforest
python -m pyforest install_extensions
之后重啟Jupyter Notebook后便可以實(shí)現(xiàn)自動(dòng)導(dǎo)入相關(guān)庫(kù)。
可以看到,這個(gè)方法和方法一的差別在于,他不是默認(rèn)導(dǎo)入全部的依賴庫(kù)(避免了過多的內(nèi)存占用),而是在你使用到這個(gè)庫(kù)時(shí),自動(dòng)在Notebook頭部添加對(duì)應(yīng)的導(dǎo)入代碼,是不是很酷!
以pandas為例,當(dāng)我們使用到pd.xxx便會(huì)在頭部添加import pandas as pd,而在使用它之前,變量pd只是pyforest占位符。
但使用別人配置好的缺點(diǎn)就是自己想額外添加一些第三方庫(kù)會(huì)比較困難,好在開發(fā)者已經(jīng)預(yù)設(shè)了上百個(gè)常用庫(kù),從數(shù)據(jù)分析到機(jī)器學(xué)習(xí)、深度學(xué)習(xí)都有,基本上不用額外設(shè)置,感興趣的話可以嘗試一下~