Python常用扩展包
一. 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),前面寫的很多文章算法都是出自該擴展包。
????????詳見官網:http://scikit-learn.org/stable/
????????5.Matplotlib
????????該包主要用于繪圖和繪表,強大的數據可視化工具,做圖庫,語法類似MATLAB。同時,Seaborn也是數據可視化的工具包。
????????注意:這些包在Anaconda集成環境中已經存在,可以直接使用,最早我是通過Python2.7來編寫代碼的,安裝過程通過pip install numpy,而且安裝順序非常講究,容易出錯,所以推薦大家使用該集成包。
二. Numpy科學計算包
????????NumPy(Numeric Python)系統是Python的一種開源的數值計算擴展,一個用python實現的科學計算包。它提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。
????????推薦學習:http://old.sebug.net/paper/books/scipydoc/numpy_intro.html
????????下面通過這段代碼詳細講解這個包在數據分析中的常見用法:
????1.一維數組處理
#導入包并重命名 import numpy as np#定義一維數組 a = np.array([2, 0, 1, 5, 8, 3]) print u'原始數據:', a#輸出最大、最小值及形狀 print u'最小值:', a.min() print u'最大值:', a.max() print u'形狀', a.shape#數據切片 print u'切片操作:' print a[:-2] print a[-2:] print a[:1]#排序 print type(a) a.sort() print u'排序后:', a
????????輸出結果如下所示:
????????核心代碼:
????????代碼通過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數據分析包
????????Pandas是面板數據(Panel Data)的簡寫。它是Python最強大的數據分析和探索工具,因金融數據分析工具而開發,支持類似SQL的數據增刪改查,支持時間序列分析,靈活處理缺失數據。
????????注意:首先聲明改包功能非常強大,我只是學習了它的非常小的一部分,后面隨著學習深入會寫更多它的用法,同時建議讀者自行學習,不喜勿噴。
????????約定俗成的導入慣例:
????????from pandas import Series, DataFrame
????????import pandas as pd
1.常見用法:讀寫文件
?這里讀文件最常用的是兩種方法:
#寫入excel文件:
df.to_excel('foo.xlsx', sheet_name='Sheet1')
#從excel文件中讀取:
pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])
#寫入csv文件:
df.to_csv('foo.csv')
#從csv文件中讀取:
pd.read_csv('foo.csv')
#寫入HDF5存儲:
df.to_hdf('foo.h5','df')
#從HDF5存儲中讀取:
pd.read_hdf('foo.h5','df')
????????下面通過一個具體的案例來講解該包,這里讀取的數據是張良均的《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中則只允許存儲相同的數據類型,這樣可以更有效的使用內存,提高運算效率。
from pandas import Series, DataFrame#通過傳遞一個list對象來創建Series,默認創建整型索引;
a = Series([4, 7, -5, 3])
print u'創建Series:'
print a#創建一個帶有索引來確定每一個數據點的Series ;
b = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print u'創建帶有索引的Series:'
print b#如果你有一些數據在一個Python字典中,你可以通過傳遞字典來創建一個Series;
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
c = Series(sdata)
print u'通過傳遞字典創建Series:'
print c
states = ['California', 'Ohio', 'Oregon', 'Texas']
d = Series(sdata, index=states)
print u'California沒有字典為空:'
print d
?輸出如下所示:
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畫圖包
????????Matplotlib是一個Python的圖形框架,類似于MATLAB和R語言。它是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合交互式地進行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應用程序中。
????????補充兩張圖,原自《Python數據分析與挖掘實戰》,對大家繪圖很有幫助。
???????最常用的畫圖函數是plot,同時常用的設置樣式方法見下圖。
????????這里主要使用前面第三部分Pandas讀取的電力數據繪制圖形,主要是柱狀圖和餅圖。
1.繪制柱狀圖
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 14 04:06:01 2016
@author: yxz15
"""#導入數據集
import pandas as pd
data = pd.read_excel("missing_data.xls", header=None)?
mm = data.sum()
print u'計算用電量總數:'
print mm#繪制圖形
import numpy as np
import matplotlib.pyplot as plt
#中文字體顯示
plt.rc('font', family='SimHei', size=13)
N = 3
#3個用戶 0 1 2
ind = np.arange(N) ?# the x locations for the groups?
print ind
#設置寬度
width = 0.35 ? ? ? ?
x = [u'用戶A', u'用戶B', u'用戶C']
#繪圖
plt.bar(ind, mm, width, color='r', label='sum num')
plt.xlabel(u"用戶名")
plt.ylabel(u"總耗電量")
plt.title(u'電力竊漏電用戶自動識別--總耗電量')
plt.legend()
#設置底部名稱
plt.xticks(ind+width/2, x, rotation=40) #旋轉40度
plt.show()
輸出如下所示:
2.繪制餅圖
import matplotlib.pyplot as pltfracs = [45, 30, 25] ? ? ? ? ? ? #每一塊占得比例,總和為100 n = mm[0]+mm[1]+mm[2] a = (mm[0]*1.0*100/n) b = (mm[1]*1.0*100/n) c = (mm[2]*1.0*100/n) print a, b, c, n fracs = [a, b, c]explode=(0, 0, 0.08) ? ? ? ? ? ? #離開整體的距離,看效果 labels = 'A', 'B', 'C' ? ? ? ? ? #對應每一塊的標志plt.pie(fracs, explode=explode, labels=labels,autopct='%1.1f%%', shadow=True, startangle=90, colors = ("g", "r", "y"))# startangle是開始的角度,默認為0,從這里開始按逆時針方向依次展開plt.title('Raining Hogs and Dogs') ? #標題plt.show()
輸出如下所示:
?3.柱狀圖及比例顯示
import matplotlib.pyplot as plt import numpy as np plt.rc('font', family='SimHei', size=13)num = np.array([13325, 9403, 9227, 8651]) ratio = np.array([0.75, 0.76, 0.72, 0.75]) men = num * ratio women = num * (1-ratio) x = [u'聊天',u'支付',u'團購\n優惠券',u'在線視頻']width = 0.5 idx = np.arange(len(x)) plt.bar(idx, men, width, color='red', label=u'男性用戶') plt.bar(idx, women, width, bottom=men, color='yellow', label=u'女性用戶') plt.xlabel(u'應用類別') plt.ylabel(u'男女分布') plt.xticks(idx+width/2, x, rotation=40) plt.legend() plt.show()
????????輸出如下所示
????????當然該包可以繪制更多的圖形,希望讀者自己去學習。比如線性回歸:
? ?
????????matplotlib.pyplot是用來畫圖的方法,matplotlib是可視化包。
????????import matplotlib.pyplot as plt
????????繪制散點圖(scatter),橫軸為x,獲取的第1列數據;縱軸為y,獲取的第2列數據;c=y_pred對聚類的預測結果畫出散點圖,marker='o'說明用點表示圖形。
????????plt.scatter(x, y, c=y_pred, marker='o')?
????????表示圖形的標題為Kmeans-heightweight Data。
????????plt.title("Kmeans-Basketball Data")
????????表示圖形x軸的標題。
????????plt.xlabel("assists_per_minute")
????????表示圖形y軸的標題。
????????plt.ylabel("points_per_minute")?
????????設置右上角圖例。
????????plt.legend(["Rank"])?
????????表示顯示圖形。
????????plt.show()
?————————————————?
版權聲明:本文為CSDN博主「Eastmount」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/eastmount/article/details/53144633
總結
以上是生活随笔為你收集整理的Python常用扩展包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投稿选刊方面
- 下一篇: 发表国外期刊注意事项