每一個數據分析師或是數據科學家都使用各自不同的技術棧。即使同樣使用Python做為主力數據分析語言,每個人會用到的工具組合也不盡相同。
但不管怎么說,對于希望使用python來進行數據分析工作的人來說,學習iPython,NumPy,pandas,matpotlib這個組合是一個目前看來怎么都不會太錯的方向。
本書恰好精確地涵蓋了這幾個方向。
本書的作者Wes McKinney正是pandas的主要作者。作者有多年的Python數據分析工作經驗。除了pandas之外,作者對本書覆蓋的這iPython,NumPy,pandas,matpotlib等也都有著很深的理解。
本書的結構比較特別。前兩章是背景介紹。第三、四、五章分別介紹了一下iPython,NumPy,pandas。第六到十一章是一些比較具體的功能的介紹以及實例,以pandas的使用為主,中間卻又插進了一個講matplotlib的第八章。第十二章又回到NumPy。全書最后還附了一個大約三十頁篇幅的Python快速入門。
這個結構給人的感覺是作者在寫這本書的時候有著很大的抱負:希望能把一個完全的新手帶入Python數據分析的大門,即使這個新手在此之前對數據分析和Python都完全沒有概念。
這種抱負對于一本不到五百頁的教材不免有些過于宏大。一個明顯的負面結果是第一、二章和后面的章節之間存在著較大的脫節。第一、二章的內容其實是適合于一個完全沒有數據分析經驗的新手的。但后面的章節對于新手來說則比較困難的:主要的困難不在于理解書中的技術,而在于真正領會到這些技術在實際中究竟有什么用。
作者并非沒有意識到這個困難。事實上,他試圖用貫穿全書的大量實例來化解這個困難。但是,事于愿違的是,這些實例反而造成了閱讀上障礙:這些實例很可能是書中最為乏味無趣的部分。很難想象會有多少讀者真正有耐心把所有實例從頭到尾認真讀完,更不用說,像作者所希望的那樣,把這些實例一一重復一遍。
由于這個特點,對于初學者,這本書可能更適合作為配合課程使用的教材,而不是自學用的教材。比起重復書中的實例,與課程進度相配合的作業可能更能提高初學者的興趣。
對于已經有一些Python數據分析經驗的讀者,這本書可能會顯得較初級。但是,跳這些比較初級的部分,本書還有很多對于有經驗的讀者來說很有價值的內容。在我看來,這些特別有價值的內容集中在第四、五、八、十二章對NumPy,pandas,matpotlib等工具庫的介紹中。由于作者對這些工具有著很深的理解,這些章節很好地闡述了這幾個工具庫的基本設計思路,而非簡單地堆砌知識點。
在讀這本書前,我對于這幾個工具庫各有一到兩年的使用經驗,但除了最初看過了一些入門tutorial之外,我并沒有系統地學習過相關的內容,通常都是要使用某個功能時看文檔或是實例。這本書中涉及到的大部分知識,我的工作中都略有涉及過,但我確實感覺到,本書對于我真正理解這些庫有很大的幫助。
最后,我手上這本書出版的時間是2012年(豆瓣上有2013版的信息,但我在amazon上似乎并沒有看到),所以有些內容已經比較陳舊。以iPython為例,雖然第三章中用一小節簡單介紹了iPython notebook,但絕大部分內容還是基于傳統的命令行iPython,包括了大量在iPython notebook環境下并不適用的操作。但從我的身邊的情況來看,現下的絕大部分iPython使用者都以Jupyter notebook(即iPython notebook)為主要工作環境,直接使用命令行iPython的用戶已經很少了。
以下是分章節的評論。
1. Preliminaries
非常基礎的知識,只要是稍有經驗的讀者都可以直接跳過。
2. Introductory Examples
通過一些實例來解釋Python數據分析是做什么的、基本流程如何,主要的目的在于“引起讀者的興趣”。我覺得比起后面章節中的實例,這一章中的實例還比較有趣。
3. IPython: An Interactive Computing and Development Environment
介紹iPython。對于希望使用Jupyter notebook(即ipython notebook)的讀者來說,可能不太夠。
4. NumPy Basics: Arrays and Vectorized Computation
很不錯的一章。特別難得的是,作者試圖幫助讀者真正理解NumPy的設計思路和構成邏輯,而不是簡單地教會讀者使用方法。行文很有條理。
5. Getting Started with pandas
很不錯的一章,和上一章的感覺類似。考慮的本書作者的身份,這一章寫得好是理所應當。
6. Data Loading, Storage, and File Formats
介紹如何讀/寫各種格式的文件。感覺和直接讀文檔其實差別不是很大。
7. Data Wrangling: Clean, Transform, Merge, Reshape
挺好的一章。內容稍多,但還是挺有用的。
8. Plotting and Visualization
主要介紹matplotlib。挺不錯的一章,和第四、五章感覺類似。
9. Data Aggregation and Group Operations
比較有意思的一章,但有些過于復雜的使用方法,覺得用到的機會并不多。
10. Time Series
前一半不錯,對初學者來說很有幫助。后一半比較細節和偏。
11. Financial and Economic Data Applications
感覺這章單獨把financial和economic data的應用提出來其實意義不大,畢竟這只是data analysis的眾多方向之一。而且,本章的知識點和前面幾章的重復很多,基本上可以看做是前幾章內容的實例練習。這章存在主要原因其實是作者的financial背景。
12. Advanced NumPy
很好的一章。對于想要真正掌握NumPy的讀者,本章中的知識是很有價值的。不過由于本書總體偏入門級,本章雖然題為“Advanced NumPy”,實質上內容并不太“advanced”。