《利用Python進行數據分析》第13章(上) 建模庫介紹

《利用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進行數據分析
數據分析小白的進階之路

TAG:Python | 數據分析 | 數據建模 |