Uploaded avatar of iHiD

Analytical April 來了!

@iHiD
3年多前
影片

嗨,大家好!我們經歷了 Functional February 和 Mechanical March。現在輪到 Analytical April 了,這個月我們會把焦點放在非常適合資料科學的程式語言上。

如同你在過去幾個月已經習慣的,在這支影片裡,Erik 和我會帶你快速了解這個月的主題,以及我們會探索哪些程式語言。

跟往常一樣,等等 Erik 會為我們介紹這些語言,不過我先從這個月的一些實用細節開始說起。

首先,是這個月的精選語言。這個月只有 3 種:Julia、Python 和 R。這 3 種語言各有相當不同的特色,而 Python 顯然是用途非常廣泛的語言,但我們會鼓勵你在這個月試著用資料科學的思維來使用它們。

要拿到 Analytical April 徽章,你需要在其中一種語言完成 5 個練習。我們等等就會探討它們之間的差異,但就 Exercism 來說,我們的 Python 軌道有很棒的課程大綱,所以我非常推薦你試試看。我們也希望能在這個月推出 Julia 的課程大綱,它大部分的工程都完成了,只差最後的潤飾。R 沒有課程大綱,但有很多有趣的練習可以讓你玩玩看。

我們準備了 5 個精選練習:

  • etl:你可以探索如何把資料重新塑造成不同的格式
  • largest-series-product:練習用有效率的方式在一串數字中尋找模式
  • saddle-points:探索如何處理多維陣列/矩陣
  • sum-of-multiples:練習對一串數字進行篩選與加總
  • word-count:把字串轉換成單字並計算數量

提醒一下,除了 Analytical April 徽章之外,還有一個為期一整年的 #12in23 徽章,只要你在這一年的任何時間解完各種精選練習就能拿到。所以你需要在今年找個時間,用 Python、R 或 Julia 解完那 5 個練習,才能拿到那個徽章!完整的練習清單,可以在 Analytical April 頁面上連結的論壇貼文裡找到。

最後,在我們深入探討這些語言之前,提醒一下,我們在三月推出了新的 Discord 伺服器。那裡有很多有趣的活動,記得去看看喔。連結就在下方的說明欄!

好,我們來探索這些語言吧。先快速瀏覽每一種語言,接著再深入它們的功能和使用情境。我們從 Python 開始吧。

Python

  • 由 Guido van Rossum 在 1980 年代晚期構思並開發,作為 ABC 程式語言的後繼者。1991 年首次發布。
  • 在荷蘭的 Centrum Wiskunde & Informatica(CWI)開發,那是一間由政府資助的研究實驗室(這裡以是 Edsger Dijkstra 完成大部分工作的地方而聞名)。
  • Guido 當年用 C 和 shell 指令碼寫程式,但兩者都有缺點。Python 的目標是擷取兩者的優點,同時避開這些缺點。
  • 由 Python Software Foundation 管理,語言的變更透過 Python 增強提案(PEP)進行(類似於 RFC)。

R

  • 由 Ross Ihaka 和 Robert Gentleman 在奧克蘭大學開發。R 可以視為 S 語言的一種不同實作(差異相對不大),而 S 後來由 S-plus 接續,那是 S 的商業(非開放)實作。雖然 R 與 S 共用大部分語法,但它的語意是受到 Scheme 啟發。
  • 目標:打造一種更適合統計運算與繪圖,且比電腦科學家設計的同類軟體更容易使用的語言。

Julia

  • 由 Jeff Bezanson、Stefan Karpinski、Viral B. Shah 和 Alan Edelman 以開放的方式開發,目前有超過 1000 位貢獻者。
  • 目標:打造一種免費的高階語言,擁有 C 的速度、Ruby 的動態性、LISP 的超程式設計、Python 的通用能力、R 的統計支援、MatLab 的線性代數支援,以及 Perl 的字串處理威力,同時還能支援大規模平行執行。
  • 非常適合科學運算,但同時也是通用語言(可用 Genie 框架開發網頁應用程式)。

就像許多語言一樣,這 3 種語言都是出於不滿足而誕生的 :)

好,太棒了。那麼就使用情境來說,什麼時候你會用其中一種語言,而不是其他兩種?

Python

  • 真正的通用語言(網站、指令碼、科學運算)
  • 可以用在許多不同的用途:AI(TensorFlow)、科學運算(NumPy)指令碼、網站(Django)、嵌入式系統(micro python)、與硬體介接(例如 Raspberry Pi)、遊戲(EVE online),Python 甚至還上過火星
  • 非常適合用來學寫程式:資源豐富,社群龐大。有很多關於如何寫出 Pythonic 程式碼的指引(也就是如何寫出道地的 Python 程式碼,例如「顯式勝於隱式」和「可讀性很重要」)。許多作業系統預設就安裝了它
  • 目前最常被使用的語言之一,因此有大量的文件、函式庫,以及龐大的社群

R

  • R 被用在各種不同的地方,包括研究人員用它分析實驗資料、大學用它教統計與資料分析、金融業因為統計至關重要而使用(例如保險業)、零售業也一樣(Amazon 用 R 做資料分析)、製造業(John Deere 用它估算要生產多少備用零件)、美國國家氣象局用它協助預測天氣與災害、資料新聞(分析真實世界的資料並理解它,通常會搭配視覺化),在醫療照護領域也大量使用,例如根據臨床前試驗判斷藥物的安全性

Julia:

  • 非常適合科學運算、資料探勘、機器學習、線性代數和分散式運算。它的記法會讓人覺得與數學記法很接近,因此從方程式轉成程式碼相對容易
  • 分散式運算:任務(=協程)與通道讓程式碼能以平行方式執行並彼此溝通,透過訊息傳遞支援多行程(非常適合高效能運算)
  • 用於 Celeste 專案(用超級電腦執行 Julia 程式碼,分析 178 TB 的天文資料),這也讓 Julia 躋身 petaflop 俱樂部,當時俱樂部裡只有 C、C++ 和 Fortran,而 Julia 是第一種動態語言,每秒可進行千兆次浮點運算(1 後面 15 個零)。Clima(氣候模擬聯盟)集結了來自 Caltech、MIT 和 NASA 噴射推進實驗室的人,共同開發氣候預測模型。此外還有 CERN 和 ASML。

而從寫程式的角度來看,它們有什麼不同?它們是函式式、物件導向,還是其他類型?

Python:

  • 動態且強型別
  • 多典範:指令式、函式式,但實際上是一門物件導向語言(萬物皆物件)
  • 預設的翻譯員 CPython 會先編譯成位元組碼,接著在位元組虛擬機器中執行。PyPy 是 CPython 的替代品,它會即時編譯成機器碼

R:

  • 動態且強型別
  • 多典範,以函式式為核心,但也支援程序式或物件導向的風格

Julia:

  • 動態且強型別,以即時編譯方式編譯
  • 多典範:指令式、物件導向(透過多重分派實現重載)、函式式(高階函式、部分應用、管線運算子)
  • 程式碼在執行階段以即時編譯的方式提前編譯

繼續從寫程式的角度來看,這些語言有沒有什麼特別突出的功能?

Python:

  • 語法討喜:對空白敏感讓作用域一目了然。程式碼通常很好讀,例如人類可讀的布林條件(and/or)
  • 表達力強:用相當少的程式碼就能做很多事(陣列推導式、產生器、裝飾器)
  • 有大量函式庫可用於各種不同用途
  • 如前所述,它是真正的通用語言,可以用在許多不同的情境

Julia

  • 多重分派。根據所有引數的型別來決定要呼叫哪個函式(類似函式重載)
  • 動態但效能極佳。Julia 的效能可與 Fortran 匹敵,並逼近 C。「正常」的程式碼通常就很有效能(不需要瘋狂的改造,反而鼓勵把函式寫得小一點)。也有支援在 GPU 上執行程式碼的函式庫
  • 分散式運算:任務(=協程)與通道讓程式碼能以平行方式執行並彼此溝通,透過訊息傳遞支援多行程(非常適合高效能運算)
  • 非常適合科學運算、資料探勘、機器學習、線性代數和分散式運算。它的記法會讓人覺得與數學記法很接近,因此從方程式轉成程式碼相對容易

R:

  • 彈性的資料型態:向量是核心型別,連純量都是向量。向量可以帶有相關的中繼資料(例如元素的名稱)。陣列是異質的(可以包含不同型別的元素)。有特殊的 dataframe 型別,用來收集向量(長度都相同)。
  • 向量化運算讓向量的更新既簡潔、有效率又好讀
  • R 是一套整合的軟體工具,用於資料操作、計算與圖形顯示。透過 RStudio 可以輕鬆探索、視覺化與操作資料。非常適合資料探勘
  • 社群很棒,友善又多元。R for Data Science Online Learning Community 是一個由各種程度的 R 學習者組成的社群,大家互相幫忙精進實力。還有一個開放的 Slack 群組,成員可以在裡面保持聯絡,並互相幫忙解決問題。

如果有人不確定四月該試哪一種,你會建議他們怎麼做決定?

就跟 IT 界的一切一樣:看情況!在這個情況下,我會說這主要取決於你的目標和個人經驗。

如果你寫程式的經驗還不多、對 AI 或機器學習有興趣,或者想學一門可以用在很多不同地方的語言,我大概會建議你從 Python 開始:

  • Python 可用的資源多到驚人,其中包含許多免費的線上課程
  • Python 在 AI 和機器學習領域被廣泛使用
  • Python 可以用在非常多不同的用途
  • Python 軌道已啟用學習模式,可以幫助你用有趣的方式學會這門語言的核心概念

如果你對統計工作有興趣、想探索和視覺化資料,或者對不一樣的資料處理方式感到好奇,R 語言是很棒的選擇:

  • R 的資料型態以資料集合(向量/陣列)為基礎,運算可以輕鬆套用到整個集合上(不需要寫迴圈)
  • RStudio 這套整合開發環境非常適合探索和視覺化資料
  • R 對統計分析有絕佳的支援
  • R 可以輕鬆把資料畫成圖表

如果你對科學運算有興趣、想讓程式碼同時執行、非常在意效能,或是想學一門現代、優雅,而且能提供與大多數其他語言不同東西的語言,我會推薦 Julia:

  • 多重分派對很多人來說是全新的概念,而且威力非常強大
  • Julia 非常適合科學運算
  • Julia 的型別系統既彈性又有表達力
  • Julia 的效能極佳
  • Julia 非常適合並行執行

當然,如果你有時間,我會建議你把 3 種都試試看!除非親自試過,否則你永遠不會知道自己會喜歡哪一種語言。

2023年04月01日 · 覺得有幫助嗎?