如何用 Google Colab 練 Python?
自動配置、有效求助、協作程式設計、版本控制。一站式解決 Python 新手練習中的痛點。

痛點
這個學期,我在北得克薩斯大學(University of North Texas)教 INFO 5731: Computational Methods for Information Systems 課程,主要內容包括: Python 基礎、自然語言處理,以及機器學習。

授課的物件是資訊科學、資料科學專業的碩士與博士研究生。跟在國內一樣,我依然使用翻轉教學(flipped instruction)方式。
過去的幾周,我們把“Python 基礎”部分學完了。
每週,我都會要求學生閱讀兩本教材上的指定章節,然後把所有的程式碼自己重複一遍。在此基礎上,對每一段程式碼,學生都要自己試著進行一些改動。出錯也沒有關係,嘗試解決。
因為絕大部分學生,都是 Python 初學者。因此他們都會遇到以下的實際問題。
一、不知道如何安裝和設定執行環境;
二、遇到問題會慌亂,不知如何有效尋找解決方法;
三、對於團隊作業,不知該如何有效協作;
四、不懂得如何進行版本控制,程式碼越改越亂。
這些問題,也構成了學生的痛點。
如果不能有效加以解決,學生會把每週寶貴的學習時間,浪費到許多瑣碎的無用功上。更可能的情況,是他們的信心會被打擊,導致喪失學習的 動力和興趣 。
因此,我為他們找到了一款合適的 Python 練習工具。這裡,我把這款工具也分享給你。
這款工具,就是 Google Colab 。我曾經在《 如何免費雲端執行Python深度學習框架? 》一文中為你介紹過它,在《 如何用 Python 和迴圈神經網路做中文文字分類? 》和《 如何用 Python 和迴圈神經網路預測嚴重交通擁堵? 》裡,我也曾用它給你做過程式碼的展示。
下面,我給你介紹一下,如何用 Google Colab 應對上述的4個痛點,為你的 Python 練習提供輔助。
環境
新手最常見的問題,就是好不容易累積了學習的興趣,上手不久便遇到報錯。
而 Python 新手遇到的許多錯誤,實際上都和環境的配置有關。
例如說,Anaconda 套件下載環節,你就不知道該選擇哪個版本。

好不容易安裝好了,因為路徑設定問題,連 Jupyter Notebook 都呼叫不出來。
終於能輸入程式碼了。結果一輸入就提示,你要呼叫的模組名稱,沒聽說過!

而這些,Google Colab 都幫你處理好了。
只需要開啟一個瀏覽器(推薦 Google Chrome 或者 Firefox),輸入:
https://colab.research.google.com
就可以看到以下頁面。

選擇新建 Python 3 筆記本。
然後,就能看到 完全配置好 的 Python 執行環境了。

對,就是這麼簡單。
你可別小瞧這個執行環境。
雖然你沒有執行任何安裝過程,但是它基本上涵蓋了你做資料科學分析,要用到的各種工具。
這些工具包括但不限於 Numpy, Scipy, Pandas 等,甚至連深度學習的框架,例如 Tensorflow, Keras 和 Pytorch,也是一應俱全。

Google Colab 的深度學習環境支援,可不只是軟體那麼簡單。Google 慷慨的提供了 GPU, 甚至是更專業化的 TPU, 供你 免費 使用。

預設狀態,這些雲端硬體是 不開啟 的。你需要在選單欄中選擇 runtime,然後選擇 Change runtime type。

就可以看到不同硬體支援的選項了。

有的書籍樣例程式碼,甚至是 Python 元件,都需要 Python 2 環境才能執行,這也沒關係。點選新建筆記本,你就能使用不同的 Python 版本了。

細心的你會發現,在上面“修改執行時設定”頁面裡,也可以隨時調整 Python 版本。
求助
作為新手,你遇到錯誤和問題,是完全正常的。
Python 具有強大的社群,可以給你提供很多幫助。

但如果你嘗試過,便可能有一種錯覺——這些 Python 高手很不友好。因為你貼了問題,卻沒人理你。
其實,這很可能是你問問題的方式不對。
想想看,你籠統地說一個報錯資訊,可能的原因或許有數十甚至上百種,誰能幫你一一排除?
這倒也罷了。可是你明明貼了一段程式碼,還給出了錯誤資訊的截圖啊。為什麼還是沒有人伸出援手?
因為這些資訊,可能依然不夠。
想想看,你本地安裝了什麼樣的套件?其中的各種模組,都分別是什麼版本?你執行當前程式碼有問題,那上下文是什麼?會不會是因為之前某個程式碼段落,影響了你當前段落的執行?你的作業系統,是否完全支援你正在使用的元件功能?……
這些可能性,無窮無盡。同樣,也沒有人這樣花時間幫你列舉。
但是有了 Google Colab ,你提問的效果卻可以大大提升。
因為,你可以用** 最簡單 的方法,讓潛在的回答者 復現**你的問題。
這就是,把你的筆記本 共享 出去。

如上圖,點選筆記本右上角的 Share 按鈕。

在出現的對話方塊裡,注意選擇許可權。選成 可以瀏覽 (view),就可以了。

然後,選擇“複製連結”,連結就到了你的剪下板裡面了。把它連同你的文字描述,直接貼到 Python 的論壇或者課程討論區裡。
別人只需要點選,就能檢視你的全部程式碼、報錯資訊。而且,還能 執行 你的筆記副本。
注意,雖然你倆可能用的是不同的作業系統、不同的瀏覽器,但因為都用了 Google Colab ,你們的 Python 環境是 完全一致 的。
等到對方解決了問題,他還可以把完整的筆記本再用連結方式分享給你。你的問題於是迎刃而解。
問問題,只是尋求幫助的一個方面。
在提問之前,你還是應該自己嘗試一下解決的。毫不願意思考,直接當 伸手黨 ,社群裡的人很難喜歡跟你打交道。
Google Colab 為你主動尋找問題答案,提供了工具支援。每當你遇到報錯的時候,你都會看到下方有個按鈕。

點選這個按鈕, Google Colab 就會用搜索引擎,在 Stackoverflow 這個 IT 問答站點上,幫你尋找相關報錯的已有答案。

一般來說,點選前幾條資訊,你就會有收穫。

例如這次,你就很幸運,因為答案明確說明,這是因為 Python 版本帶來的差異。
你只需要根據提示,進行程式碼的輕微調整,就能正常運行了。
協作
不知你有沒有嘗試過跟人協作編寫程式碼?
我的課上,是有小組作業的。要求學生2-3人一組,一起用 Python 解決問題。
有的人,是這樣協作的。
自己寫一段程式碼,用郵件傳給對方。
對方改完,發回來。
自己在上面修改新增,再發回去。
……
這樣顯然 效率很低 。
有沒有高效的方法?
當然有。依然利用我們剛才已經見到過的共享功能。

只是這一次,在選擇許可權的時候,給對方“可修改”許可權。

例如還是剛才的 print 命令沒有加括號的問題。只不過這次,對方除了能看到你的問題,還可以直接編輯。
你的協作者,新建了一個程式碼塊,並且輸入了正確的資訊。

在你這裡看起來,就是這個樣子的。

協作者的頭像,會顯示在對應的修改內容旁邊。這樣一目瞭然。
對方還可以在程式碼塊旁,選擇添加註釋。

例如輸入以下內容。

你可以同步在自己的筆記本上,看到對方的註釋。

這樣一來,團隊協作 Python 練習溝通的效率,自然就高了許多。
注意,為了安全起見,一定只能把該許可權,限定在你 信任 的協作者中。
如果是打算把你的成果展示出來,你可以使用 Google Colab 與 Github 的整合功能。

如上圖,選擇儲存副本到 Github 。

然後,選擇你希望儲存到的 Github 專案。
儲存完畢後,對應的 Github 頁面會自動開啟,供你預覽。

其中可以包含全部的文字、圖片、程式碼、輸出資訊。注意筆記本的頂部,有一個“在 Colab 開啟”的連結。
點選它,你就能迅速開啟 Google Colab 環境,並且直接執行這個 Github 上的筆記副本。

版本
當你不停地嘗試和改動程式碼的時候,很有可能會把問題改得更加糟糕。這時候,你恨不得有一個時光機,可以讓你回到錯誤少一點的時候。
這個時光機,Google Colab 是提供了的。

點選選單裡面的 Revision history 功能,你就能看到當前筆記本已儲存的全部歷史版本。

包括修改時間、誰改的、檔案大小等各種資訊,一應俱全。
想回到哪個版本,點一下“恢復”按鈕就可以了。
另外,你也可以把 Google Colab 筆記本,直接下載成為 ipynb 檔案,在本地儲存副本。

一定要注意選擇需要的儲存路徑,避免不知存到哪裡去了。

我一般讓學生交作業的時候,都需要同時提交 Google Colab 連結,以及一個 ipynb 檔案。
二者的內容,應該是一樣的。既然如此,為什麼還需要提交兩樣東西呢?
這個問題,作為思考題,留給你。請注意聯絡本節標題,加以分析。
有了 ipynb 檔案,你可以用本地的 Jupyter Notebook 開啟。但是如果你只是想檢視內容的話,這裡給你推薦一個更好的工具,叫做nteract 。它可以幫你直接開啟 ipynb 檔案,用於檢視。

這樣,你就沒必要每次都用 Jupyter Notebook 命令開啟後臺服務,然後再到瀏覽器中點開對應的 ipynb 了。
小結
還記得在《如何高效學 Python ?》一文中,我給你推薦過的經典教材《笨辦法學 Python》吧?
《笨辦法學 Python》指出了一條看似笨拙,卻非常有效的學習路徑。我上課的時候,也一直在跟學生們強調—— Python 這樣的實踐類技能,只能 練中學 (Learn by doing)。
本文給你推薦的 Google Colab ,可以幫你解決 Python 初學者練習實踐 Python 程式設計時,最常遇到的幾大痛點。包括:
- 自動配置
- 有效求助
- 協作程式設計
- 版本控制
這樣一來,你可以把寶貴的時間,聚焦在技能的掌握和應用;而不是久病成醫,成為“環境配置專家”了。
祝 Python 程式設計學習愉快!
延伸閱讀
你可能也會對以下話題感興趣。點選連結就可以檢視。
喜歡請點贊和打賞。還可以微信關注和置頂我的公眾號 “玉樹芝蘭”(nkwangshuyi) 。
如果你對 Python 與資料科學感興趣,不妨閱讀我的系列教程索引貼《 如何高效入門資料科學? 》,裡面還有更多的有趣問題及解法。