1. 程式人生 > >(資料科學學習手札81)conda+jupyter玩轉資料科學環境搭建

(資料科學學習手札81)conda+jupyter玩轉資料科學環境搭建

> 本文示例yaml檔案已上傳至我的`Github`倉庫[https://github.com/CNFeffery/DataScienceStudyNotes](https://github.com/CNFeffery/DataScienceStudyNotes) # 1 簡介   我們在使用`Python`進行資料分析時,很多時候都在解決環境搭建的問題,不同版本、依賴包等問題經常給資料科學工作流的搭建和運轉帶來各種各樣令人頭疼的問題,本文就將基於筆者自己摸索出的經驗,以`geopandas`環境的搭建為例,教你使用`conda`+`jupyter`輕鬆搞定環境的搭建、管理與拓展。
圖1
# 2 虛擬環境的搭建與使用 ## 2.1 使用conda建立虛擬環境   以`Windows`作業系統為例,因為全程主要使用命令列,所以其他系統方法類似,有少許語句有差異的地方遇到問題時可以自行查詢解決。首先我們要解決的是環境的建立,第一步需要安裝`conda`服務,這裡我們有`Anaconda`和`miniconda`兩種方式,本文選擇`miniconda`體積小巧,不會像`Anaconda`那樣自帶數量眾多的科學計算相關包而顯得臃腫。   有條件上外網的讀者朋友可以在官網( https://docs.conda.io/en/latest/miniconda.html )下載與你的作業系統對應的安裝包,也可以在**清華大學映象站**-**獲取下載連結**-**應用軟體**-**Conda**( https://mirrors.tuna.tsinghua.edu.cn/ )中下載對應的最新的安裝包:
圖2
  本文選擇的是從官網下載的最新版本`4.8.2`,因為`miniconda`自帶`Python`,之後所有新環境的建立我們都可以通過`conda`來實施,所以建議你在安裝之前系統中不要保有其他`Python`環境。下載完成之後直接開啟安裝,一路可以按照預設的選項繼續,到圖3顯示的步驟時為了方便之後的使用建議都勾選上:
圖3
  完成安裝後我們進入控制檯輸入`conda --version`檢查是否成功安裝: ``` C:\Users\hp>conda --version conda 4.8.2 ```   輸入`conda env list`檢視當前存在的所有環境: ``` C:\Users\hp>
conda env list # conda environments: # base * C:\Conda ```   可以看到我們當前只有1個環境*base*,即`miniconda`自帶的`Python`,因為圖3中我們勾選了*Register Miniconda3 as the system Python 3.7*,所以在控制檯中直接輸入`python`可以得到下列結果: ``` C:\Users\hp>python Python 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Warning: This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.io/activation Type "help", "copyright", "credits" or "license" for more information. >
>> quit() # 退出 C:\Users\hp> ```   控制檯輸入`conda list`可以看到當前僅有的*base*環境中僅有下列包: ``` C:\Users\hp>conda list # packages in environment at C:\Conda: # # Name Version Build Channel asn1crypto 1.3.0 py37_0 defaults ca-certificates 2020.1.1 0 defaults certifi 2019.11.28 py37_0 defaults cffi 1.14.0 py37h7a1dbc1_0 defaults chardet 3.0.4 py37_1003 defaults conda 4.8.2 py37_0 defaults conda-package-handling 1.6.0 py37h62dcd97_0 defaults console_shortcut 0.1.1 4 defaults cryptography 2.8 py37h7a1dbc1_0 defaults idna 2.8 py37_0 defaults menuinst 1.4.16 py37he774522_0 defaults openssl 1.1.1d he774522_4 defaults pip 20.0.2 py37_1 defaults powershell_shortcut 0.0.1 3 defaults pycosat 0.6.3 py37he774522_0 defaults pycparser 2.19 py37_0 defaults pyopenssl 19.1.0 py37_0 defaults pysocks 1.7.1 py37_0 defaults python 3.7.6 h60c2a47_2 defaults pywin32 227 py37he774522_1 defaults requests 2.22.0 py37_1 defaults ruamel_yaml 0.15.87 py37he774522_0 defaults setuptools 45.2.0 py37_0 defaults six 1.14.0 py37_0 defaults sqlite 3.31.1 he774522_0 defaults tqdm 4.42.1 py_0 defaults urllib3 1.25.8 py37_0 defaults vc 14.1 h0510ff6_4 defaults vs2015_runtime 14.16.27012 hf0eaf9b_1 defaults wheel 0.34.2 py37_0 defaults win_inet_pton 1.1.0 py37_0 defaults wincertstore 0.2 py37_0 defaults yaml 0.1.7 hc54c509_2 defaults ```   接下來我們開始來搭建本文用於舉例說明的`geopandas`環境,使用`conda create -n 環境名稱 python=版本`來建立新的環境,譬如這裡我們建立名為`python_spatial`的虛擬環境,`Python`版本選擇`3.7`: ``` C:\Users\hp>conda create -n python_spatial python=3.7 ```   遇到`Proceed ([y]/n)?`輸入y繼續,等相關資源下載並安裝配置完成後,再次檢視當前存在的所有環境: ``` C:\Users\hp>conda env list # conda environments: # base * C:\Conda python_spatial C:\Conda\envs\python_spatial ```   可以看到與之前相比多了我們剛剛建立好的`python_spatial`環境,使用`conda activate 環境名稱`來啟用指定的環境: ``` C:\Users\hp>conda activate python_spatial (python_spatial) C:\Users\hp> ```   可以發現這時命令列開頭多了`(python_spatial)`,這代表我們已經進入啟用的`python_spatial`環境中,接著我們就可以使用`conda`命令在當前環境中安裝`geopandas`,按照官網的推薦方式從*conda-forge*對應的`channel`進行安裝,執行`conda install --channel conda-forge geopandas`,遇到需要選擇的地方一樣地輸入y,這裡依賴包較多,需要等待較長時間,直到最後`done`出現表示安裝成功,在控制檯中直接進入`python`,檢查`geopandas`是否正確安裝: ``` (python_spatial) C:\Users\hp>python Python 3.7.7 (default, Mar 23 2020, 23:19:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import geopandas as gpd >>> ```   至此,我們已經完成了`geopandas`基礎環境的搭建,接下來我們來配置使用`jupyter`。 ## 2.2 配置jupyter lab   類似`conda`,`jupyter`也分為`jupyter notebook`和`jupyter lab`,兩者核心功能都差不多,但`jupyter lab`擁有更多的拓展功能,並且介面和操作方式也更加炫酷方便,所以本文選擇`jupyter lab`,在上一節中建立好的`python_spatial`環境下使用`conda install jupyterlab`安裝基礎部分,安裝結束之後,在`python_spatial`環境下可以通過執行`jupyter lab`來開啟它,在此之前需要先為`jupyter lab`配置虛擬環境,否則只能識別到預設的`base`環境。 - **安裝ipykernel** 退出虛擬環境後執行`conda install ipykernel`。 - **為虛擬環境安裝ipykernel** 執行`conda install -n python_spatial ipykernel`。 - **啟用虛擬環境&將虛擬環境寫入jupyter的kernel中** ``` C:\Users\hp>conda activate python_spatial (python_spatial) C:\Users\hp>python -m ipykernel install --user --name python_spatial --display-name "spatial" Installed kernelspec python_spatial in C:\Users\hp\AppData\Roaming\jupyter\kernels\python_spatial (python_spatial) C:\Users\hp> ```   這時我們在`jupyter lab`中已經可以切換到`python_spatial`環境了,接下來為了使用`jupyter lab`的外掛拓展,需要安裝`nodejs`,我們在`python_spatial`下執行`conda install nodejs`即可,完成安裝之後根據自己對外掛功能的需要可以分別安裝不同的外掛,下面舉幾個常用的例子: - **html互動部件外掛** 為了在`jupyter lab`中渲染一些html部件,譬如`tqdm`中的互動式進度條,在虛擬環境下執行下列命令: ``` pip install ipywidgets jupyter labextension install @jupyter-widgets/jupyterlab-manager ```   完成後執行`jupyter lab`,在開啟的操作介面中*notebook*下點選`python_spatial`建立新的notebook,執行如下命令(提前安裝好`tqdm`),可以看到出現了**互動式**的進度條:
圖4
- **目錄外掛** 在`ipynb`檔案中可以用`markdown`編寫各級別標題,在使用下列外掛自動生成目錄: ``` jupyter labextension install @jupyterlab/toc ```
圖5
- **matplotlib互動式繪圖** 使用`matplotlib`互動式繪圖模式: ``` pip install ipympl jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib ```   安裝完成後就可以使用`%matplotlib widget`開啟互動式繪圖模式(請提前安裝好`geopandas`繪圖依賴包`descartes`):
圖6
你也可以在側邊欄中發現更多的實用外掛:
圖7
## 2.3 虛擬環境的備份和恢復   `conda`提供了將虛擬環境匯出為`yaml`檔案的功能,使得我們可以保留好不容易建立好的虛擬環境中的配置資訊,格式如`conda env export > 匯出路徑\檔名.yml`,譬如我們匯出前面建立好的`python_spatial`到所需路徑下: ``` (python_spatial) C:\Users\hp>conda env export > C:\Users\hp\Desktop\python_spatial.yml (python_spatial) C:\Users\hp> ```   之後你可以在安裝好`conda`服務的其他機器上按照`conda env create -n 新環境名稱 -f=路徑\檔名.yml`,譬如我們就在本機上用已經匯出的`python_spatial.yml`複製為新的虛擬環境,耐心等待之後`conda`會自動完成前面所有我們手動實現的步驟: ``` conda create -n new_python_spatial -f=C:\Users\hp\Desktop\python_spatial.yml ```   之後只需要像前文中一樣執行`python -m ipykernel install --user --name new_python_spatial --display-name "new spatial"`從而為`jupyter lab`新增新的虛擬環境的*kernel*資訊,在`new_python_spatial`環境下啟動`jupyter lab`,這是我們可使用的環境變成了3個:
圖8
## 2.4 虛擬環境的移除   使用`conda remove -n 環境名稱 --all `來移除已經建立的環境,譬如我們使用`conda remove -n new_python_spatial -all`將`new_python_spatial`移除之後,再次檢視所有環境: ``` C:\Users\hp>conda env list # conda environments: # base * C:\Conda python_spatial C:\Conda\envs\python_spatial ```   但這時會存在一個惱人的地方,我們這裡只是移除了虛擬環境,但前面註冊到`jupyter lab`中的*kernel*還會顯示,但實際上是沒有對應環境存在的,所以強行選擇已經移除的環境對應的*kernel*會報錯:
圖9
  控制檯中使用`jupyter kernelspec list`檢視資訊: ``` C:\Users\hp>jupyter kernelspec list Available kernels: new_python_spatial C:\Users\hp\AppData\Roaming\jupyter\kernels\new_python_spatial python_spatial C:\Users\hp\AppData\Roaming\jupyter\kernels\python_spatial python3 C:\Conda\share\jupyter\kernels\python3 ```   接著使用`jupyter kernelspec remove kernel名稱`對其進行移除即可: ``` C:\Users\hp>jupyter kernelspec remove new_python_spatial Kernel specs to remove: new_python_spatial C:\Users\hp\AppData\Roaming\jupyter\kernels\new_python_spatial Remove 1 kernel specs [y/N]: y [RemoveKernelSpec] Removed C:\Users\hp\AppData\Roaming\jupyter\kernels\new_python_spatial ```   之後在啟動`jupyter lab`就會發現殘餘的*kernel*跟著消失了。   以上就是本文的全部內容,對應的`yaml`檔案已上傳至文章開頭的`Github`倉庫中,你可以直接基於它建立對應本文`python_spatial`的虛擬