《利用Python進(jìn)行數(shù)據(jù)分析·第3版》中文新版上市橙依,Pandas更新為1.4朵逝,更新了許多內(nèi)容腐螟。時(shí)隔5年栏豺,《利用Python進(jìn)行數(shù)據(jù)分析》在2022年9月20日推出了最新的第3版翔怎。在新版“Python數(shù)分”中窃诉,Wes親自講解了最新的1.4版的Pandas。這次姓惑,很高興能受邀翻譯第3版《利用Python進(jìn)行數(shù)據(jù)分析》褐奴,圓夢(mèng)了。
勘誤
第1章 準(zhǔn)備環(huán)境
第2章 Python語法基礎(chǔ)
這5年中于毙,數(shù)據(jù)分析又發(fā)生了很大的變化敦冬。尤其是眼見著OpenAI的GPT橫掃技術(shù)領(lǐng)域,讓以往一切模型方法看起來都像“小孩子的游戲”一樣唯沮。大模型成為了海量信息和有效信息之間的新橋梁脖旱,而上一座橋梁是以谷歌的PageRank為代表的搜索算法。幸好介蛉,因?yàn)閿?shù)據(jù)分析是直接跟數(shù)據(jù)打交道萌庆,并且要根據(jù)數(shù)據(jù)生成決策,這方面是人的強(qiáng)項(xiàng)币旧,暫時(shí)不會(huì)受到影響践险。
相比GPT,pandas本身也在快速進(jìn)步著吹菱。實(shí)際上巍虫,就在二月中旬,pandas發(fā)布了2.0大版本鳍刷,引入了PyArrow占遥、優(yōu)化了內(nèi)存計(jì)算方法、優(yōu)化了索引結(jié)構(gòu)输瓜,以后用Pandas進(jìn)行機(jī)器學(xué)習(xí)和大數(shù)據(jù)分析工作就更加便捷了瓦胎。
第三版多了41頁內(nèi)容,pandas升級(jí)為1.4.0尤揣、Python升級(jí)為3.10搔啊。第三版最大的變化是緊貼pandas升級(jí),主要是新增了方法和特性的內(nèi)容芹缔。另外坯癣,第三版有作者的在線開源電子版了,可以從GitHub地址和Gitee地址下載本書代碼最欠。
第三版目錄略有調(diào)整示罗,不如第二版和第一版的變化大:
- 第4章NumPy基礎(chǔ)新增了生成偽隨機(jī)數(shù);
- 第7章數(shù)據(jù)清洗新增了擴(kuò)展數(shù)據(jù)類型和分類數(shù)據(jù)芝硬,實(shí)際是把第二版中第12章的內(nèi)容放到新版第7章里了蚜点;
- 第11章時(shí)間序列新增了分組時(shí)間重采樣。
曾經(jīng)不止一次聽別人抱怨拌阴,pandas的知識(shí)點(diǎn)分散绍绘、零碎、不便于記憶迟赃。在細(xì)節(jié)上陪拘,作者這次在新版中摒棄了許多容易造成記憶混亂的用法。比如纤壁,用axis = "columns"
替代axis = 1
左刽,簡(jiǎn)寫方式破壞了代碼的可讀性,作者修改了許多類似的編程細(xì)節(jié)酌媒。新版對(duì)初學(xué)者更為友好了欠痴!
《利用Python進(jìn)行數(shù)據(jù)分析》的第1版是2012年11月出版的,第2版出版于2017年11月秒咨,第3版出版于2022年9月喇辽。正好是每五年更新一個(gè)版本。
回想起來,喬布斯在2007年推出了iPhone陡厘,重新發(fā)明了手機(jī)抽米,正式開啟了移動(dòng)互聯(lián)網(wǎng)時(shí)代。不同于傳統(tǒng)互聯(lián)網(wǎng)雏亚,移動(dòng)互聯(lián)網(wǎng)進(jìn)而催生了更大的數(shù)據(jù)量缨硝。2010年至2020年是移動(dòng)互聯(lián)網(wǎng)高速發(fā)展的十年,數(shù)據(jù)量呈指數(shù)級(jí)增長(zhǎng)罢低。
移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)的特點(diǎn)在于真實(shí)性查辩。傳統(tǒng)數(shù)據(jù)不涉及人和地點(diǎn),而當(dāng)拿著手機(jī)的用戶行走在街道上网持,在各種商店中進(jìn)行支付宜岛,瀏覽App中的應(yīng)用,手機(jī)制造并收集了大量的數(shù)據(jù)功舀。而這些數(shù)據(jù)不斷地被互聯(lián)網(wǎng)公司傳輸萍倡、存儲(chǔ)起來,基于這些用戶數(shù)據(jù)辟汰,各大公司又推出了新的業(yè)務(wù)列敲,進(jìn)而又能收集更多的數(shù)據(jù)阱佛。這是一個(gè)滾雪球的過程。
Python的崛起和數(shù)據(jù)量爆發(fā)密不可分戴而。作為一門解釋性高級(jí)語言凑术,雖然Python的計(jì)算速度慢,但非常擅長(zhǎng)網(wǎng)絡(luò)IO處理所意,尤其擅長(zhǎng)編寫網(wǎng)絡(luò)爬蟲淮逊。再加Python入門非常容易,隨著移動(dòng)互聯(lián)網(wǎng)用戶逐漸增多扶踊,從事不同崗位的人都能輕松為Python編寫各種應(yīng)用庫(kù)泄鹏,Python的生態(tài)變得非常強(qiáng)大。如此一來秧耗,不僅用Python能解決數(shù)據(jù)源的問題备籽,還能用于數(shù)據(jù)處理和人工智能。從2018年開始绣版,Python的TIOBE指數(shù)不斷提升胶台,現(xiàn)在已成為排名最高的編程語言。
《利用Python進(jìn)行數(shù)據(jù)分析》這本書的成功絕非偶然杂抽≌┗#《利用Python進(jìn)行數(shù)據(jù)分析》一書的主角是pandas。從技術(shù)上講缩麸,Pandas承接了原始數(shù)據(jù)铸磅,將其規(guī)整、清洗后成為高質(zhì)量的結(jié)構(gòu)化數(shù)據(jù)杭朱,再將高質(zhì)量的數(shù)據(jù)進(jìn)行可視化或訓(xùn)練模型阅仔。從業(yè)務(wù)上講,Pandas上承爬蟲弧械,下啟機(jī)器學(xué)習(xí)八酒,Pandas的兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu)Series和DataFrame已成為機(jī)器學(xué)習(xí)中重要的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。
《利用Python進(jìn)行數(shù)據(jù)分析》這本書的寫作質(zhì)量也是很高的刃唐。得益于本書作者也是Pandas庫(kù)的創(chuàng)作者羞迷,知識(shí)點(diǎn)的組織很清晰。本書在講解知識(shí)點(diǎn)時(shí)画饥,總是用一段接一段并不是太長(zhǎng)的文字進(jìn)行講解衔瓮,文字中間穿插代碼、注意事項(xiàng)抖甘、圖片和表格热鞍,所以讀起來一點(diǎn)也不枯燥。不僅如此,書的字里行間還能感受到作者對(duì)技術(shù)和開源的熱愛薇宠。
掌握Pandas偷办,能為許多工作奠定基礎(chǔ),比如商業(yè)分析昼接、金融量化爽篷、機(jī)器學(xué)習(xí)悴晰。另外慢睡,Pandas對(duì)學(xué)校和科研單位的研究者也非常有幫助。
本書第一章主要是進(jìn)行一些準(zhǔn)備工作铡溪,講解為什么選擇Python進(jìn)行數(shù)據(jù)分析(理由)漂辐、分析的是什么數(shù)據(jù)(素材)、數(shù)據(jù)分析中重要的庫(kù)(工具一)棕硫、如何配置開發(fā)環(huán)境(工具二)髓涯。閱讀第一章,相信就算是剛剛接觸Python的讀者也肯定能順利入門哈扮。
結(jié)構(gòu)化數(shù)據(jù)
我們?cè)谶M(jìn)行數(shù)據(jù)分析時(shí)纬纪,用到的最主要的是結(jié)構(gòu)化數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)通常是如下數(shù)據(jù):
- 表格型或電子表格型數(shù)據(jù)滑肉,其中各列可能是不同的類型(字符串包各、數(shù)值、日期等)靶庙。比如保存在關(guān)系型數(shù)據(jù)庫(kù)中或以制表符/逗號(hào)為分隔符的文本文件中的那些數(shù)據(jù)问畅。
- 多維數(shù)組(矩陣)。
- 通過關(guān)鍵列(對(duì)于SQL用戶而言六荒,就是主鍵和外鍵)相互聯(lián)系的多張表护姆。
- 平均或不平均間隔的時(shí)間序列。
大部分?jǐn)?shù)據(jù)集都能被轉(zhuǎn)化為更加適合分析和建模的結(jié)構(gòu)化形式掏击,也可以將數(shù)據(jù)集的特征提取為某種結(jié)構(gòu)化形式卵皂。例如,一組新聞文章可以被處理為一張?jiān)~頻表砚亭,而這張?jiān)~頻表就可以用于情感分析灯变。
使用Python進(jìn)行數(shù)據(jù)分析的理由
Python有非常活躍而強(qiáng)大的社區(qū):Python誕生于1991年钠惩,時(shí)至今日柒凉,Python孕育了一個(gè)龐大而活躍的科學(xué)計(jì)算和數(shù)據(jù)分析社區(qū),成長(zhǎng)為學(xué)界和工業(yè)界中數(shù)據(jù)科學(xué)篓跛、機(jī)器學(xué)習(xí)膝捞、軟件開發(fā)最重要的語言之一。
Python非常適合作為膠水語言:Python能夠輕松集成C、C++以及Fortran代碼蔬咬,除此之外鲤遥,將Python與Go、Rust結(jié)合也很不錯(cuò)林艘,現(xiàn)在有許多人使用Rust為Python編寫插件盖奈。
Python“贏者通吃”:Python不僅適用于研究和構(gòu)建原型,同樣也適用于構(gòu)建生產(chǎn)系統(tǒng)钢坦。所以,用不著再維護(hù)兩套開發(fā)環(huán)境了啥酱,可以大大提高企業(yè)效率镶殷。
Python的劣勢(shì)
Python是解釋型編程語言绘趋,因此比編譯型語言(比如Java和C++)慢得多滓走。
Python不適合高并發(fā)项秉、多線程绣溜,因?yàn)榇嬖谌纸忉屍麈i(Global Interpreter Lock岁诉,GIL)锚沸。
Python數(shù)據(jù)分析中重要的庫(kù)
NumPy
NumPy,是Numerical Python(數(shù)值Python)的簡(jiǎn)稱涕癣,它提供了多種數(shù)據(jù)結(jié)構(gòu)哗蜈、算法以及大部分涉及Python數(shù)值計(jì)算所需的接口。NumPy提供了以下功能:
- 快速、高效的多維數(shù)組對(duì)象ndarray距潘。
- 用于對(duì)數(shù)組執(zhí)行元素級(jí)計(jì)算以及直接對(duì)數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算的函數(shù)炼列。
- 用于讀寫硬盤上基于數(shù)組的數(shù)據(jù)集的工具。
- 線性代數(shù)運(yùn)算音比、傅里葉變換俭尖,以及隨機(jī)數(shù)生成。
- 成熟的C API洞翩, 用于Python插件和原生C稽犁、C++、Fortran代碼存取NumPy的數(shù)據(jù)結(jié)構(gòu)和計(jì)算工具菱农。
NumPy非常適合作為數(shù)據(jù)容器缭付。對(duì)于數(shù)值型數(shù)據(jù),NumPy數(shù)組在存儲(chǔ)和處理數(shù)據(jù)時(shí)要比內(nèi)置的Python數(shù)據(jù)結(jié)構(gòu)高效得多循未。此外,由底層語言(比如C和Fortran)編寫的庫(kù)可以直接操作NumPy數(shù)組中的數(shù)據(jù)秫舌,無需將數(shù)據(jù)復(fù)制到其他內(nèi)存中后再操作的妖。因此,許多Python的數(shù)值計(jì)算工具要么使用NumPy數(shù)組作為主要的數(shù)據(jù)結(jié)構(gòu)足陨,要么可以與NumPy進(jìn)行無縫交互操作嫂粟。
pandas
pandas的作者就是本書作者Wes McKinney。
pandas兼具NumPy的高性能數(shù)組計(jì)算能力以及表格和關(guān)系型數(shù)據(jù)庫(kù)(例如SQL)的靈活數(shù)據(jù)操作功能墨缘,提供了便捷的索引功能星虹,可以完成重塑、切片镊讼、切塊宽涌、連接和選取數(shù)據(jù)子集等操作。pandas具有如下功能:
- 帶有標(biāo)簽軸的數(shù)據(jù)結(jié)構(gòu)蝶棋,支持自動(dòng)或清晰的數(shù)據(jù)對(duì)齊卸亮。以防止由于數(shù)據(jù)未對(duì)齊,以及處理不同數(shù)據(jù)源且不同索引的數(shù)據(jù)玩裙,造成的常見錯(cuò)誤兼贸。
- 集成時(shí)間序列功能。
- 用于同時(shí)處理時(shí)間序列數(shù)據(jù)和非時(shí)間序列數(shù)據(jù)的統(tǒng)一數(shù)據(jù)結(jié)構(gòu)吃溅。
- 算術(shù)運(yùn)算和規(guī)約[ 譯者注:規(guī)約是計(jì)算機(jī)科學(xué)中降低計(jì)算復(fù)雜度的方法統(tǒng)稱溶诞。]可以保存元數(shù)據(jù)。
- 靈活處理缺失數(shù)據(jù)决侈。
- 合并和其他流行數(shù)據(jù)庫(kù)(例如基于SQL的數(shù)據(jù)庫(kù))的關(guān)系型操作螺垢。
matplotlib
Matplotlib是最流行的用于繪制圖表和其他二維數(shù)據(jù)可視化的Python庫(kù)。
IPython和Jupyter
IPython是交互性的Python編程終端。IPython可以方便地訪問系統(tǒng)的shell和文件系統(tǒng)甩苛,在許多場(chǎng)景中就無需在終端窗口和Python會(huì)話中來回切換蹂楣。
Jupyter是一個(gè)更多語言交互計(jì)算工具,支持40多種編程語言讯蒲。IPython現(xiàn)在可以作為Jupyter使用Python的內(nèi)核(一種編程語言模式)痊土。Jupyter notebook還可以編寫Markdown和HTML文檔。
SciPy
SciPy是專門解決科學(xué)計(jì)算中多種基本問題的包的集合墨林。以下是其中的一些模塊:
scipy.integrate
:數(shù)值積分例程和微分方程求解器赁酝。
scipy.linalg
:擴(kuò)展了由numpy.linalg提供的線性代數(shù)例程和矩陣分解功能。
scipy.optimize
:函數(shù)優(yōu)化器(最小化器)以及求根算法旭等。
scipy.signal
:信號(hào)處理工具酌呆。
scipy.sparse
:稀疏矩陣和稀疏線性系統(tǒng)求解器。
scipy.special
:SPECFUN的封裝器搔耕,SPECFUN是一個(gè)實(shí)現(xiàn)了許多常用數(shù)學(xué)函數(shù)(例如gamma函數(shù))的FORTRAN庫(kù)隙袁。
scipy.stats
:標(biāo)準(zhǔn)連續(xù)和離散概率分布(密度函數(shù)、采樣器弃榨、連續(xù)分布函數(shù))菩收、各種統(tǒng)計(jì)檢驗(yàn)方法,以及各類描述性統(tǒng)計(jì)鲸睛。
scikit-learn
scikit-learn是一個(gè)通用的機(jī)器學(xué)習(xí)工具包娜饵,它包括以下子模塊:
- 分類:SVM、最近鄰官辈、隨機(jī)森林箱舞、邏輯回歸等。
- 回歸:Lasso拳亿、嶺回歸等晴股。
- 聚類:k-means、譜聚類等风瘦。
- 降維:PCA队魏、特征選擇、矩陣分解等万搔。
- 模型選擇:網(wǎng)格搜索胡桨、交叉驗(yàn)證、指標(biāo)矩陣瞬雹。
- 預(yù)處理:特征提取昧谊、正態(tài)化。
statsmodels
statsmodels是一個(gè)統(tǒng)計(jì)分析包酗捌,起源于斯坦福大學(xué)統(tǒng)計(jì)學(xué)教授Jonathan Taylor呢诬,他設(shè)計(jì)了多種流行于R語言的回歸分析模型涌哲。Skipper Seabold和Josef Perktold在2010年正式創(chuàng)建了新的statsmodels項(xiàng)目,隨后匯聚了大量的使用者和貢獻(xiàn)者尚镰。受到R語言公式系統(tǒng)的啟發(fā)阀圾,Nathaniel Smith開發(fā)了Patsy項(xiàng)目,提供了statsmodels的公式或模型的規(guī)范框架狗唉。
與scikit-learn相比初烘,statsmodels包含經(jīng)典統(tǒng)計(jì)學(xué)(主要是頻度)和計(jì)量經(jīng)濟(jì)學(xué)的算法。它包括如下子模塊:
- 回歸模型:線性回歸分俯,廣義線性模型肾筐,魯棒線性模型,線性混合效應(yīng)模型等缸剪。
- 方差分析(Analysis of variance吗铐,ANOVA)。
- 時(shí)間序列分析:AR杏节,ARMA唬渗,ARIMA,VAR等模型拢锹。
- 非參數(shù)方法: 核密度估計(jì)谣妻,核回歸。
- 統(tǒng)計(jì)模型結(jié)果可視化卒稳。
statsmodels更關(guān)注于統(tǒng)計(jì)推斷,提供不確定性估計(jì)和參數(shù)p值參數(shù)檢驗(yàn)他巨。相反的充坑,scikit-learn更注重預(yù)測(cè)。
準(zhǔn)備開發(fā)環(huán)境
在Windows上安裝Miniconda
從Conda網(wǎng)站下載Python最新版本的Miniconda安裝包染突。根據(jù)提示安裝即可捻爷。
安裝好之后,在終端輸入python
命令份企,可以看到如下相似的輸出也榄,就說明安裝正確了:
(base) C:\Users\Wes>python
Python 3.9 [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
要退出Python命令行,輸入命令exit()
后按下回車鍵司志。
GNU/Linux
還是從Miniconda的下載頁找到下載鏈接:
Linux上的安裝文件是sh腳本甜紫,在Linux上下載腳本的命令是:
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
下載下來之后,再使用如下命令進(jìn)行安裝:
sh Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
之后骂远,系統(tǒng)會(huì)詢問用戶在哪里放置Miniconda的文件囚霸。推薦將文件安裝到默認(rèn)的主目錄,例如/home/$USER/miniconda
($USER
是用戶名)激才。
Miniconda安裝包會(huì)詢問用戶是否愿意修改命令行腳本拓型,以自動(dòng)激活Miniconda额嘿。為了以后方便使用,推薦用戶這么做(選擇yes
)劣挫。
完成這些安裝步驟后册养,打開一個(gè)新的終端窗口,輸入python
命令压固,確認(rèn)安裝的是最新的Miniconda:
(base) $ python
Python 3.9 | (main) [GCC 10.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
要退出Python命令行球拦,輸入exit()
后按下回車鍵,或按快捷鍵Ctrl-D邓夕。
在macOS上安裝Miniconda
在蘋果電腦上安裝Miniconda也比較類似刘莹,就是需要注意根據(jù)處理器芯片選擇不同的安裝包:
我的電腦是因特爾芯片,下載如下腳本:
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-MacOSX-x86_64.sh
執(zhí)行腳本焚刚,進(jìn)行安裝:
sh Miniconda3-py310_23.1.0-1-MacOSX-x86_64.sh
安裝科學(xué)計(jì)算的工具包
將conda-forge配置為默認(rèn)的包安裝方式:
(base) $ conda config --add channels conda-forge
(base) $ conda config --set channel_priority strict
為了使操作環(huán)境更為純凈点弯,使用虛擬環(huán)境,虛擬環(huán)境的名字是pydata-book
矿咕,命令如下:
(base) $ conda create -y -n pydata-book python=3.10
解釋一下這條命令抢肛,conda create
的意思是用conda創(chuàng)建虛擬環(huán)境,-y
的意思是使所有確認(rèn)的結(jié)果都為yes
碳柱,-n pydata-book
的意思是虛擬環(huán)境的名字是pydata-book
捡絮,python=3.10
的意思是Python的版本是3.10。
安裝完畢后莲镣,使用conda activate激活環(huán)境:
(base) $ conda activate pydata-book
(pydata-book) $
看到$
前出現(xiàn)了(pydata-book)
福稳,就說明處于虛擬環(huán)境pydata-book
了。
用命令conda info
可以查看當(dāng)前系統(tǒng)都有什么虛擬環(huán)境瑞侮。
然后的圆,用conda install
安裝包(優(yōu)先使用conda安裝包,如果conda
安裝不上半火,則使用pip
命令):
(pydata-book) $ conda install -y pandas jupyter matplotlib
使用如下命令升級(jí)包:
conda update package_name
或越妈,
pip install --upgrade package_name
使用集成開發(fā)環(huán)境(IDE)
勘誤
第1章 準(zhǔn)備環(huán)境
第2章 Python語法基礎(chǔ)