官术网_书友最值得收藏!

前言

本書面向的讀者是那些經(jīng)常使用電子表格軟件進行數(shù)據(jù)處理,但從未寫過一行代碼的人。前幾章會教你設(shè)置Python運行環(huán)境,告訴你計算機是如何看待數(shù)據(jù)并對其進行簡單處理的。你很快就能掌握在電子表格(包括CSV文件)和數(shù)據(jù)庫中處理數(shù)據(jù)的方法。

剛開始,你可能會覺得這樣做是一種退步,如果你能熟練使用Excel,這種感受會更加強烈。以前你只需復(fù)制粘貼就能完成的工作,現(xiàn)在卻要煞費苦心地告訴Python如何在列的每個單元格之間循環(huán),這效率太低了,想想就令人沮喪(特別是當你幾次三番地回頭去找某一處輸入錯誤的時候)。但是當你逐漸掌握了Python之后,就會不斷地發(fā)現(xiàn)它的真正價值所在,而其中一個極好的例子就是它可以自動完成你現(xiàn)在不斷重復(fù)的工作。

本書的寫作目的是讓你全面地掌握Python,然后充滿信心地寫出按照你的期望運行的有效代碼。一開始輸入一些代碼或許是個好主意,這樣你就會熟悉像制表符、閉括號和引用之類的技術(shù)細節(jié)。但是,本書中的所有代碼在網(wǎng)上都能找到(https://github.com/cbrownley/foundations-for-analytics-with-python)。你在做自己的工作時,完全可以通過復(fù)制粘貼來重用這些代碼。沒關(guān)系!適時地進行復(fù)制和粘貼也是高效編程的一部分。在閱讀本書的同時完成示例程序,會使你更好地理解示例代碼的原理。

祝你在成為程序員的道路上好運連連!

為什么要讀這本書,為什么要學習這些技能

如果你經(jīng)常做數(shù)據(jù)處理工作,就一定會為學習編程而興奮。學習編程的一個好處是,你可以完成那些靠手工難以完成或者根本不可能完成的數(shù)據(jù)處理與分析工作。可能你已經(jīng)遇到了這樣的問題:需要處理的文件包含太多數(shù)據(jù),以至于打開文件都非常困難或者根本不可行。即使打開了這些文件,手動處理也會花費大量時間,并且極易出錯,因為你對數(shù)據(jù)進行的任何修改都需要很長時間才能更新,而且面對如此多的數(shù)據(jù),進行修改時很容易漏掉某一行或某一列。你可能還遇到了其他情況,如需要處理大量的文件,以至于手動處理根本不可能完成。有些時候,你需要的數(shù)據(jù)來自于幾十、幾百甚至上千個文件。當所需的文件數(shù)量不斷增加時,手動處理會變得越來越困難。在以上所有這些情況之下,寫一個Python腳本來處理文件就可以解決你的問題,因為Python腳本可以快速有效地處理大型文件和大批量的文件。

學習編程的另一個好處是,你可以自動地重復(fù)數(shù)據(jù)處理和數(shù)據(jù)分析過程。在很多情況下,我們針對數(shù)據(jù)做的都是耗時的重復(fù)性工作。例如,一般的數(shù)據(jù)管理過程是,先從客戶或供應(yīng)商處獲取數(shù)據(jù),然后提取并保留所需的數(shù)據(jù),之后還可能會進行一些數(shù)據(jù)轉(zhuǎn)換或重新格式化,最后將數(shù)據(jù)保存到數(shù)據(jù)庫或數(shù)據(jù)倉庫中[這就是數(shù)據(jù)科學家熟知的數(shù)據(jù)ETL(extract、 transform、load,即抽取、轉(zhuǎn)換和加載)過程]。類似地,典型的數(shù)據(jù)分析過程包括數(shù)據(jù)獲取、數(shù)據(jù)準備、數(shù)據(jù)分析和結(jié)果展示。在數(shù)據(jù)管理和數(shù)據(jù)分析過程中,一旦建立了流程,就可以編寫Python代碼來進行各種操作。通過創(chuàng)建Python腳本來執(zhí)行操作,你可以將耗時的重復(fù)性工作簡化為執(zhí)行一個腳本,并用節(jié)省下來的時間去做其他更有意義的工作。

最重要的是,在進行數(shù)據(jù)處理和數(shù)據(jù)分析時,使用Python腳本代替手動操作可以減小出錯的可能性。手動進行數(shù)據(jù)處理時,非常可能出現(xiàn)復(fù)制粘貼錯誤或輸入錯誤。導(dǎo)致出錯的原因有很多:你可能因過于匆忙而忽略了錯誤,或者有些事導(dǎo)致你分心了,或者僅是因為你太累了。而且,當你處理大型文件或大批量的文件,或者進行重復(fù)性操作時,出錯的可能性會更大。相反,Python腳本從來不會分心或疲勞。一旦你調(diào)試好腳本,確認它可以按照你的期望處理數(shù)據(jù),它就會一如既往、不知疲倦地工作下去。

最后,學習編程非常有趣,而且能提高自身能力。只要熟悉了基本的語法,你就會非常樂于找到所需的語言功能,然后將它們組合在一起,以完成整體的數(shù)據(jù)分析目標。至于代碼和語法,網(wǎng)上有許多示例可以教會你如何使用專門的功能來完成特定的任務(wù)。不過,這些示例雖能提供幫助,但是你需要通過自己的創(chuàng)造力和解決問題的能力來弄清楚如何修改這些代碼,以使它們滿足你的實際需要。找到合適的代碼,并想辦法讓它們?yōu)槟愎ぷ鳎@是個非常有意思的過程。此外,學習編程能極大地提高自身的能力。舉個例子,考慮一下我前面提到過的情況,即要處理大型文件和大批量文件。如果不會編程,那么你要么需要花費大量時間,要么束手無策。一旦學會了編程,你就可以通過Python腳本輕松愉快地解決所有問題。有些數(shù)據(jù)處理和數(shù)據(jù)分析任務(wù)以前是非常困難或根本不可能完成的,但是現(xiàn)在你都可以輕松搞定,這會使你充滿信心,能量爆棚,從而積極主動地尋找更多的機會,使用Python來迎接數(shù)據(jù)處理方面的挑戰(zhàn)。

目標讀者

本書的目標讀者是那些經(jīng)常從事數(shù)據(jù)處理工作,又具有極少或根本沒有編程經(jīng)驗的人。書中的示例覆蓋了常用的數(shù)據(jù)源和數(shù)據(jù)格式,包括文本文件、逗號分隔值(CSV)文件、Excel文件和數(shù)據(jù)庫。在某些情況下,由于文件中數(shù)據(jù)過多,或由于文件數(shù)量太多,造成文件難以打開或不能通過手動處理。在其他一些情況下,從文件中抽取和使用數(shù)據(jù)的過程非常耗時并且容易出錯。在這些情況下,如果你不會編程,就會將大量時間浪費在數(shù)據(jù)搜索、打開與關(guān)閉文件,以及復(fù)制和粘貼數(shù)據(jù)上面。

鑒于你可能從未運行過腳本,本書從最基本的操作開始,介紹如何在文本文件中編寫代碼以創(chuàng)建Python腳本。然后,我們會學習如何通過命令行窗口(Windows用戶)或終端窗口(macOS用戶)來運行Python腳本。(如果你做過一點編程,可以跳過第1章,直接學習第2章中的數(shù)據(jù)分析內(nèi)容。)

本書的編寫方式特別適合編程新手。書中提供的示例包含了完成某項任務(wù)所需的全部Python代碼,而不是僅提供一些代碼片段,讓你自己將它們組合起來以完成任務(wù)。你以后可能會經(jīng)常使用本書作為參考,而且會發(fā)現(xiàn)書中的代碼確實有幫助。最后,正所謂“一圖勝千言”,書中使用了大量屏幕截圖來展示輸入文件、Python腳本、命令行窗口、終端窗口和輸出文件,這樣你就可以真實地看到如何創(chuàng)建輸入、代碼、命令和輸出了。

我會詳細講解代碼的原理,也會推薦一些工具供你使用。這種方法可以幫助你打下堅實的基礎(chǔ),以理解在程序背后到底發(fā)生了什么。有時候,你需要在Google上搜索問題的解決方案并找到一些有用的代碼。做完了書中的練習之后,你可以更好地理解這些代碼的工作原理,也就是說,你不但知道如何根據(jù)具體情況使用它們,而且知道在出現(xiàn)問題時如何進行修復(fù)。因為你在每一章中都會編寫一些代碼,所以你會發(fā)現(xiàn)可以將本書作為參考書,或指導(dǎo)手冊,然后在里面找到完成具體任務(wù)的方法。但是請記住,這僅是一本“學習如何編程”的書,你還需要不斷提高和擴展編程技能,以便綜合運用它們來完成各種任務(wù)。

為什么使用Windows

本書中的大部分示例都是演示在Microsoft Windows系統(tǒng)下如何創(chuàng)建和運行Python腳本。將重點放在Windows系統(tǒng)上的原因很簡單:我想讓本書幫助盡可能多的人。根據(jù)估計,大多數(shù)臺式機和筆記本電腦(特別是用于商業(yè)分析的計算機)運行的是Windows操作系統(tǒng)。例如,根據(jù)Net Applications的調(diào)查,截至2014年12月,Microsoft Windows占領(lǐng)了大約90%的臺式機和筆記本電腦操作系統(tǒng)市場。因為我想讓本書滿足臺式機用戶和筆記本電腦用戶的需求,而且這些電腦中多數(shù)都安裝了Windows操作系統(tǒng),所以本書將集中講述如何在Windows系統(tǒng)下創(chuàng)建和運行Python腳本。

盡管本書將重點放在了Windows上,但在適當情況下,我也提供如何在macOS系統(tǒng)上創(chuàng)建和運行Python腳本的示例。不論在哪種機器上運行,Python中幾乎所有功能的表現(xiàn)都是一樣的。當因為操作系統(tǒng)不同而出現(xiàn)差別時,我會分別給出具體的說明。例如,第1章的第一個例子演示了如何在Microsoft Windows和macOS系統(tǒng)下創(chuàng)建和運行Python腳本。類似地,第2章和第3章的第一個例子也演示了如何在Windows和macOS系統(tǒng)下創(chuàng)建和運行Python腳本。此外,第8章涵蓋了兩種操作系統(tǒng),介紹了如何在Windows中建立計劃任務(wù)以及如何在macOS中建立定時作業(yè)。如果你是Mac用戶,可以使用每章的第一個例子作為模板,來學習如何創(chuàng)建Python腳本,如何使其可以執(zhí)行,以及如何運行腳本,然后重復(fù)這些步驟來創(chuàng)建和運行每章中其余的示例程序。

為什么使用Python

如果你的目的是學習一門編程語言來使數(shù)據(jù)處理和數(shù)據(jù)分析任務(wù)規(guī)模化和自動化,那么Python絕對是一個好的選擇。Python的一個顯著特點就是使用空白字符和縮進來表示行的結(jié)尾和代碼分塊,這與很多其他語言不同,其他語言使用特殊字符(比如分號和花括號)來達到同樣的目的。Python的這個特點使你一眼就能看出程序的組織方式。

在其他語言中,特殊字符的使用對于編程新手來說是個困擾,原因至少有兩個。第一,這使得學習曲線更長并且更加陡峭。當你學習編程時,實質(zhì)上是在學習一門新的語言,你必須花時間學習這些特殊字符的用法,然后才能有效地使用這門語言。第二,特殊字符使代碼難以閱讀。這是因為在使用分號和花括號表示代碼塊的語言中,并不總是使用縮進來標明代碼塊。如果沒有縮進,多個代碼塊看上去就是亂七八糟的。

Python使用空白字符和縮進來表示代碼分塊,而不使用分號和花括號,這樣就避免了上述問題。當你閱讀Python代碼時,你的視線會集中在實際的代碼行上,而不是代碼塊的分隔符上,因為代碼周圍只有空白字符。Python要求代碼塊必須縮進,這樣你會很容易看出代碼塊在哪里結(jié)束,新的代碼塊又在哪里開始。而且,Python社區(qū)特別強調(diào)代碼的可讀性,因此已經(jīng)形成了一種文化,就是一定要書寫易于閱讀和理解的代碼。Python的這些特點使學習曲線更短并且更加平坦,與其他語言相比,使用Python進行數(shù)據(jù)處理可以更快也更容易上手。

Python適用于數(shù)據(jù)處理與分析的另一個顯著特點,是其具有大量的標準模塊、附加模塊以及函數(shù),可以非常方便地完成一般的數(shù)據(jù)處理與分析操作。內(nèi)建庫和標準庫中的模塊和函數(shù)是Python的標準配置,所以只要你下載并安裝了Python,就可以立即使用這些內(nèi)建的模塊和函數(shù)。在Python標準庫頁面(https://docs.python.org/3/library)中,你可以找到所有內(nèi)建模塊和標準模塊的介紹。Python附加模塊需要單獨下載并安裝,然后才能使用它們提供的附加功能。你可以在Python程序包索引頁面(https://pypi.python.org/pypi)詳細查看很多附加模塊的介紹。

標準庫中的模塊提供的功能包括讀取各種類型的文件(如文本文件、CSV、JSON、HTML、XML等),處理數(shù)值、字符串和日期型數(shù)據(jù),使用正則表達式進行模式匹配,解析CSV文件,計算基本的統(tǒng)計量,以及向各種類型的輸出文件和磁盤寫入數(shù)據(jù)。有用的附加模塊太多,無法一一介紹。本書要討論和使用的附加模塊如下所示。

xlrd xlwt

功能:解析與讀寫Microsoft Excel工作簿。

mysqlclient/MySQL-python/MySQLdb

功能:連接MySQL數(shù)據(jù)庫,在數(shù)據(jù)庫表上運行查詢。

pandas

功能:讀取各種類型的文件;管理、篩選和轉(zhuǎn)換數(shù)據(jù);聚合數(shù)據(jù)并計算基本統(tǒng)計量;創(chuàng)建各種類型的統(tǒng)計圖表。

statsmodels

功能:估計各種統(tǒng)計模型,包括線性回歸模型、廣義線性模型和分類模型。

scikit-learn

功能:估計機器學習統(tǒng)計模型,包括回歸、分類和聚類,以及執(zhí)行數(shù)據(jù)處理、維度歸約和交叉驗證。

如果你是編程新手,并且正在尋找一門可以使數(shù)據(jù)處理與分析任務(wù)自動化和規(guī)模化的編程語言,那么Python就是理想的選擇。Python對于空白字符和縮進的強調(diào)使代碼更易于閱讀和理解,因而和其他語言相比,它的學習曲線沒有那么陡峭。Python的內(nèi)建庫和附加庫可以方便地完成許多一般的數(shù)據(jù)處理和分析操作,讓你可以輕松地一站式完成數(shù)據(jù)處理與分析任務(wù)。

基礎(chǔ)Python和pandas

pandas是Python的一個功能強大的附加模塊,提供對數(shù)據(jù)進行讀/寫、組合、轉(zhuǎn)換和管理的功能,同時還可以計算統(tǒng)計量并創(chuàng)建統(tǒng)計圖表。在完成數(shù)據(jù)處理任務(wù)時,使用pandas提供的功能可以大大減輕你的編碼工作量。這個模塊深受數(shù)據(jù)分析師和其他Python使用者青睞,因為它的功能實用且強大,運行速度快,使用簡單,能夠減少完成任務(wù)所需的代碼量。正因為pandas功能強大且深受歡迎,所以本書將向你介紹它。本書在第2章和第3章中提供pandas版的Python腳本,在第6章中介紹如何使用pandas創(chuàng)建統(tǒng)計圖表,在第7章中演示如何通過pandas計算各種統(tǒng)計量。我建議你學習一下Wes McKinney的著作《利用Python進行數(shù)據(jù)分析》Wes McKinney是pandas模塊最初的開發(fā)者,他的這本書是學習pandas、NumPy和IPython的絕好教材,如果你想擴展一下使用Python進行數(shù)據(jù)分析的知識,這些是你應(yīng)該學習的附加模塊。

同時,如果你是編程新手,我還建議你學習一下基本的編程技能。一旦具有了編程技能,你就可以擴展自己解決問題的能力。你可以將復(fù)雜的問題分解成幾個較小的問題,分別解決,然后將它們組合起來解決更大的問題。你還可以培養(yǎng)出一種直覺,去決定使用哪種數(shù)據(jù)結(jié)構(gòu)和算法來有效且高效地解決各種問題。此外,你還會遇到像pandas這樣的附加模塊無法解決或者無法以你需要的方式解決的問題。在這種情況下,如果你沒有基本的編程技能,就會束手無策。相反,如果你具有了編程技能,就可以創(chuàng)建所需功能,從而獨立解決問題。能夠獨立解決編程問題是非常令人振奮的,并能極大提升個人能力。

因為本書是面向編程新手的,所以我會將重點放在基礎(chǔ)的、通用的編程技能上。比如,第1章介紹數(shù)據(jù)類型、數(shù)據(jù)容器、控制流、函數(shù)、if-else邏輯和文件讀寫等基本概念。此外,在第2章和第3章中,每種腳本都提供兩個版本的實現(xiàn)方式:基礎(chǔ)Python版和pandas版。在每個案例中,我會首先討論基礎(chǔ)Python版的實現(xiàn),讓你學會獨立編碼解決問題,然后再給出pandas版的實現(xiàn)。我希望你能夠從基礎(chǔ)Python版中學會基本的編程技能,這樣在使用pandas版時,你就能夠更加深刻地理解pandas簡化了的概念和操作。

Anaconda Python

當開始使用Python時,有很多程序可以用來編寫代碼。例如,如果你從Python.org下載了Python,在安裝完成之后,就會得到一個具有圖形用戶界面(GUI)的文本編輯器,它叫作Idle。另外,你可以下載IPython Notebook,在一種基于Web的交互式環(huán)境下編寫代碼。如果你在macOS系統(tǒng)下工作,或者在Windows系統(tǒng)上安裝了Cygwin,那么就可以在終端窗口中使用Nano、Vim或Emacs等內(nèi)置文本編輯器編寫代碼。如果你已經(jīng)熟悉了上面的任意一種程序,那么就可以隨意使用它來處理本書中的示例代碼。

但是,這里我要介紹如何從Continuum Analytics下載并安裝免費的Anaconda Python發(fā)行版,因為與其他版本相比,它對于編程新手來說具有很多優(yōu)點,而且同樣適合編程老手! Anaconda Python最主要的優(yōu)點是,它會預(yù)先安裝幾百個最流行的Python附加模塊,所以你無需一個一個地安裝這些模塊以及它們的依賴模塊。舉例來說,本書要使用的所有附加模塊在Anaconda Python中都預(yù)先安裝好了。

另一個優(yōu)點是,它同時提供了一個名叫Spyder的集成開發(fā)環(huán)境(IDE)。Spyder具有非常方便實用的界面,供你編寫、運行和調(diào)試代碼,還可以安裝程序包和啟動IPython Notebook。另外,它還具有很多美妙的功能,比如在線文檔鏈接、語法著色、鍵盤快捷方式和錯誤提示。

Anaconda Python還有一個優(yōu)點是跨平臺性——具有Linux、Mac和Windows 3個版本。所以,如果你在Windows系統(tǒng)下熟悉了它的用法,在轉(zhuǎn)到Mac系統(tǒng)時,仍然可以使用同樣熟悉的界面。

如果你已經(jīng)熟悉了Python和所有可用的附加程序包,那么在使用Anaconda Python時需要注意一點,就是安裝附加程序包時的語法有些差別。在Anaconda Python中,你需要使用conda install命令。舉例來說,要安裝附加程序包argparse,你應(yīng)該輸入conda intall argparse。這種語法與通常的pip install是不同的。(如果你從Python.org下載并安裝了Python,那么安裝argparse包應(yīng)該使用python -m pip install argparse。)Anaconda Python也允許你使用pip install語法,所以實際上可以使用任何一種方式,但是當你學習如何安裝附加程序包時,應(yīng)該知道這一點微小的區(qū)別。

安裝Anaconda Python(Windows或Mac)

要安裝Anaconda Python,需遵循以下步驟。

(1)訪問http://continuum.io/downloads(網(wǎng)站會自動檢測出你的操作系統(tǒng),即Windows或Mac)。

(2)選擇Windows 64-bit Python 3.5 Graphical Installer(如果你使用Windows)或者Mac OS X 64-bit Python 3.5 Graphical Installer(如果你使用Mac)。

(3)雙擊已下載的.exe文件(Windows系統(tǒng))或.pkg文件(Mac系統(tǒng))。

(4)按照安裝程序的指示操作。

文本編輯器

盡管本書中會使用Anaconda Python和Spyder,但是熟悉一下其他可用于編寫Python代碼的文本編輯器還是有意義的。例如,如果你不想使用Anaconda Python,可以簡單地從Python.org下載安裝Python,然后使用像Notepad(Windows系統(tǒng))和TextEdit(macOS系統(tǒng))這樣的文本編輯器。要使用TextEdit編寫Python腳本,你需要打開TextEdit,將TextEdit → Preferences下面的單選按鈕從“Rich text”改為“Plain text”,這樣新文件就會以普通文本方式打開。然后你就可以使用擴展名.py保存文件了。

使用文本編輯器編寫代碼的好處是,它已經(jīng)安裝在你的計算機上了,所以你不用擔心如何下載和安裝一個新的軟件。大多數(shù)臺式機和筆記本電腦在出廠時都帶有文本編輯器,如果你不得不使用一臺沒有Spyder或終端窗口的計算機,那就使用其自帶的任意文本編輯器快速開始工作吧。

盡管完全可以使用像Notepad和TextEdit這樣的文本編輯器編寫Python代碼,效率也很高,但是你還可以下載其他免費的文本編輯器,因為它們提供了一些額外的功能,包括代碼高亮顯示、制表符長度調(diào)整,以及多行縮進與減少縮進。這些功能(特別是代碼高亮顯示和多行縮進與減少縮進)非常有用,尤其是在你學習如何編寫和調(diào)試代碼時。

下面是一個提供這些功能的免費文本編輯器的不完全列表:

Notepad++(http://notepad-plus-plus.org,Windows)

Sublime Text(http://www.sublimetext.com,Windows和Mac)

jEdit(http://www.jedit.org,Windows和Mac)

TextWrangler(http://www.barebones.com/products/textwrangler,Mac)

再說一遍,本書使用Anaconda Python和Spyder,但是你可以隨意使用一種文本編輯器處理示例代碼。如果你下載了某種文本編輯器,請在網(wǎng)上查一下可以用來進行多行縮進與減少縮進的按鍵組合。當開始試著調(diào)試代碼塊時,這會使你輕松許多。

下載本書資料

本書中的所有Python腳本、輸入文件和輸出文件都可以在這個網(wǎng)址找到:https://github.com/cbrownley/foundations-for-analytics-with-python

可以將整個文件夾下載到你的計算機上,不過點擊文件名然后將腳本復(fù)制粘貼到你的文本編輯器中會更簡單。(GitHub是進行代碼分享與協(xié)作的一個網(wǎng)站,非常適合跟蹤項目的不同版本并管理協(xié)作過程,但是它的學習曲線相當陡峭。當你準備開始分享自己的代碼和提交對他人代碼的改進時,可以參考一下Chad Thompson的教程Learning Githttp://shop.oreilly.com/product/110000769.do,Infinite Skills)。

各章內(nèi)容簡介

第1章 Python基礎(chǔ)

這一章介紹如何創(chuàng)建和運行Python腳本。該章的重點在于Python的基本語法和元素,你需要了解它們,才能學習后面的章節(jié)。例如,討論像數(shù)值和字符串這樣的基本數(shù)據(jù)類型,以及如何對它們進行操作;介紹主要的數(shù)據(jù)容器(列表、元組和字典),以及使用它們存儲和操作數(shù)據(jù)的方法;介紹如何處理日期型數(shù)據(jù),因為商業(yè)分析中經(jīng)常出現(xiàn)日期。另外,還會討論一些編程概念,比如控制流、函數(shù)和異常,它們是在編碼中體現(xiàn)業(yè)務(wù)邏輯以及優(yōu)雅地進行錯誤處理的重要元素。最后將介紹如何使計算機讀入一個和多個文本文件,并且寫回到CSV格式的輸出文件中。這些技術(shù)對于訪問輸入數(shù)據(jù)和保存特定的輸出數(shù)據(jù)都是非常重要的,后續(xù)章節(jié)會更深入地討論這些問題。

第2章 CSV文件

這一章介紹如何讀寫CSV文件。首先介紹在不使用Python內(nèi)置的csv模塊情況下“手動”解析CSV格式的輸入文件的一個例子。隨后說明這種解析方法的潛在問題,并通過一個示例說明使用Python的csv模塊解析CSV文件如何能避免這些問題。然后討論如何使用3種不同類型的條件邏輯從輸入文件中篩選出特定的行,將它們寫入CSV格式的輸出文件。接著給出兩種不同的方法,以篩選出特定的列,并將它們寫入輸出文件。在介紹了如何讀取和解析單個CSV格式的輸入文件后,進一步討論如何讀取和處理多個CSV文件。這一節(jié)中的示例包括為每個輸入文件提供摘要信息,從多個輸入文件中連接數(shù)據(jù),以及為每個輸入文件計算基本的統(tǒng)計量。這一章最后將介紹兩個不太常用的過程示例,包括選擇一組連續(xù)的行和為數(shù)據(jù)集添加標題行。

第3章 Excel文件

這一章討論如何使用可下載的擴展模塊xlrd讀取Excel工作簿。首先介紹一個Excel工作簿示例(也就是說明工作簿中包含多少個工作表,每個工作表的名稱,每個工作表中行與列的數(shù)量)。因為Excel將日期保存為數(shù)值型數(shù)據(jù),所以下一節(jié)介紹如何使用一系列函數(shù)將日期格式化,以使它們顯示為日期形式而不是數(shù)值形式。然后,討論如何使用3種不同類型的條件邏輯從單個工作表中篩選出特定的行,再將它們寫入CSV格式的輸出文件。在此之后,介紹兩種不同的方式來篩選特定的列并寫入輸出文件。在介紹了如何讀取和解析單個工作表之后,進一步討論如何讀取和處理工作簿中所有的或者一部分工作表。這幾節(jié)中的示例程序展示了如何在工作表中篩選特定的行與列。在討論了如何讀取和分析單個工作簿中的任意數(shù)目的工作表之后,進一步討論如何讀取和處理多個工作簿。這一節(jié)中的示例程序包括為每個工作簿提供摘要信息,從多個工作簿中連接數(shù)據(jù),以及為每個工作簿計算基本的統(tǒng)計量。這一章最后將介紹兩個不太常用的過程示例,包括選擇一組連續(xù)的行和為數(shù)據(jù)集添加標題行。

第4章 數(shù)據(jù)庫

這一章討論如何在Python中執(zhí)行基本的數(shù)據(jù)庫操作。首先介紹如何使用Python內(nèi)建的sqlite3模塊,這樣你就不需要安裝任何額外的軟件了。示例程序說明了如何執(zhí)行最常用的數(shù)據(jù)庫操作,包括創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表,從CSV格式的輸入文件加載數(shù)據(jù)到數(shù)據(jù)庫中的表,使用CSV格式的輸入文件更新數(shù)據(jù)表中的記錄,以及查詢數(shù)據(jù)表。使用sqlite3模塊時,數(shù)據(jù)庫連接的細節(jié)和與MySQL、PostgreSQL和Oracle等其他數(shù)據(jù)庫系統(tǒng)連接有輕微的差別。為了說明這種差別,這一章的第二部分演示了如何同MySQL數(shù)據(jù)庫系統(tǒng)進行交互。如果你的計算機上沒有MySQL,那么需要先下載并安裝。然后,具體操作的示例程序與sqlite3示例相對照,也包括創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表,從CSV格式的輸入文件加載數(shù)據(jù)到數(shù)據(jù)庫中的表,使用CSV格式的輸入文件更新數(shù)據(jù)表中的記錄,查詢數(shù)據(jù)表,以及將查詢結(jié)果寫入CSV格式的輸出文件。這一章兩部分的示例合在一起,可以詳細又完整地說明如何使用Python執(zhí)行常用的數(shù)據(jù)庫操作。

第5章 應(yīng)用程序

這一章包含3個示例程序,演示了如何綜合使用前面幾章介紹的技術(shù)解決3個不同的問題,它們代表了一些常見的數(shù)據(jù)處理與分析任務(wù)。第一個應(yīng)用程序介紹了如何在大量的Excel與CSV文件中找到特定的記錄。可以想象,用計算機查詢記錄比手動查詢要高效得多,也有趣得多。打開、搜索和關(guān)閉大量文件絕對不是一件有趣的事情,文件的數(shù)量越多,完成任務(wù)的難度就越大。因為這個問題涉及搜索CSV和Excel文件,所以示例程序會使用第2章和第3章中介紹的很多內(nèi)容。

第二個應(yīng)用程序介紹如何將數(shù)據(jù)通過分組或“裝箱”劃分到一個唯一的類別,并且為每個類別計算統(tǒng)計量。具體的例子就是對一個記錄客戶服務(wù)包購買的CSV文件[記錄了客戶在什么時間購買了特定的服務(wù)包(也就是銅牌服務(wù)包、銀牌服務(wù)包和金牌服務(wù)包)]進行解析,然后將數(shù)據(jù)按客戶姓名和服務(wù)包進行組織,通過相加計算出每個客戶在每種服務(wù)包上花費的時間。這個示例使用了兩個內(nèi)建模塊,創(chuàng)建了一個函數(shù)并將數(shù)據(jù)存儲在字典中。字典在第1章中進行了介紹,但在第2章、第3章和第4章中都沒有使用過。這個程序還引入了一種新的技術(shù):記錄下你剛處理過的行和正在處理的行,然后根據(jù)這兩行的值計算出統(tǒng)計量。這兩種技術(shù)(通過字典來分組或裝箱數(shù)據(jù),以及記錄當前行和前一行)都非常強大,讓你能夠處理很多和時間相關(guān)的數(shù)據(jù)分析任務(wù)。

第三個應(yīng)用程序介紹如何解析文本文件,將數(shù)據(jù)分組或裝箱劃分類別,然后按類別計算統(tǒng)計量。具體的例子是解析MySQL錯誤日志文件,按照日期和錯誤信息組織數(shù)據(jù),然后計算出每種錯誤信息在每一天出現(xiàn)的次數(shù)。這個示例回顧了如何解析文本文件,這種技術(shù)在第1章中簡要介紹過。這個示例也展示了如何將信息分別存儲在列表和字典中,以用來創(chuàng)建輸出文件的標題行和數(shù)據(jù)行;它還可以幫你回憶一下通過基本字符串操作來解析文本文件的方法。同時,這也是使用嵌套字典來分組或裝箱數(shù)據(jù)以劃分類別的一個絕好示例。

第6章 圖與圖表

在這一章中,你要學習如何使用Python創(chuàng)建常用的統(tǒng)計圖和圖表。你將使用4個制圖庫:matplotlib、pandas、ggplot和seaborn。首先使用matplotlib,因為它歷史悠久、資料豐富(實際上,pandas和seaborn都是在matplotlib的基礎(chǔ)上開發(fā)出來的)。matplotlib一節(jié)介紹如何創(chuàng)建直方圖、條形圖、折線圖、散點圖和箱線圖。pandas一節(jié)討論使用pandas簡化語法來創(chuàng)建這些統(tǒng)計圖的幾種方式,并演示如何使用pandas創(chuàng)建統(tǒng)計圖。ggplot一節(jié)指出了這個庫與R和圖形語法在歷史上的聯(lián)系,并演示如何使用ggplot創(chuàng)建常用的統(tǒng)計圖。最后,seaborn一節(jié)討論如何創(chuàng)建標準統(tǒng)計圖,以及如何創(chuàng)建使用matplotlib難以創(chuàng)建的圖表。

第7章 描述性統(tǒng)計與建模

這一章討論如何生成標準摘要統(tǒng)計量,以及如何使用pandas和statsmodels包估計回歸模型與分類模型。pandas中有計算集中趨勢測度(例如:均值、中位數(shù)和眾數(shù))的函數(shù),也有計算分散程度(例如:方差和標準差)的函數(shù),還有進行數(shù)據(jù)分組的函數(shù)用于輕松計算這些統(tǒng)計量。statsmodels包中的函數(shù)可以估計多種類型的回歸和分類模型。這一章介紹了如何基于pandas數(shù)據(jù)框中的數(shù)據(jù)建立多元線性回歸和邏輯斯蒂分類模型,以及如何使用模型為新的輸入數(shù)據(jù)預(yù)測輸出值。

第8章 按計劃自動運行腳本

這一章介紹如何在Windows和macOS系統(tǒng)上安排腳本定期自動運行。在這一章之前,腳本都是通過命令行方式手動運行的。在調(diào)試腳本和臨時運行時,通過命令行手動運行腳本是非常方便的。但是,如果腳本需要定期運行(例如:每天、每周、每月或每個季度),或者需要定期運行很多腳本的話,手動運行就會非常麻煩。在Windows系統(tǒng)中,你可以創(chuàng)建任務(wù)計劃來定期自動運行腳本。在macOS系統(tǒng)中,你需要創(chuàng)建定時任務(wù),它可以實現(xiàn)同樣的功能。這一章用若干屏幕截圖展示了如何創(chuàng)建和運行任務(wù)計劃和定時任務(wù)。通過安排腳本定期運行,你就不會忘記運行腳本,而且能夠?qū)崿F(xiàn)比通過命令行手動運行腳本更強大的功能。

第9章 從這里啟航

最后一章介紹Python中其他的內(nèi)置和擴展模塊以及函數(shù),它們對于數(shù)據(jù)處理與數(shù)據(jù)分析任務(wù)也是非常重要的。這一章還介紹了其他的數(shù)據(jù)結(jié)構(gòu)。當你涉及本書之外的主題時,可能會遇到一些非常復(fù)雜的編程問題,而使用這些數(shù)據(jù)結(jié)構(gòu)可以幫助你高效地解決問題。內(nèi)置模塊與函數(shù)是與Python安裝程序捆綁在一起的,所以當你安裝了Python之后,立刻就可以使用它們了。這一章討論的內(nèi)置模塊包括collections、random、statistics、itertools和operator,內(nèi)置函數(shù)包括enumerate、filter、reduce和zip。擴展模塊沒有包括在Python安裝程序中,所以需要你單獨下載并安裝。這一章討論的擴展模塊包括NumPy、SciPy和Scikit-Learn;另外還簡單介紹了棧、隊列、樹和圖等其他數(shù)據(jù)結(jié)構(gòu),來幫助你更加快速和高效地存儲、處理和分析數(shù)據(jù)。

排版約定

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

黑體

表示新術(shù)語或重點強調(diào)的內(nèi)容。

等寬字體(constant width)

表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。

加粗等寬字體(constant width bold

表示應(yīng)該由用戶輸入的命令或其他文本。

等寬斜體(constant width italic

表示應(yīng)該由用戶輸入的值或根據(jù)上下文確定的值替換的文本。

該圖標表示提示或建議。

該圖標表示一般注記。

該圖標表示警告或警示。

使用示例代碼

本書的所有補充資料(虛擬機、數(shù)據(jù)、腳本、定制的命令行工具等)都可以在這個地址下載:https://github.com/cbrownley/foundations-for-analytics-with-python

本書是要幫你完成工作的。一般來說,如果本書提供了示例代碼,你可以把它用在你的程序或文檔中。除非你使用了很大一部分代碼,否則無需聯(lián)系我們獲得許可。比如,用本書的幾個代碼片段寫一個程序就無需獲得許可,銷售或分發(fā)O'Reilly圖書的示例光盤則需要獲得許可;引用本書中的示例代碼回答問題無需獲得許可,將書中大量的代碼放到你的產(chǎn)品文檔中則需要獲得許可。

我們很希望但并不強制要求你在引用本書內(nèi)容時加上引用說明。引用說明一般包括書名、作者、出版社和ISBN。比如:“Foundations for Analytics with Python by Clinton Brownley (O'Reilly).Copyright 2016 Clinton Brownley, 978-1-491-92253-8.”

如果你覺得自己對示例代碼的用法超出了上述許可的范圍,歡迎你通過permissions@oreilly.com與我們聯(lián)系。

Safari? Books Online

Safari Books Online是應(yīng)運而生的數(shù)字圖書館。它同時以圖書和視頻的形式出版世界頂級技術(shù)和商業(yè)作家的專業(yè)作品。

技術(shù)專家、軟件開發(fā)人員、Web設(shè)計師、商務(wù)人士和創(chuàng)意專家等,在開展調(diào)研、解決問題、學習和認證培訓時,都將Safari Books Online視作獲取資料的首選渠道。

對于組織團體、政府機構(gòu)和個人,Safari Books Online提供各種產(chǎn)品組合和靈活的定價策略。用戶可通過一個功能完備的數(shù)據(jù)庫檢索系統(tǒng)訪問O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、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以及其他幾十家出版社的上千種圖書、培訓視頻和正式出版之前的書稿。要了解Safari Books Online的更多信息,我們網(wǎng)上見。

聯(lián)系我們

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

美國:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中國:

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

奧萊利技術(shù)咨詢(北京)有限公司

對于本書的評論和技術(shù)性問題,請發(fā)送電子郵件到:bookquestions@oreilly.com

要了解更多O'Reilly圖書、培訓課程、會議和新聞的信息,請訪問以下網(wǎng)站:

http://www.oreilly.com

我們在Facebook的地址如下:http://facebook.com/oreilly

請關(guān)注我們的Twitter動態(tài):http://twitter.com/oreillymedia

我們的YouTube視頻地址如下:http://www.youtube.com/oreillymedia

本書作者的Twitter賬號為:@ClintonBrownley

致謝

我寫這本書的目的是幫助那些沒有或只有一點編程經(jīng)驗的人,這些人和幾年前的我很相似,我要幫助他們學習一些基本的編程技能,讓他們因為能夠完成數(shù)據(jù)處理和數(shù)據(jù)分析項目而欣喜若狂。在學習編程之前,這些項目可能相當耗時或者根本不可能完成。

如果不是很多人對我進行教導(dǎo)、指引和支持,我根本就不可能完成這本書。首先,我要感謝我的妻子Anushka,她花了很多時間來教我基本的編程概念。她教我如何將復(fù)雜的編程任務(wù)分解為小任務(wù),然后通過偽代碼組織起來;教我如何有效地使用列表、字典和條件邏輯;還教我如何寫出可擴展的、可伸縮的代碼。開始時,她讓我集中精力完成編程任務(wù),不用太在乎代碼是否優(yōu)雅和高效。當我逐漸熟練之后,她總是會檢查我的腳本并提出改進意見。在我寫作本書期間,她一直這樣支持著我。她檢查了所有的腳本并提出了建議,使得腳本更加短小精悍、清晰易讀,并且更加高效。她還做了大量的文字檢查工作,并提出了增刪和修改建議,以使得指令和解釋更易于閱讀和理解。在我寫作的幾個月中,除了這些教導(dǎo)和建議,她在其他方面也給了我極大的幫助。當我在夜里和周末寫作時,她負責照顧我們的女兒;當我在寫作中遇到困難時,她積極地鼓勵我。沒有她的指示、引導(dǎo)、批評、支持和始終不渝的愛,這本書根本不可能完成。

其次,我要感謝我的朋友和同事,他們鼓勵、支持并幫助我進行編程訓練。Heather Marquez和Ashish Kelkar給予了我極大的支持,他們幫助我參加培訓課程以及那些能增強和擴展編程技能的項目。當我告訴他們我編寫了一套培訓材料,想開設(shè)一門10天的培訓課程之后,他們幫助我成功地實現(xiàn)了計劃。Rajiv Krishnamurthy也對我的學習幫助有加,一連幾個星期,他為我提供各種各樣的編程練習,并且每周和我碰頭,討論、評判和改進我的解決方案。Vikram Rao審校了本書的線性回歸和邏輯斯蒂回歸部分,并針對如何說明回歸模型的關(guān)鍵點提出了非常好的建議。我還要感謝其他很多同事,他們與我一起做項目,幫助我理解和掌握技術(shù),與我共享代碼,檢查我的代碼并提出改進意見,還為我提供有用的信息資源。

然后,我要感謝我的3位Python培訓導(dǎo)師:MarilynDavis、Jeremy Osborne和Jonathan Rocher。Marilyn和Jeremy的課程講授基本編程概念和Python實現(xiàn)。Jonathan的課程講授Python科學棧,包括numpy、scipy、matplotlib、seaborn、pandas和scikit-learn。我真的非常喜歡他們的課程,他們每個人都擴展和豐富了我對基本編程概念和其Python實現(xiàn)的理解。

我還要感謝為這本書提供支持的O'Reilly Media的同仁。在本書的寫作和編輯過程中,Timothy McGovern一直是一位熱情的伙伴。他審校了全部書稿,對本書的主題和各章內(nèi)容都提出了極具價值的建議。他還對具體章節(jié)的文字、布局和格式提出了修改意見,使得它們更加易于閱讀和理解。感謝他的同事Marie Beaugureau和Rita Scordamalgia,是她們與我一起完成了本書的出版過程并提供了市場資源。感謝ColleenCole和Jasmine Kwityn編輯了所有章節(jié)并將整本書制作得如此精美。最后,感謝Ted Kwartler審校了本書的第一稿,并提出了有用的改善建議。他的意見促使我添加了可視化和統(tǒng)計分析章節(jié),為每個基礎(chǔ)Python腳本配備pandas版,并刪除了一些內(nèi)容和示例來減少重復(fù)以增強可讀性。得益于他的深思熟慮,本書的內(nèi)容才能更加豐富而全面。

電子書

掃描如下二維碼,即可購買本書電子版。

主站蜘蛛池模板: 凤山市| 高邮市| 铜梁县| 炉霍县| 融水| 昆山市| 安溪县| 竹溪县| 石阡县| 和静县| 甘南县| 新龙县| 海南省| 双流县| 忻城县| 余姚市| 皋兰县| 潼南县| 唐河县| 松溪县| 巍山| 监利县| 合作市| 仙居县| 鞍山市| 于田县| 三台县| 阜康市| 阿拉善右旗| 牟定县| 夏邑县| 西贡区| 梓潼县| 班玛县| 城步| 天等县| 葵青区| 司法| 东丽区| 锡林郭勒盟| 大同市|