你知道Python中數(shù)據(jù)處理庫Pandas是如何誕生的嗎?
01
Pandas1.0最近推出了。但是你知道它是如何誕生的嗎?
這個故事可以從很多地方開始,但讓我們從1954年開始。1954年有兩件事對Pandas的誕生非常重要。
02
1954年3月1日,美國在比基尼環(huán)礁試驗了一枚高當(dāng)量熱核炸彈。氘化鋰(LiD)是燃料。天然鋰包括兩種不同的同位素——鋰6和鋰7。氘化鋰6被認(rèn)為是很好的氫彈燃料,而在假設(shè)氘化鋰7是完全惰性的情況下,其在反應(yīng)中被用作慢化物質(zhì)。事實證明,這個假設(shè)是極其錯誤的——本來應(yīng)該緩和反應(yīng)的物質(zhì)最終變成了燃料。導(dǎo)致本來應(yīng)該是600萬噸級的爆炸結(jié)果變成了1500萬噸級的爆炸。
這次試驗的后果在時間和空間上都是深遠(yuǎn)的。一艘日本漁船的船員遭受了嚴(yán)重的輻射中毒,馬紹爾群島的許多人遭受了放射性塵降物的長期傷害。它讓人們了解了放射性塵降物到底是什么,也讓人們了解了身處核爆炸之外并不安全——核爆炸會影響數(shù)百英里外的人們。也許最引人注目、也與我們的故事最相關(guān)的是1963年《有限禁止核試驗條約》(Limited Test Ban Treaty),該條約終止了在大氣層、水下和太空的核試驗。布拉沃城堡清楚地說明了這些實驗有多么危險,破壞有多么廣泛,而且基本上不可能保證不出現(xiàn)重大錯誤。
當(dāng)然,這意味著要對模擬核爆炸的計算機(jī)技術(shù)進(jìn)行重大投資,而不是過于依賴試驗。這項技術(shù)已經(jīng)處于起步階段,但模擬核武器的任務(wù)將推動科學(xué)計算直到今天。這種對計算機(jī)和軟件的追求正是硅谷的根本來源。
03
“我的大部分工作都是因為懶惰。我不喜歡寫程序,所以,當(dāng)我在IBM 701上編寫計算導(dǎo)彈軌跡的程序時,我開始編寫一個程序系統(tǒng),使編寫程序更容易。”-約翰·巴克斯
對于任何一個Pandas的用戶來說,這種思維過程應(yīng)該是非常熟悉的——它本質(zhì)上是Pandas、R、SQL以及其他任何試圖讓你專注于數(shù)學(xué)和數(shù)據(jù)操作的聲明性編程的框架的動力。Fortran(關(guān)于“公式轉(zhuǎn)換”的合成詞)是編寫科學(xué)程序的工具,與等價的Python代碼相比,它可能看起來冗長,但肯定比匯編更具表現(xiàn)力。你可以遵循這里的代碼,但不一定是一堆運算碼的情況。它還具有仍然在使用的最古老的編程語言的特點。它是在1950年開發(fā)的,但它的第一個項目是在1954年運行的。
Fortran不僅僅是科學(xué)計算的精神先驅(qū)。用于進(jìn)行矩陣操作的Fortran包,如BLAS和LAPACK,都在pandas的“引擎蓋下”。您計算機(jī)上的翻譯不一定是用Fortran編寫的(默認(rèn)是C語言)。但它是一個選項,C的來源,如果你真的需要性能,它通常是你想要的。
值得注意的是,BLAS、LAPACK和大部分Fortran科學(xué)生態(tài)系統(tǒng)的其他部分仍然是軍工復(fù)合體的產(chǎn)品?;蛘?,至少是那些可用的開源軟件。像能源部、DARPA和NSF(有國防授權(quán))這樣的組織提供資金和工作時間來保持這些軟件包的最新更新直到今天。這就是為什么它仍然被使用的部分原因。然而,F(xiàn)ortran語言只是我們故事的一半。pandas不僅僅是關(guān)于快速操作—它還與語法有關(guān)。
04
好了,F(xiàn)ortran是匯編的一個進(jìn)步,但它并不是NumPy或Pandas代碼的真正樣子。為此,我們需要具有良好的向量化語法的基于數(shù)組的語言。我要談?wù)摰氖茿PL,因為它是最不可思議的。我敢肯定韋斯·麥金尼說這是Pandas的靈感。

有一種說法是,有兩種編程語言,一種是“從計算機(jī)向上”開始的,另一種是“從數(shù)學(xué)向下”開始的。Fortran雖然相對友好,但它仍然會讓你考慮諸如預(yù)分配內(nèi)存之類的事情。APL來自一位名叫Kenneth E. Iverson的數(shù)學(xué)家,他提出了一種操作數(shù)組的符號。最終他們用Fortran編寫了一個實現(xiàn),它成為了一種真正的編程語言。
APL簡潔、富有表現(xiàn)力,使矩陣運算成為一等公民。當(dāng)然,你必須學(xué)會一堆奇怪的符號,需要一個定制的鍵盤,必須內(nèi)化包含“副詞”概念的語法。但是,如果您所做的只是操作數(shù)據(jù),那就沒有那么糟糕了。它也更接近數(shù)學(xué)符號,如果你有這方面的背景,這是很好的。