前面幾篇文章采用的案例的方法進行介紹的,這篇文章主要介紹python常用的擴充包,同時結合資料挖掘相關知識介紹該包具體的用法,主要介紹numpy、pandas和matplotlib三個包。目錄:
一.python常用擴充包
二.numpy科學計算包
三.pandas資料分析包
四.matplotlib繪圖包
前文推薦:
部分截圖參考張良均的《python資料分析與挖掘實戰》,推薦大家購買閱讀。
參考張良均的《python資料分析與挖掘實戰》,下圖展示了常見的python擴充包。

常用的包主要包括:
1.numpy
python沒有提供數組,清單(list)可以完成數組,但不是真正的資料,當資料量增大時,,它的速度很慢。是以numpy擴充包提供了數組支援,同時很多進階擴充包依賴它。例如:scipy、matplotlib、pandas。
2.scipy
該包提供矩陣支援,以及矩陣相關的數值計算子產品。如果說numpy讓python有了matlab的味道,那麼scipy就讓python真正地成為二半個matlib。因為涉及到矩陣内容,而課程中主要使用數組,是以不再介紹。
3.pandas
pandas是面闆資料(panel data)的簡寫。它是python最強大的資料分析和探索工具,因金融資料分析工具而開發,支援類似sql的資料增删改查,支援時間序列分析,靈活處理缺失資料,後面詳細介紹。
4.scikit-learn
scikit-learn是一個基于python的用于資料挖掘和資料分析的簡單且有效的工具,它的基本功能主要被分為六個部分:分類(classification)、回歸(regression)、聚類(clustering)、資料降維(dimensionality reduction)、模型選擇(model selection)、資料預處理(preprocessing),前面寫的很多文章算法都是出自該擴充包。
5.matplotlib
該包主要用于繪圖和繪表,強大的資料可視化工具,做圖庫,文法類似matlab。同時,seaborn也是資料可視化的工具包。
注意:這些包在anaconda內建環境中已經存在,可以直接使用,最早我是通過python2.7來編寫代碼的,安裝過程通過pip install numpy,而且安裝順序非常講究,容易出錯,是以推薦大家使用該內建包。
numpy(numeric python)系統是python的一種開源的數值計算擴充,一個用python實作的科學計算包。它提供了許多進階的數值程式設計工具,如:矩陣資料類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而産生。
下面通過這段代碼詳細講解這個包在資料分析中的常見用法:
1.一維數組處理
輸出結果如下所示:
核心代碼:
代碼通過np.array定義了一個數組[2, 0, 1, 5, 8, 3],其中min計算最小值,max計算最大值,shape表示數組的形狀,因為是一維數組,故6l(6個數字)。
最重要的一個知識點是數組的切片操作,因為在資料分析過程中,通常會對資料集進行"80%-20%"或"70%-30%"的訓練集和測試集劃分,通常采用的方法就是切片。
a[:-2]表示從頭開始擷取,"-2"表示後面兩個值不取,結果:[2 0 1 5]
a[-2:]表示後往前數兩個數字,擷取數字至結尾,即擷取最後兩個值[8 3]
a[:1]表示從頭開始擷取,擷取1個數字,即[2]
2.二維數組處理
注意的是定義二維數組括号不要弄錯,正确的應該是:[[1,2,3],[4,5,6]]
同時計算機的存儲下标都是從0開始計算的。
代碼如下:
代碼輸出結果如下所示:
需要注意:
(1)擷取二維數組中的某行,如第2行資料[4,5,6,7],采用方法是:c[1][:];
(2)擷取二維數組中的某列,如第2列資料[[3] [6] [9]],c[:,np.newaxis, 2]。因為通常在資料可視化中采用擷取某列資料作為x或y坐标,同時多元資料也可以采用pca降低成兩維資料,再進行顯示。
最後希望讀者自己去閱讀該段代碼。
pandas是面闆資料(panel data)的簡寫。它是python最強大的資料分析和探索工具,因金融資料分析工具而開發,支援類似sql的資料增删改查,支援時間序列分析,靈活處理缺失資料。
注意:首先聲明改包功能非常強大,我隻是學習了它的非常小的一部分,後面随着學習深入會寫更多它的用法,同時建議讀者自行學習,不喜勿噴。
約定俗成的導入慣例:
from pandas import series, dataframe
import pandas as pd
1.常見用法:讀寫檔案
這裡讀檔案最常用的是兩種方法:
下面通過一個具體的案例來講解該包,這裡讀取的資料是張良均的《python資料分析與挖掘實戰》的第六章的電力使用者資料集,missing_data.xls檔案。内容如下,共3列資料,分别是使用者a、使用者b、使用者c,共21行,對應21天的用電量,其中包含缺失值。
部分excel檔案資料截圖如下所示:
具體代碼如下所示:
其中data.describe()輸出資料的基本資訊統計,其方法參考前面的圖,包括count計數、std、max等函數。同時因為excel表格中存在空值,故python顯示為nan(not a number)表示空。
2.series
series是一維标記數組,可以存儲任意資料類型,如整型、字元串、浮點型和python對象等,軸标一般指索引。
series、numpy中的一維array 、python基本資料結構list差別:list中的元素可以是不同的資料類型,而array和series中則隻允許存儲相同的資料類型,這樣可以更有效的使用記憶體,提高運算效率。
輸出如下所示:
series的一個重要功能是在算術運算中它會自動對齊不同索引的資料。
3.dataframe
dataframe是二維标記資料結構,列可以是不同的資料類型。它是最常用的pandas對象,像series一樣可以接收多種輸入:lists、dicts、series和dataframe等。初始化對象時,除了資料還可以傳index和columns這兩個參數。
注意:
(1) 在pandas中用函數 isnull 和 notnull 來檢測資料丢失:pd.isnull(a)、pd.notnull(b)。
series也提供了這些函數的執行個體方法:a.isnull()。
(2) pandas提供了大量的方法能夠輕松的對series,dataframe和panel對象進行各種符合各種邏輯關系的合并操作。如:concat、merge (類似于sql類型的合并)、append (将一行連接配接到一個dataframe上)。
(3) dataframe中常常會出現重複行,dataframe的duplicated方法傳回一個布爾型series,表示各行是否是重複行;還有一個drop_duplicated方法,它傳回一個移除了重複行的dataframe。
總之,pandas是非常強大的一個資料分析包,很多功能都需要我自己去慢慢摸索。
matplotlib是一個python的圖形架構,類似于matlab和r語言。它是python最著名的繪圖庫,它提供了一整套和matlab相似的指令api,十分适合互動式地進行制圖。而且也可以友善地将它作為繪圖控件,嵌入gui應用程式中。
補充兩張圖,原自《python資料分析與挖掘實戰》,對大家繪圖很有幫助。
最常用的畫圖函數是plot,同時常用的設定樣式方法見下圖。
這裡主要使用前面第三部分pandas讀取的電力資料繪制圖形,主要是柱狀圖和餅圖。
1.繪制柱狀圖
2.繪制餅圖
3.柱狀圖及比例顯示
輸出如下所示(ps:該部分參考百度知道,網址忘記了,望提醒)。
當然該包可以繪制更多的圖形,希望讀者自己去學習。比如線性回歸:
代碼部分詳解,引用前面自己寫的第三篇文章:
matplotlib.pyplot是用來畫圖的方法,matplotlib是可視化包。
plt.scatter(x, y, c=y_pred, marker='o')
繪制散點圖(scatter),橫軸為x,擷取的第1列資料;縱軸為y,擷取的第2列資料;c=y_pred對聚類的預測結果畫出散點圖,marker='o'說明用點表示圖形。
plt.title("kmeans-basketball data")
表示圖形的标題為kmeans-heightweight data。
plt.xlabel("assists_per_minute")
表示圖形x軸的标題。
plt.ylabel("points_per_minute")
表示圖形y軸的标題。
plt.legend(["rank"])
設定右上角圖例。
plt.show()
表示顯示圖形。
最後希望文章對你有所幫助,上課内容還需要繼續探索,但enjoy myself~
同時周末監考兩天回來,确實挺累的,事情堆了很多,浪費15個小時,發現這份工作,賺點外塊真不容易啊!甚至比程式猿累多了。
當老師難,當好老師更難,當貴州的好老師難上難。希望還能堅持自己的夢想,做個财大信院的掃地僧吧,但每每和學生一起還是非常享受的。同時,這次熬夜寫文到深夜4點半,旁邊也坐着一個自己的學生,在調試struts、json代碼,是以說,還真不是這邊的學生差,你懂得,但也并不是沒有好老師,隻是相對較少。fighting~
最後補充學生馮y的一首朋友圈感言:
把握現在,活在當下。
不以物喜,不以己悲。
閑看花開花落,
靜觀雲卷雲舒。
順其自然,随遇而安。
我也希望自己有朝一日能達到這種心境~
對這份工作、事業、校園、辦公還是得看淡點。
(by:eastmount 2016-11-14 中午4點半 )