1. 程式人生 > >Python 資料科學手冊

Python 資料科學手冊

內容簡介

本書是對以資料深度需求為中心的科學、研究以及針對計算和統計方法的參考書。本書共五章,每章介紹一到兩個 Python 資料科學中的重點工具包。

  • 第1章 從 IPython 和 Jupyter 開始,它們提供了資料科學家需要的計算環境;
  • 第2章講解能提供 ndarray 物件的 NumPy,它可以用 Python 高效地儲存和操作大型陣列;
  • 第3章主要涉及提供 DataFrame 物件的 Pandas,它可以用 Python 高效地儲存和操作帶標籤的/列式資料;
  • 第4章的主角是 Matplotlib,它為 Python 提供了許多資料視覺化功能;
  • 第5章以 Scikit-Learn 為主,這個程式庫為最重要的機器學習演算法提供了高效整潔的 Python 版實現。

本書適合有程式設計背景,並打算將開源 Python 工具用作分析、操作、視覺化以及學習資料的資料科學研究人員。

作者簡介

Jake VanderPlas,Python 科學棧深度使用者和開發者,尤其擅長 Python 科學計算和資料視覺化,是 altair 等視覺化程式庫的建立人,併為 Scikit-Learn、IPython 等 Python 程式庫做了大量貢獻。現任美國華盛頓大學 eScience 學院物理科學研究院院長。

本書內容

譯者序

本書主要介紹了 Python 在資料科學領域的基礎工具,包括 IPython、Jupyter、NumPy、Pandas、Matplotlib 和 Scikit-Learn。當然,資料科學並非 Python 一家之“言”,Scala、Java、R、Julia 等程式語言在此領域都有各自不同的工具。至於要不要學 Python,我們認為沒必要糾結,秉承李小龍的武術哲學即可——Absorb what is useful, discard what is not, and add what is uniquely your own(取其精華,去其糟粕,再加點自己的獨創)。Python 的語法簡潔直觀、易學易用,是表現力最強的程式語言,學會它就可以讓計算機跟隨思想,快速完成許多有趣的事情。同時,它也是備受歡迎的膠水語言,許多由 Java、C/C++ 語言開發的工具都會提供 Python 介面,如 Spark、H2O、TensorFlow 等。2017 年 3 月 6 日,PyPI(

https://pypi.python.org/pypi)網站上的程式包數量就已經達到 10 萬,新的程式包還在不斷地湧現,資料科學目前是 Python 星球最酷炫的風景之一。如果資料科學問題讓你心有掛礙,那麼 Python 這根資料科學的蛇杖(Asklēpiós,阿斯克勒庇俄斯之杖,醫神手杖,醫院的徽章)可以為你指點迷津。

本書書稿已經在 GitHub 上開源(https://github.com/jakevdp/PythonDataScienceHandbook)。由於本書的紙質版是黑白印刷的,因此作者在 GitHub 上建立了開源專案,以 Notebook 形式分享了本書的書稿,讓讀者可以看到彩色的視覺化圖。此外,作者也在部落格(https:// jakevdp.github.io/PythonDataScienceHandbook/)上釋出了 Notebook 的 HTML 頁面。除正文的部分內容外,Notebook 中的程式碼、註釋與紙質版相同。由於 Notebook 是類 JSON 資料格式,因此也適合做版本管理,配合 GitHub 修復 bug 比較方便。配合本書同時開源的,還有作者編寫的 Python 入門教程 Whirlwind Tour of Python

,同樣是使用 Notebook 撰寫的。 Notebook 是 IPython 的 Web 版,目前已經合併到 Jupyter(http://jupyter.org)專案中,是一款適合程式設計、寫作、分享甚至教學(Jupyter/nbgrader)的開源工具,其基本功能將在本書第 1 章中介紹。Notebook 的操作十分簡單,在瀏覽器上即可執行。它不僅可以在瀏覽器中直接編寫程式碼、生成視覺化圖,還支援 Markdown 文字格式,能夠在網頁中快速插入常用的 Web 元素(標題、列表、連結、影象)乃至 Mathjax 數學公式,稍加調整便可以幻燈片形式播放內容,閱讀體驗一級棒。

看程式設計書的第一步是搭建開發環境,但這一步往往會嚇退不少對程式設計感興趣的讀者。本書對應的開發環境可以通過三種方式實現。第一種方式是線上版 Notebook 程式設計環境,免安裝,有瀏覽器就可以學習程式設計知識,推薦想快速掌握知識的朋友使用。目前,有許多安裝了 Python 程式設計環境的 Anaconda 發行版的網路平臺(PaaS),支援 Jupyter Notebook 程式設計環境,可以免費使用,如 JupyterHub(https://tmpnb.org)、SageMathCloud(https://cloud.sagemath.com)、微軟 Azure(https://notebooks.azure.com)線上程式設計環境。它們可以線上執行 Notebook 檔案,編寫除錯執行程式碼,也支援檔案的上傳、下載、新建、刪除,還可以執行 Terminal 工具。另外,基於 GitHub 程式碼倉庫,有 nbviewer(https://nbviewer.jupyter.org)可以檢視 GitHub 的 Notebook,還有 binder(http://mybinder.org)支援程式碼倉庫一鍵部署,都是非常有趣的組合。類似的線上免費 Notebook 程式設計環境還有很多,特別推薦德國 Yves Hilpisch 博士的 The Python Quants Group 公司開發的 Python Quants Platform(http://tpq.io)。Yves 博士的三本 Python 金融學圖書均使用該程式設計環境,讀者可以免費註冊使用,其硬體為 CPU Xeon 1231、16GB 記憶體,能夠滿足一般的學習與分析需要。Jupyter Notebook 支援許多程式語言(Python、R、Scala、Julia、Haskell、Ruby……),甚至支援 Kotlin(https://github.com/ligee/kotlin-jupyter)、Java 9 的 REPL 新功能 JShell(https://github.com/Bachmann1234/java9_kernel)。第二種方式是在電腦上安裝 Anaconda 發行版。作者在本書前言中介紹了具體的安裝方法,安裝成功後即可建立 Notebook 編寫程式碼。由於網路問題,建議國內的朋友使用清華大學 TUNA 映象(https://mirror.tuna.tsinghua.edu.cn/help/anaconda/)下載和更新 Anaconda 整合開發環境。第三種方式適合瞭解 Docker(https://www.docker.com/)的朋友——可以直接使用 Jupyter 在 GitHub 上的 Docker 映象(https://github.com/jupyter/docker-stacks),一鍵安裝,省時省力。裡面除了標準 Anaconda 開發環境,還支援 Spark、TensorFlow 的 Notebook 開發環境。

本書作者 Jake VanderPlus(GitHub 賬號為 @jakevdp)目前是華盛頓大學 eScience 學院物理科學研究院院長。他既是一位天文學家,也是一位會議演講達人,活躍於歷年的 PyData 會議,尤其擅長 Python 科學計算與資料視覺化。Jake 在資料視覺化方面頗有建樹,建立了 altair、mpld3、JSAnimation 視覺化程式庫,同時為 NumPy、Scikit-Learn、Scipy、Matplotlib、IPython 等著名 Python 程式庫做了大量貢獻。我在學習貝葉斯估計時,從他 2014 年的系列博文“Frequentism vs Bayesianism”(頻率主義與貝葉斯主義)中獲益頗多。2015 年,聽說他要在 O'Reilly 出版《Python 資料科學手冊》一書,一直持續關注,正式版終於在 2016 年年底釋出。期間,他在 O'Reilly 做了一些 Python 資料科學教程(基於 O'Reilly 的 Atlas 平臺建立 Notebook,程式碼可線上執行),介紹了 Pandas、Seaborn、Matplotlib 等工具。2017 年 2 月,他在 YouTube 釋出了一組視訊,通過美國西雅圖市弗雷蒙特橋上穿行的自行車統計資料,演示了 Python 資料科學程式設計的最佳實踐,包括在 Notebook 中編碼、重構、測試、釋出程式的技巧,可謂短小精悍。此次有幸能翻譯大神的作品,與有榮焉。首先感謝圖靈社群,尤其感謝朱巍老師的再次大力支援,夏靜文老師、劉美英老師和嶽新欣老師的細緻審校。也要感謝一起合作過的小夥伴們,促使我們再次翻譯資料科學的基礎教程,讓更多用 SQL、Excel、Matlab、SPSS 的分析師瞭解 Python 資料科學的工具,用資料更自由地表達,講出更精彩的故事。

前言

什麼是資料科學

這是一本介紹 Python 資料科學的書。可能話音未落,你腦海中便會浮現一個問題:什麼是資料科學(data science)?要給這個術語下個定義其實很困難,尤其它現在還那麼流行(自然也眾口難調)。批評者們要麼認為它是一個多餘的標籤(畢竟哪一門科學不需要資料呢),要麼認為它是一個粉飾簡歷、吸引技術招聘者眼球的噱頭。

我認為這些批評都沒抓住重點。如果去掉浮華累贅的裝飾,資料科學可能算是目前為止對跨學科技能的最佳稱呼,在工業界和學術界的諸多應用中扮演著越來越重要的角色。跨學科是資料科學的關鍵;我認為,如今對資料科學最合理的定義,就是 Drew Conway 於 2010 年 9 月在自己的部落格上首次發表的資料科學維恩圖(如圖 0-1 所示)。

{60%}

圖 0-1:Drew Conway 的資料科學維恩圖

雖然圖中交錯的標籤看著跟開玩笑似的,但我還是認為這幅圖道出了“資料科學”的真諦:它是一個跨學科的課題。資料科學綜合了三個領域的能力:統計學家的能力——能夠建立模型和聚合(資料量正在不斷增大的)資料;電腦科學家的能力——能夠設計並使用演算法對資料進行高效儲存、分析和視覺化;領域專家的能力——在細分領域中經過專業訓練,既可以提出正確的問題,又可以作出專業的解答。

我希望你不要把資料科學看作一個新的知識領域,而要把它看成可以在自己熟悉的領域中運用的新能力。無論你是彙報競選結果、預測股票收益、優化網路廣告點選率、在顯微鏡下識別微生物、在太空中尋找新天體,還是在其他與資料相關的領域中工作,本書都會讓你具備發現問題、解決問題的能力。

目標讀者

無論是在華盛頓大學教書時,還是在各種科技會議上演講時,經常有人問我這樣一個問題:“我應該怎樣學習 Python 呢?”問這個問題的都是有技術能力的學生、程式設計師或科研人員,他們通常都具備很強的程式設計能力,善於使用計算機和數學工具。他們中的大多數人其實並不想學習 Python 本身,而是想把它作為資料密集型任務處理和電腦科學的工具來使用。雖然網上已經有很多教學視訊、部落格和教程,但是我一直覺得這個問題還缺少一個令我滿意的答案——這就是創作本書的緣由。

這並不是一本介紹 Python 和程式設計基礎知識的書。它假設讀者已經熟悉 Python 的基本語法,包括定義函式、分配變數、呼叫物件方法、實現程式控制流等基本能力。這本書將幫助 Python 使用者學習如何通過 Python 的資料科學棧——包括 IPython、NumPy、Pandas、Matplotlib、Scikit-Learn,以及其他相關的程式庫——高效地儲存、處理和分析資料。

為什麼用Python

Python 作為科學計算的一流工具已經有幾十年的歷史了,它還被應用於大型資料集的分析和視覺化。這可能會讓 Python 早期的創導者感到驚奇,因為這門語言一開始並不是為資料分析和科學計算設計的。Python 之所以能在資料科學領域廣泛應用,主要是因為它的第三方程式包擁有龐大而活躍的生態系統:NumPy 可以處理同類型(homogeneous)陣列型資料、Pandas 可以處理多種型別(heterogeneous)帶標籤的資料、SciPy 可以解決常見的科學計算問題、Matplotlib 可以繪製可用於印刷的視覺化圖形、IPython 可以實現互動式程式設計和快速分享程式碼、Scikit-Learn 可以進行機器學習,還有其他很多工具將在後面的章節中介紹。

如果你需要一個 Python 入門教程,那麼我推薦你閱讀本書的姊妹篇 A Whirlwind Tour of the Python Language。這個簡短的教程介紹了 Python 的基本特性,目的是讓熟悉其他程式語言的資料科學家快速學習 Python。

Python 2與Python 3

本書使用 Python 3 的語法,其中包括了 Python 2.x 版本不相容的語法技巧。雖然 Python 3.0 在 2008 年就釋出了,但並沒有被快速採用,尤其是在科學和 Web 開發領域。這主要是因為許多第三方程式庫和工具包需要時間來相容 Python 的新版本。然而,從 2014 年初開始,資料科學領域最重要的工具的穩定版本都已經同時相容 Python 2 和 Python 3,因此本書將使用新版本的 Python 3 語法,不過其中的大部分程式碼示例無須調整也可以在 Python 2 中執行。如果遇到了 Python 2 不相容的地方,我會盡量詳細說明。

內容概覽

本書每一章都重點介紹一到兩個程式包或工具,它們是 Python 資料科學的基礎。

IPython 和 Jupyter(第 1 章)

  這兩個程式包為許多使用 Python 的資料科學家提供了計算環境。

NumPy(第 2 章)

  這個程式庫提供了 ndarray 物件,可以用 Python 高效地儲存和操作大型陣列。

Pandas(第 3 章)

  這個程式庫提供了 DataFrame 物件,可以用 Python 高效地儲存和操作帶標籤的 / 列式資料。

Matplotlib(第 4 章)

  這個程式庫為 Python 提供了許多資料視覺化功能。

Scikit-Learn(第 5 章)

  這個程式庫為最重要的機器學習演算法提供了高效整潔的 Python 版實現。

Python 資料科學(PyData)世界裡當然不只有這五個程式包;相反,情況是日新月異的。因此,我在每章結尾都列舉了用 Python 實現的其他有趣的圖書、專案和程式包的參考資料。不過這五個程式包是目前在 Python 資料科學領域中完成大部分工作的基礎,即使生態系統在不斷成長,我仍然覺得它們五個非常重要。

使用程式碼示例

本書的補充材料(程式碼示例、影象等)都可以在 https://github.com/jakevdp/PythonDataScienceHandbook 下載。本書是要幫你完成工作的。一般來說,如果本書提供了示例程式碼,你可以把它用在你的程式或文件中。除非你使用了很大一部分程式碼,否則無須聯絡我們獲得許可。比如,用本書的幾個程式碼片段寫一個程式就無須獲得許可,銷售或分發 O'Reilly 圖書的示例光碟則需要獲得許可;引用本書中的示例程式碼回答問題無須獲得許可,將書中大量的程式碼放到你的產品文件中則需要獲得許可。

我們很希望但並不強制要求你在引用本書內容時加上引用說明。引用說明一般包括書名、作者、出版社和 ISBN,比如“Python Data Science Handbook by Jake VanderPlas (O'Reilly). Copyright 2017 Jake VanderPlas, 978-1-491-91205-8”。

如果你覺得自己對示例程式碼的用法超出了上述許可的範圍,歡迎你通過 [email protected] 與我們聯絡。

軟體安裝注意事項

安裝 Python 和科學計算程式庫的方法其實很簡單,下面列舉一些在安裝軟體時的注意事項。

雖然安裝 Python 的方法有很多,但是在資料科學方面,我推薦使用 Anaconda 發行版 {1[中國大陸使用者請使用清華大學 TUNA 映象(https://mirror.tuna.tsinghua.edu.cn/help/anaconda/)。——譯者注]},Windows、Linux 和 Mac OS X 作業系統的安裝和使用方式類似。Anaconda 發行版有兩種。

  • Miniconda(http://conda.pydata.org/miniconda.html)只包含 Python 直譯器和一個名為 conda 的命令列工具。conda 是一個跨平臺的程式包管理器,可以管理各種 Python 程式包,類似於 Linux 使用者熟悉的 apt 和 yum 程式包管理器。
  • Anaconda(https://www.continuum.io/downloads)除了包含 Python 和 conda 之外,還同時綁定了四五百個科學計算程式包。由於預安裝了許多包,因此安裝它需要佔用幾個吉位元組的儲存空間。

如果安裝了 Miniconda,所有程式包(包括 Anaconda)都可以手動安裝。因此,我推薦先安裝 Miniconda,其他包視情況安裝。

首先,下載並安裝 Miniconda 程式包(確認你選擇的是適合 Python 3 的版本),然後安裝本書的幾個重要程式包。

[~]$ conda install numpy pandas scikit-learn matplotlib seaborn ipython-notebook

本書還會使用其他更專業的 Python 科學計算工具,安裝方法同樣很簡單,就是 conda install 程式包名稱。關於 conda 的更多資訊,包括 conda 虛擬環境(強烈推薦)的建立和使用,請參考 conda 線上文件(http://conda.pydata.org/docs/)。

排版約定

本書使用了下列排版約定。

  • 黑體

    表示新術語或重點強調的內容。

  • 等寬字型(constant width

    表示程式片段,以及正文中出現的變數、函式名、資料庫、資料型別、環境變數、語句和關鍵字等。

  • 加粗等寬字型(constant width bold

    表示應該由使用者輸入的命令或其他文字。

  • 等寬斜體(constant width italic

    表示應該由使用者輸入的值或根據上下文確定的值替換的文字。

O'Reilly Safari

{40%}

Safari(原來叫 Safari Books Online)是面向企業、政府、教育從業者和個人的會員制培訓和參考諮詢平臺。

我們向會員開放成千上萬本圖書以及培訓視訊、學習路線、互動式教程和專業視訊。這些資源來自 250 多家出版機構,其中包括 O'Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett 和 Course Technology。

更多資訊,請訪問 http://oreilly.com/safari

聯絡我們

請把對本書的評價和問題發給出版社。

美國:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中國:

  北京市西城區西直門南大街 2 號成銘大廈 C 座 807 室(100035)

  奧萊利技術諮詢(北京)有限公司

O'Reilly 的每一本書都有專屬網頁,你可以在那兒找到本書的相關資訊,包括勘誤表、示例程式碼以及其他資訊。本書的網站地址是:

  http://bit.ly/python-data-sci-handbook

對於本書的評論和技術性問題,請傳送電子郵件到:[email protected]

要了解更多 O'Reilly 圖書、培訓課程、會議和新聞的資訊,請訪問以下網站:

  http://www.oreilly.com

我們在 Facebook 的地址如下:

  http://facebook.com/oreilly

請關注我們的 Twitter 動態:

  http://twitter.com/oreillymedia

我們的 YouTube 視訊地址如下:

  http://www.youtube.com/oreillymedia

第1章 IPython:超越 Python
第2章 NumPy 入門(一)
第2章 NumPy 入門(二)
第3章 Pandas 資料處理(一)
第3章 Pandas 資料處理(二)
第3章 Pandas 資料處理(三)
第4章 Matplotlib 資料視覺化(一)
第4章 Matplotlib 資料視覺化(二)
第4章 Matplotlib 資料視覺化(三)
第5章 機器學習(一)
第5章 機器學習(二)
第5章 機器學習(三)

閱讀全文: http://gitbook.cn/gitchat/geekbook/5bd687dd8b3f803a63efa079