【程式】我需要學Python資料科學嗎?

近年來自學coding蔚為風潮,很常被朋友問到:「我需要學Python資料科學嗎?」。具體地說,被提出的課程通常包含了資料處理、視覺化,有的還包含了諸如網路爬蟲或是API串接[1]。

詢問者的動機通常是想充實專業,應用於學術或是工作領域。另一方面,也因為鋪天蓋地的媒體新聞與課程廣告,感到焦慮。

先講結論:個人認為,對於非資訊背景的學生,速成課程的學習效果相當有限;而大部分來詢問的人,未必真的需要;最後,儘管Python是個很棒的工具,但「會寫程式/Python」這件事,被包裝成了一個太過美好的想像。

而我的習慣是這樣的:如果一個大哉問被問了許多次;而又算是我有經驗的領域;我就會把它寫成文章。 所以我們就開始吧。

Python資料科學是什麼?

首先,請見附圖[2]。在這個結構裡,資料科學——或是一場有意義的數據專案(諸如行銷、選舉、乃至最近很常見的肺炎數據呈現),個人認為需要三個領域的完備:

  • 專項領域知識
  • 數學與統計學
  • 電腦應用 <= Python在這裡

Python Data Science

請特別注意前兩項的存在!首先,Python有許多套件,可以協助我們處理數據,實作出「專項領域知識」+「數學與統計學」的交集——然而在這個場景裡,Python本身並無法自外於兩者而產生意義。其次,Python的操作並不屬於太高深的計算機科學[3],你也不會因為只熟悉Python(或任何一種程式語言)而獲得一位(認真學習多年的)資訊本科生的同等能力;或是可以因此去Google開發無人車。比較好的比喻是:你可以把Python想像成威力更強大但也更不容易操作的Excel:它們都有很棒的資料處理能力,但要從資料中提取出價值,還是要倚賴領域本身的理論基礎才行。

再舉個幾個例子吧:電鍋很好用,但電鍋不會讓你成為大廚;一組完備的工具機,也不會讓你成為一個優秀的水電工;Python可以幫你處理股票資料,但不保證你能做出有意義的分析甚至盈利——而用Excel就做得風生水起的投資戶大有人在。

這段用詞比較負面,但我想透過這樣的措辭,來平衡那些課程廣告中過分美好的(他們也知道不是事實但仍然留下的)暗示。

所以⋯⋯我需要學Python資料科學嗎?

來詢問我的大多是商管學院出身的工作者。坦白說,我覺得最泛用的答案是「NO」,以及接著的「unless……」

僅管Python很棒,但根據個人經驗,對於非資訊本科生而言,一場成功的入門學習通常必須滿足以下(任一)條件:

  • 你是一個專業人士,你已經相當熟悉Excel或其他試算表軟體,且已經遭遇到Excel無法滿足的使用情境。
  • 你是一個專業人士,你現在的工作團隊已經在使用Python(或其他資料庫語言)。在有實務用例與演練的情況下,學習效率會有十倍百倍的提升。
  • 你是一個高中生或大學生,你擁有充足的學習時間,也正在處於廣泛探索知識的階段。在這個情境下,程式語言會是一個很棒的通識主題——同樣的道理我也會推薦你學習經濟學、社會學、數學、法律⋯⋯而一但開始學programming,別忘了務必多寫code以及實作對你有意義的專案,唯有如此才能真正內化這門技藝。
  • 你是一個研究生,你想要在研究領域裡實作量化資料分析,並將過程與方法有系統地與其他研究者分享。
  • 如果以上皆非;但你有充足的時間與意願學習這項技術;也有想要實作的應用(例如股票分析)。
  • 再次以上皆非;但你想要在履歷表放上這項專業;且你是個善於包裝的人;同時你相信你現在或未來的雇主崇拜/敬畏會寫code的人(即便沒有實務上的價值依然如此?)

Why?

對於學習Python說NO,這樣的建議其實是相當違反潮流的。我想原因如下:

  • 我沒有要賣你課程(超級100%正解)。
  • 儘管Python已經是相當高階的(面向人類而非機器的)程式語言,但對於一般沒有資訊背景的人而言,仍然是易學卻難通。在大部分強調速成的網路課程裡,為了提升學生的購買意願以及成就感,往往快速進入資料處理與視覺化的部分,而略過了基本的安裝、除錯、command line操作、版本控制、程式語言的基本概念;以及Python的資料結構、基本語法,與套件管理。這樣的課程雖然速成,但學生並不會獲得解決問題、有效率地寫code,以及舉一反三的能力。常見的結局是:學生只能拿著教材提供的代碼修修補補,但不具備真正實作專案的能力。如果又沒有實務上的用例,這樣零碎的知識很快就被會遺忘。
  • 如果你是一個已累積一定專業的工作者,我假定你的時間是寶貴的,且你的投入是期待回饋的。因此,除非已有明確的需求,散亂地學習的投資報酬率並不高。另外,不深入地學習也無法讓Python或資料分析成為你的第二專業——那些速成課程的內容對於資訊本科生而言,往往只是翻翻文件就(應該要)做得出來的東西。但無可取代的永遠是你的專項領域知識,以及對於數學及統計學的掌握。而這都是一般Python課程無法給你的。
  • 承上,Excel有什麼不足?如果你已經親身遭遇並能回答出來,那我相信你會獲得遠超過平均的學習成果。
  • 更不用說「Python+AI+大數據+爬蟲」的大雜燴課程了。這些課程就像健身房會籍一樣,絕大部分的人付費後並沒有妥善使用,而只是被販售恐懼以及購買美好的想像而已。並不是說課程本身有什麼過不去的惡點,但不論是投入任何專業領域,請問問自己:你真的準備好放下其他事、充足的補給、十足的熱情,以及不怕卡關的韌性了嗎?
  • 當然,如果你覺得自己只是想探索,也不介意花一點時間,那就出發吧。

怎麼學?

這個段落偏向主觀,有很多有經驗者見解也和我不同。如果你心意已決,請斟酌自已的個性與過去的學習經驗,作為參考即可。

首先,在「時間寶貴」與「實作優先」的兩項前提下,我推薦線上課程勝於實體課程。另外,個人是獨處與根性的信徒,如果你總是相信「有實體的活動或同學比較不會怠惰」,那我(偏狹地)猜測你可能不適合寫程式(笑)。

其次,如果語言與經濟能力許可,我建議選購英文的付費課程。長遠來說,習慣閱讀英文文件以及論壇,能達到最好的學習效果;另外,付費課程往往有更好的架構,可以避免初學者無法有效過濾學習素材的問題。個人用過的線上服務包含teamtreehouse.com與datacamp,都稱不上完美,但也絕對不至於帶來關鍵性的失敗。

另外,許多課程會提供網路介面與沙盒讓你寫code。儘管這都是不錯的初學工具,但你應該要很快地離開這些介面,快速掌握自己本機上的開發環境才行——如果你要寫實戰的code,總不可能寫在教學網站的編輯器裡對吧?

最後,別忘了Python是一個泛功能(general purpose)的程式語言。資料分析套件只是它眾多功能其中的一項而已。儘管是一個很棒的入門點,但個人建議你必須先懂Python,然後才能好好操作這些套件並讀懂文件——這包含了Python的基本語法、資料結構、函式應用、物件導向編程、套件管理等。另外,你可能也需要花時間熟悉command line以及版本控制等進階的電腦應用。

結語

對於非資訊背景者而言,想要有效學習Python資料分析,最好已經具備具體的需求,以及投入充足的時間(個人體感估計是:平均每週十小時,持續半年),才能累積出明顯的成效——別忘了,這意味著排擠其他生活中的事務,包含已有的專業、人際關係、休息與娛樂等⋯⋯

總而言之。寫程式對某種類型的人類會是很快樂的事。商人自有話術,商品未必邪惡,但coding絕非每個人都必須具備的技術。萬事皆有成本;而玩票近似於不玩——剩下的,就請自行斟酌了。


註解

[1] 嚴謹地說,這樣的課程其實是以應用為主的。稱之為科學太沈重了。

[2] 改編自:Jake VanderPlas著|2017|Python Data Science Handbook|第一章|O’REILLY發行

[3] 有一派主張「計算機工程」更精準於「計算機科學」。本文不討論此議題且並列兩者。

Leave a Reply