12月的第一天,天冷了,不更新一點啥的總覺得渾身有點難受。
前段時間本來寫了我好幾天的「完美代碼」卻因為32G內存不足而中道崩殂了。無奈只有尋找其他辦法了,於是就花了好些天一直在研究大數據下怎麼使用out-of-memory和parallelization方面的技術。結果翻遍了stackoverflow也沒找到合適的解決方法,都有點逼我差點試圖用C來重新編寫部分代碼了。不過最後發郵件求助在芝加哥的dask的開發團隊,得到一些幫助後花了兩三天時間寫了一大堆函數式和垃圾回收方面代碼,總算是差不多把這個問題解決了。內存和CPU被蜜汁優化了哈哈哈。。。
話說回來,這近些日子,隨著機器學習的熱潮,python也算是程序界的蒂花之秀了,幾乎到處都能看到它的聲影。算下來,我也有「幾乎4年」的python開發時間了,期間還使用python來參加全國研究生數學建模比賽並連續兩年拿到了國二。都說python入門簡單,網上也有很多學習資源。但是大多數都比較亂,沒有一個明確的順序和方向。今日我就推薦一些如何從零開始用python進行科學計算的書籍吧。
第0本:《Python學習手冊》
不得不說,歐瑞利公司出版的程序設計書籍真心不錯,詼諧幽默,很容易讓讀者接受。我是在大四期間開始自學python的,第一本書就是它。這本書雖然有七八百頁,但是作者加入了很多讓讀者有充分信心來理解的內容,因此讀起來也不費事。這本書幾乎沒有提及任何python官方以外的庫,所以接觸到的是完全「pythonic」的語法。我當時幾乎每天看50頁左右,有時做做筆記,看完一部分之後再動動手編程,差不多一個月時間就看完了。就如這本書最後部分所寫的那樣,讀完這本書基本上算是一個中階python程式設計師了。當然,這還不夠,因為這時候的我們相當於會搭小木屋了,但是,要設計一棟現代化大樓,還需要一些工作。
第1本:《利用python進行數據分析》
同樣還是歐瑞利的書。
正如這本書前言部分所寫的那樣,已經默認讀者基本掌握了python的初級語法並具有一定的數理統計和線性代數知識,如方差啊、協方差啊、矩陣啊、行列式啊、特徵向量之類的,知道這些名詞所對應的知識就基本上足夠進行數據分析了。
此書主要側重於講解主流的python科學計算庫,如Numpy, pandas, matplotlib。其中,Numpy側重於描述矩陣的一切關係,是用python進行科學計算的根基,幾乎可以實現Matlab對矩陣的一切運算。pandas 是數據表分析的基礎,幾乎可以實現一切SQL語言所完成的查詢與計算。並且,pandas是完全支持Numpy的,也就是說,Numpy的數據是可以輕鬆轉換成pandas的處理格式,反之也差不多。Matplotlib是python中最最著名的作圖庫,可以做出一切滿足要求的統計圖,前提是要敲足夠多的代碼。。。雖然這個庫很龐大,但是初學者還是多用用這個庫來作圖,等會的差不多或者是厭煩了呢再改用例如seaborn這種高級繪圖庫。只要仔細閱讀了此書,從此科學計算不是夢~
第2本:《python科學計算》
清華大學出版社出版。
講道理,清華大學出版的書,要麼是晦澀難懂,要麼是太簡單易懂。不過嘛,這本科學計算的書還是不錯的。我當時用的是第一版,和上面那本一起對照著看的,充當工具書。此書除了講Numpy以外,還會講到理科中會常用的庫Scipy。Scipy這個庫包含了很多數值計算和數學物理方面的內容。比如pi值啊、普朗克常數啊、光速等等的,至於函數方面,比如以前學的什麼擬合啊、插值啊、凸優化什麼的。這個庫比較適合理科生使用,看看也沒什麼損失(反正我幾乎沒用過)。不過當時第一版裡面有個章節是用的Enthought公司開發的庫,不過已經廢棄的那種,現在這個第二版應該把這一章節重新製作了吧。
第三本:《機器學習實戰》
不知道是翻譯的國外的哪個出版社的書。
這本書當時是和西瓜書一起出現的。西瓜書主要是講機器學習算法理論,而這本書是既講理論(不難)更講算法,即如何用python來實現主流的機器學習算法。有趣的是,這本書中的代碼幾乎沒有借Numpy以外的庫來實現的,可以說是非常的pythonic了。我建議第一遍看的時候主要看它的實戰例子,第二遍再看相關代碼。原因有兩點,第一:目前有諸如sklearn這樣方便用戶調用的機器學習庫,大多數情況下我們不需要重複造輪子;第二:看代碼是真的慢。。。
看完第0本,中階語法不用愁。
看完第1本,數據分析信手拈來。
第2本就不用看完了,偶爾翻翻就好了。
看完第3本,主流的機器學習思想基本上可以搭建起來了。
我平時也喜歡看看其他的python的書,看看有什麼新奇的東西。比如這是我書櫃的一角,有的書也很有趣,《python cookbook》就是其中的一本。不過不是很建議初學者讀,後期感興趣的朋友可以試試的。