推薦:Python全棧教程蝇恶!花了29980買的從入門到精通課程鞠呈,分享給大家
01 NumPy
NumPy是Numerical Python的簡寫,是Python數(shù)值計算的基石钾菊。它提供多種數(shù)據(jù)結(jié)構(gòu)蜀肘、算法以及大部分涉及Python數(shù)值計算所需的接口蔓钟。NumPy還包括其他內(nèi)容:
快速、高效的多維數(shù)組對象ndarray
基于元素的數(shù)組計算或數(shù)組間數(shù)學(xué)操作函數(shù)
用于讀寫硬盤中基于數(shù)組的數(shù)據(jù)集的工具
線性代數(shù)操作搂捧、傅里葉變換以及隨機數(shù)生成
成熟的C語言API驮俗,允許Python拓展和本地的C或C++代碼訪問NumPy的數(shù)據(jù)結(jié)構(gòu)和計算設(shè)施。
除了NumPy賦予Python的快速數(shù)組處理能力之外允跑,NumPy的另一個主要用途是在算法和庫之間作為數(shù)據(jù)傳遞的數(shù)據(jù)容器王凑。對于數(shù)值數(shù)據(jù),NumPy數(shù)組能夠比Python內(nèi)建數(shù)據(jù)結(jié)構(gòu)更為高效地存儲和操作數(shù)據(jù)聋丝。
此外索烹,用底層語言編寫的庫,例如用C或Fortran編寫的庫弱睦,可以在NumPy數(shù)組存儲的數(shù)據(jù)上直接操作百姓,而無須將數(shù)據(jù)復(fù)制到其他內(nèi)存中后再操作。因此况木,許多Python的數(shù)值計算工具將NumPy數(shù)組作為基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)瓣戚,或與NumPy進行無縫互操作。
02 pandas
pandas提供了高級數(shù)據(jù)結(jié)構(gòu)和函數(shù)焦读,這些數(shù)據(jù)結(jié)構(gòu)和函數(shù)的設(shè)計使得利用結(jié)構(gòu)化、表格化數(shù)據(jù)的工作快速舱权、簡單矗晃、有表現(xiàn)力。它出現(xiàn)于2010年宴倍,幫助Python成為強大张症、高效的數(shù)據(jù)分析環(huán)境。常用的pandas對象是DataFrame鸵贬,它是用于實現(xiàn)表格化俗他、面向列、使用行列標(biāo)簽的數(shù)據(jù)結(jié)構(gòu)阔逼;以及Series兆衅,一種一維標(biāo)簽數(shù)組對象。
pandas將表格和關(guān)系型數(shù)據(jù)庫(例如SQL)的靈活數(shù)據(jù)操作能力與NumPy的高性能數(shù)組計算的理念相結(jié)合嗜浮。它提供復(fù)雜的索引函數(shù)羡亩,使得數(shù)據(jù)的重組、切塊危融、切片畏铆、聚合、子集選擇更為簡單吉殃。由于數(shù)據(jù)操作辞居、預(yù)處理楷怒、清洗在數(shù)據(jù)分析中是重要的技能,pandas將是重要主題瓦灶。
介紹一點背景知識鸠删,早在2008年,我在一家量化投資企業(yè)——AQR資本管理公司供職時倚搬,便開始了pandas的開發(fā)冶共。那時候,我有一些獨特的需求是工具清單上任何單個工具無法滿足的:
帶有標(biāo)簽軸每界,支持自動化或顯式數(shù)據(jù)對齊功能的數(shù)據(jù)結(jié)構(gòu)——這可以防止未對齊數(shù)據(jù)和不同數(shù)據(jù)源的不同索引數(shù)據(jù)所引起的常見錯誤
集成時間序列函數(shù)功能
能夠同時處理時間序列數(shù)據(jù)和非時間序列數(shù)據(jù)的統(tǒng)一數(shù)據(jù)結(jié)構(gòu)
可以保存元數(shù)據(jù)的算術(shù)操作和簡化
靈活處理缺失數(shù)據(jù)
流行數(shù)據(jù)庫(例如基于SQL的數(shù)據(jù)庫)中的合并等關(guān)系型操作
我想將以上的工作在同一個地方完成捅僵,最好還能在一個擁有通用軟件開發(fā)能力的語言中實現(xiàn)。Python就是一個很好的備選項眨层,但是那時候并沒有這類數(shù)據(jù)結(jié)構(gòu)的整合集庙楚,也沒有能提供相關(guān)功能的工具。結(jié)果就是pandas最初被開發(fā)出來用于解決金融和商業(yè)分析問題趴樱,pandas尤其擅長深度時間序列和處理商業(yè)進程中產(chǎn)生的時間索引數(shù)據(jù)馒闷。
使用R語言進行統(tǒng)計計算的用戶對DataFrame的名稱會非常熟悉,因為這個對象是根據(jù)相似的R data.frame對象進行命名的叁征。與Python不同的是纳账,數(shù)據(jù)框在R語言中是標(biāo)準(zhǔn)庫中的內(nèi)容。因此捺疼,pandas中的很多特征通常與R核心的實現(xiàn)或者R的附加庫提供的功能一致疏虫。
pandas的名字的來源是panel data,這是計量經(jīng)濟學(xué)中針對多維結(jié)構(gòu)化數(shù)據(jù)集的術(shù)語啤呼。pandas也是Python data analysis(Python數(shù)據(jù)分析)自身的簡寫短語卧秘。
03 matplotlib
matplotlib是最流行的用于制圖及其他二維數(shù)據(jù)可視化的Python庫。它由John D. Hunter創(chuàng)建官扣,目前由一個大型開發(fā)者團隊維護翅敌。matplotlib被設(shè)計為適合出版的制圖工具。
對于Python編程者來說也有其他可視化庫惕蹄,但matplotlib依然使用最為廣泛蚯涮,并且與生態(tài)系統(tǒng)的其他庫良好整合。我認(rèn)為將它作為默認(rèn)可視化工具是一個安全的選擇卖陵。
04 IPython與Jupyter
IPython項目開始于2001年恋昼,由Fernando Pérez發(fā)起,旨在開發(fā)一個更具交互性的Python解釋器赶促。在過去的16年中液肌,它成為Python數(shù)據(jù)技術(shù)棧中最重要的工具之一。
盡管它本身并不提供任何計算或數(shù)據(jù)分析工具鸥滨,它的設(shè)計側(cè)重于在交互計算和軟件開發(fā)兩方面將生產(chǎn)力最大化嗦哆。它使用了一種執(zhí)行-探索工作流來替代其他語言中典型的編輯-編譯-運行工作流谤祖。它還提供針對操作系統(tǒng)命令行和文件系統(tǒng)的易用接口。由于數(shù)據(jù)分析編碼工作包含大量的探索老速、試驗粥喜、試錯和遍歷,IPython可以使你更快速地完成工作橘券。
2014年额湘,F(xiàn)ernando和IPython團隊發(fā)布了Jupyter項目。Jupyter項目旨在設(shè)計一個適用于更多語言的交互式計算工具旁舰。IPython web notebook 則成為Jupyter notebook锋华,可以支持超過40種編程語言。IPython系統(tǒng)目前可以作為一個內(nèi)核(一種編程語言模式)用于在 Jupyter 中使用Python箭窜。
IPython自身已成為 Jupyter開源項目中的一個組件毯焕,后者提供交互性、探索性的高效環(huán)境磺樱。IPtyhon最古老纳猫、最簡單的“模式”就是一個加強版的Python命令行,用于提高編寫竹捉、測試芜辕、調(diào)試Python代碼的速度。
你也可以通過基于Web块差、支持多語言的代碼“筆記本”——Jupyter Notebook來使用IPython系統(tǒng)侵续。IPython命令行和 Jupyter notebook對于數(shù)據(jù)探索和可視化非常有用。
Jupyter notebook系統(tǒng)允許你使用Markdown和HTML創(chuàng)建包含代碼和文本的富文檔憾儒。其他編程語言也針對Jupyter實現(xiàn)了內(nèi)核,允許你在Jupyter中使用多種語言而不僅僅是Python乃沙。
對我個人來說起趾,IPython涉及我工作的大部分內(nèi)容,包括運行警儒、調(diào)試训裆、測試代碼。
05 SciPy
SciPy是科學(xué)計算領(lǐng)域針對不同標(biāo)準(zhǔn)問題域的包集合蜀铲。以下是SciPy中包含的一些包:
-
scipy.integrate
數(shù)值積分例程和微分方程求解器
-
scipy.linalg
線性代數(shù)例程和基于numpy.linalg的矩陣分解
-
scipy.optimize
函數(shù)優(yōu)化器(最小化器)和求根算法
-
scipy.signal
信號處理工具
-
scipy.sparse
稀疏矩陣與稀疏線性系統(tǒng)求解器
-
scipy.special
SPECFUN的包裝器边琉。SPECFUN是Fortran語言下實現(xiàn)通用數(shù)據(jù)函數(shù)的包,例如gamma函數(shù)记劝。
-
scipy.stats
標(biāo)準(zhǔn)的連續(xù)和離散概率分布(密度函數(shù)变姨、采樣器、連續(xù)分布函數(shù))厌丑、各類統(tǒng)計測試定欧、各類描述性統(tǒng)計渔呵。
SciPy與NumPy一起為很多傳統(tǒng)科學(xué)計算應(yīng)用提供了一個合理、完整砍鸠、成熟的計算基礎(chǔ)扩氢。
06 scikit-learn
scikit-learn項目誕生于2010年,目前已成為Python編程者首選的機器學(xué)習(xí)工具包爷辱。僅僅七年录豺,scikit-learn就擁有了全世界1 500位代碼貢獻者。其中包含以下子模塊饭弓。
分類:SVM双饥、最近鄰、隨機森林示启、邏輯回歸等
回歸:Lasso兢哭、嶺回歸等
聚類:k-means、譜聚類等
降維:PCA夫嗓、特征選擇迟螺、矩陣分解等
模型選擇:網(wǎng)格搜索、交叉驗證舍咖、指標(biāo)矩陣
預(yù)處理:特征提取矩父、正態(tài)化
scikit-learn與pandas、statsmodels排霉、IPython一起使Python成了高效的數(shù)據(jù)科學(xué)編程語言窍株。
07 statsmodels
statsmodels是一個統(tǒng)計分析包。它源自斯坦福大學(xué)統(tǒng)計學(xué)教授Jonathan Taylor 利用R語言實現(xiàn)的各類分析模型攻柠。Skipper Seabold 和 Josef Perktold早在2010年便創(chuàng)建了新的statsmodels項目球订。自那之后該項目迅速成長,擁有大量活躍用戶和貢獻者者瑰钮。
Nathaniel Smith 開發(fā)了Patsy項目冒滩,為R語言公式系統(tǒng)所驅(qū)動的statsmodels包提供公式、模型規(guī)范框架浪谴。
與scikit-learn相比开睡,statsmodels包含經(jīng)典的(高頻詞匯)統(tǒng)計學(xué)、經(jīng)濟學(xué)算法苟耻。它所包含的模型如下篇恒。
回歸模型:線性回歸、通用線性模型凶杖、魯棒線性模型胁艰、線性混合效應(yīng)模型等
方差分析(ANOVA )
時間序列分析:AR、ARMA、ARIMA蝗茁、VAR等模型
非參數(shù)方法:核密度估計醋虏、核回歸
統(tǒng)計模型結(jié)果可視化