Python 裡面的閃電俠 — NumPy & Pandas

講到 Python 有一個很嚴重的問題:就是他的速度…為了貼近自然語言(也就是說你嘴巴講出來的話,跟你要寫的 code 差不多),所以他在底層運作上,先天上不可避免的問題就是比人家慢。其實慢也不是很嚴重的問題,因為現在硬體設備的大突破,雖然說是”慢”,但正常人是無法明顯的感覺出差異的(就算是工程師,為了讓自己的生活與工作愉快一點,很多人覺得就算多等那麼一下下也不是那麼嚴重的問題。)

但是以上的這些敘述,很抱歉,不適用於 Data Science 上,為什麼呢?因為現在數據量已經進入超乎想像的龐大。當你開始執行程式的那一刻,結果動輒好幾天才出來,最少可能也是好幾個小時,這個時候程式的效率便非常重要,因為你不會想要一整天都蝦耗在那邊,結果什麼都跑不出來,更悲慘的是結果最後不是自己想要的,於是只好悲慘再修改好code,按下執行後,又再重新再等…

於是,出現了兩個超級英雄拯救 Python,那就是 NumPy 跟 Pandas。

Numpy,雖然他是 Python 裡面的套件,但是他披著 Python 的皮,裡面的運作架構卻是使用 C 語言。而 Pandas 是利用 NumPy 的架構來表示或是紀錄更複雜的資料。哇,怎麼又扯出個”C語言”,你可能會開始懷該不會又要學新的東西了吧。NO! 這個就是 Python最爽的地方,其實你完全完全就可以不用管底下在幹嘛,你就可以利用這個套件,用Python 的語法,達成你要做的事情。不過為了讓大家更徹底的了解,我還是會跟大家講一下 Python 跟 C 語言的差別。下面的舉兩個例子來說明 Python 跟 C 語言運作上的差異(注意:這是舉例,不是完整的程式碼,所以不能拿來執行)

首先我先示範 C 語言中,你要跟電腦講說今天是多少年幾月幾號的時候的作法:

int year, month, day;
year = 2018;
moth = 4;
day = 21;

首先,你要跟要三個空間year, month, day,而且你要跟電腦說我要儲存的是整數喔(也就是 int 做的事情),接著你就可以利用後面的三行 code,把數字儲存進去那三個空間中。於是未來當你用到 year, month, day 時,就會等於使用你所儲存的數字。不過要注意的一點是:在 C 語言中,在你進行宣告後,他就固定了!他就固定了!他就固定了!所以如果你把 day=21; 改成 day=21.5; 的話,電腦執行時會出現錯誤,因為你一開始預定的是整數的空間,所以電腦會不知道你在幹嘛,最後就會出現 error。

接著看看 Python 的話,

year = 2018
month = 4
day = 21

嗯!?怎麼 int 不見了,是的你沒看錯,你不需要跟電腦說 year, month, day 的型態是什麼,你就可以直接用了,因為 Python 會直接幫你處理好。

再看下個例子,我們這次來算圓面積好了:

float r, pi, area;
r = 3;
pi = 3.14;
area = (r ^2)*pi;

嗯…怎麼 int 變成 float 了…因為在這邊pi是浮點數不是整數,所以你要你要改用 float 宣告是浮點數。而且還有一個更麻煩的事,如果你r是宣告成整數的話,電腦將會告訴你,它沒辦法做 (r ^2)*3.14 這樣子的運算,因為電腦只能整數和整數、浮點數和浮點數間運算…

再來看看 Python :

r = 3
pi = 3.14
area = (3^2)*pi

嗯!?這麼簡單?對,在 Python 中,你不需要做宣告型態,他會幫你做好做滿。

所以阿,兩個簡單的例子中,可以看出 Python 真的很方便,因為他會幫你管控變數的型態,但是你不用自己做,不代表不需要做!所以阿,讓 Python 幫你處理,你付出的代價就是變慢。

寫到這邊,我們要心懷感激寫出 NumPy 和 Pandas 套件的前輩們,因為有他們為了解決這樣的問題,所以在我們使用者可以繼續使用 Python 的語法,但是實際上,程式裡面的運作依然是使用 C 語言的架構,讓我們可以用得開心,但是程式速度卻不受影響。講了那麼多 Python 跟 C 語言的恩怨情仇,下次就會開始正式進入 NumPy 的教學囉!請大家不要忘記保持追蹤 TinyCorner 阿!!

Facebook Comments

發表迴響