《利用Python進行數據分析》第13章(上) 建模庫介紹
來自專欄 Python程序員14 人贊了文章
作者:SeanCheney Python愛好者社區--專欄作者
來源:簡書
前文傳送門:
【翻譯】《利用Python進行數據分析·第2版》第1章 準備工作
【翻譯】《利用Python進行數據分析·第2版》第2章(上)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第2章(中)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第2章(下)Python語法基礎,IPython和Jupyter
【翻譯】《利用Python進行數據分析·第2版》第3章(上)Python的數據結構、函數和文件【翻譯】《利用Python進行數據分析·第2版》第3章(中)Python的數據結構、函數和文件【翻譯】《利用Python進行數據分析·第2版》第3章(下)Python的數據結構、函數和文件【翻譯】《利用Python進行數據分析·第2版》第4章(上)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第4章(中)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第4章(下)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第5章(上)pandas入門【翻譯】《利用Python進行數據分析·第2版》第5章(中)pandas入門【翻譯】《利用Python進行數據分析·第2版》第5章(下)pandas入門【翻譯】《利用Python進行數據分析·第2版》第6章(上) 數據載入、存儲與文件格式
【翻譯】《利用Python進行數據分析·第2版》第6章(中) 數據載入、存儲與文件格式【翻譯】《利用Python進行數據分析·第2版》第6章(下) 數據載入、存儲與文件格式【翻譯】《利用Python進行數據分析·第2版》第7章(上)數據清洗和準備【翻譯】《利用Python進行數據分析·第2版》第7章(中) 數據清洗和準備【翻譯】《利用Python進行數據分析·第2版》第7章(下) 數據清洗和準備【翻譯】《利用Python進行數據分析·第2版》第8章(上) 數據規整:聚合、合併和重塑【翻譯】《利用Python進行數據分析·第2版》第8章(中) 數據規整:聚合、合併和重塑【翻譯】《利用Python進行數據分析·第2版》第8章(下) 數據規整:聚合、合併和重塑【翻譯】《利用Python進行數據分析·第2版》第9章(上) 繪圖和可視化【翻譯】《利用Python進行數據分析·第2版》第9章(中) 繪圖和可視化
【翻譯】《利用Python進行數據分析·第2版》第9章(下) 繪圖和可視化 【翻譯】《利用Python進行數據分析·第2版》第10章(上) 數據聚合與分組運算 【翻譯】《利用Python進行數據分析·第2版》第10章(中) 數據聚合與分組運算 【翻譯】《利用Python進行數據分析·第2版》第10章(下) 數據聚合與分組運算 【翻譯】《利用Python進行數據分析·第2版》第11章(上) 時間序列 【翻譯】《利用Python進行數據分析·第2版》第11章(中) 時間序列 【翻譯】《利用Python進行數據分析·第2版》第11章(中二) 時間序列 【翻譯】《利用Python進行數據分析·第2版》第11章(下) 時間序列 【翻譯】《利用Python進行數據分析·第2版》第12章(上) pandas高級應用【翻譯】《利用Python進行數據分析·第2版》第12章(中) pandas高級應用
【翻譯】《利用Python進行數據分析·第2版》第12章(下) pandas高級應用
本書中,我已經介紹了Python數據分析的編程基礎。因為數據分析師和科學家總是在數據規整和準備上花費大量時間,這本書的重點在於掌握這些功能。
開發模型選用什麼庫取決於應用本身。許多統計問題可以用簡單方法解決,比如普通的最小二乘回歸,其它問題可能需要複雜的機器學習方法。幸運的是,Python已經成為了運用這些分析方法的語言之一,因此讀完此書,你可以探索許多工具。
本章中,我會回顧一些pandas的特點,在你膠著於pandas數據規整和模型擬合和評分時,它們可能派上用場。然後我會簡短介紹兩個流行的建模工具,statsmodels和scikit-learn。這二者每個都值得再寫一本書,我就不做全面的介紹,而是建議你學習兩個項目的線上文檔和其它基於Python的數據科學、統計和機器學習的書籍。
13.1 pandas與模型代碼的介面
模型開發的通常工作流是使用pandas進行數據載入和清洗,然後切換到建模庫進行建模。開發模型的重要一環是機器學習中的「特徵工程」。它可以描述從原始數據集中提取信息的任何數據轉換或分析,這些數據集可能在建模中有用。本書中學習的數據聚合和GroupBy工具常用於特徵工程中。
優秀的特徵工程超出了本書的範圍,我會盡量直白地介紹一些用於數據操作和建模切換的方法。
pandas與其它分析庫通常是靠NumPy的數組聯繫起來的。將DataFrame轉換為NumPy數組,可以使用.values屬性:
In [10]: import pandas as pdIn [11]: import numpy as npIn [12]: data = pd.DataFrame({ ....: x0: [1, 2, 3, 4, 5], ....: x1: [0.01, -0.01, 0.25, -4.1, 0.], ....: y: [-1.5, 0., 3.6, 1.3, -2.]})In [13]: dataOut[13]: x0 x1 y0 1 0.01 -1.51 2 -0.01 0.02 3 0.25 3.63 4 -4.10 1.34 5 0.00 -2.0In [14]: data.columnsOut[14]: Index([x0, x1, y], dtype=object)In [15]: data.valuesOut[15]: array([[ 1. , 0.01, -1.5 ], [ 2. , -0.01, 0. ], [ 3. , 0.25, 3.6 ], [ 4. , -4.1 , 1.3 ], [ 5. , 0. , -2. ]])
要轉換回DataFrame,可以傳遞一個二維ndarray,可帶有列名:
In [16]: df2 = pd.DataFrame(data.values, columns=[one, two, three])In [17]: df2Out[17]: one two three0 1.0 0.01 -1.51 2.0 -0.01 0.02 3.0 0.25 3.63 4.0 -4.10 1.34 5.0 0.00 -2.0
筆記:最好當數據是均勻的時候使用.values屬性。例如,全是數值類型。如果數據是不均勻的,結果會是Python對象的ndarray:
In [18]: df3 = data.copy()In [19]: df3[strings] = [a, b, c, d, e]In [20]: df3Out[20]: x0 x1 y strings0 1 0.01 -1.5 a1 2 -0.01 0.0 b2 3 0.25 3.6 c3 4 -4.10 1.3 d4 5 0.00 -2.0 eIn [21]: df3.valuesOut[21]: array([[1, 0.01, -1.5, a], [2, -0.01, 0.0, b], [3, 0.25, 3.6, c], [4, -4.1, 1.3, d], [5, 0.0, -2.0, e]], dtype=object)
對於一些模型,你可能只想使用列的子集。我建議你使用loc,用values作索引:
In [22]: model_cols = [x0, x1]In [23]: data.loc[:, model_cols].valuesOut[23]: array([[ 1. , 0.01], [ 2. , -0.01], [ 3. , 0.25], [ 4. , -4.1 ], [ 5. , 0. ]])
一些庫原生支持pandas,會自動完成工作:從DataFrame轉換到NumPy,將模型的參數名添加到輸出表的列或Series。其它情況,你可以手工進行「元數據管理」。
在第12章,我們學習了pandas的Categorical類型和pandas.get_dummies函數。假設數據集中有一個非數值列:
In [24]: data[category] = pd.Categorical([a, b, a, a, b], ....: categories=[a, b])In [25]: dataOut[25]: x0 x1 y category0 1 0.01 -1.5 a1 2 -0.01 0.0 b2 3 0.25 3.6 a3 4 -4.10 1.3 a4 5 0.00 -2.0 b
如果我們想替換category列為虛變數,我們可以創建虛變數,刪除category列,然後添加到結果:
In [26]: dummies = pd.get_dummies(data.category, prefix=category)In [27]: data_with_dummies = data.drop(category, axis=1).join(dummies)In [28]: data_with_dummiesOut[28]: x0 x1 y category_a category_b0 1 0.01 -1.5 1 01 2 -0.01 0.0 0 12 3 0.25 3.6 1 03 4 -4.10 1.3 1 04 5 0.00 -2.0 0 1
用虛變數擬合某些統計模型會有一些細微差別。當你不只有數字列時,使用Patsy(下一節的主題)可能更簡單,更不容易出錯。
推薦閱讀:
※0029數據展現:平均線圖製作
※R語言起步--excel透視表功能實現
※在線音樂行業報告 ——以網易雲音樂為例
※利用EXCEL進行數據分析
※數據分析小白的進階之路