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