Python 3.x--資料分析: numpy(一)
所謂自由,不是隨心而欲,而是自我主宰
numpy介紹:
前言:
因為Python中array模組只支援一維陣列,不支援多維陣列,也沒有各種運算函式,不適合數值運算,所以numpy的出現彌補了不足
NUMPY庫(簡稱np)是Python資料分析中必不可少的第三方庫,np是Python其他科學計算包的基礎包,是資料分析的基礎,np是Scipy,Pandas等資料處理或科學計算庫最基本的函式功能庫。
因此,充分理解和應用np的資料型別對Python資料分析幫助很大,因為需求,所以最近要好好的學習一下有關資料分析的基本知識,那麼就從numpy開始~
numpy的主要物件
ndarray型別的維度(dimension)叫做軸(axes),軸的個數叫做秩(rank)。其中,一維陣列的秩為1,二維陣列的秩為2。
陣列的屬性:
np重點功能:
- 強大的多維陣列物件ndarray
- 廣功能函式
- 提供了線性代數、傅立葉變換、隨機數生成的相關功能
基本概念與基本操作:
1、什麼是資料維度?
維度是一組資料的組織形式,不同資料維度可能表示不同的含義。
根據資料關係的不同分為:一維資料、二維資料、高維資料
一維資料由對等關係的有序和無序資料構成,採用線性方式組織,對應於數學中的陣列和集合等概念。可以用陣列表示,
通俗講:
1,2,3,4,5,6
這一行資料可以稱為一維資料,但這樣摺疊一下
1,2,3
4,5,6
那麼這就是二維資料了,也可稱為矩陣
高維資料由鍵值對型別的資料構成,採用物件方式組織,屬於整合度更好的資料組織方式
2、秩的含義
矩陣秩的概念:任何矩陣都可以經過有限次初等行變換,形成行階梯型矩陣,其中非零行的行數是唯一確定的,該行數稱為矩形的秩
求矩陣的秩需先將矩陣化為階梯型矩陣
如下秩=3,即滿秩矩陣
3、資料集
顧名思義是資料的集合,用來訓練程式的資料集合,多指二維、多維數表。只要有資料都可以直接手工建立一個數據集。
其中,用逗號分割數值的資料集叫做CSV(Comma-Separated Values,逗號分隔值)資料集,csv是一種通用的檔案格式,用來儲存批量的資料,就像一張Excel表。
形如:
城市,環比,同比,定基
北京,101.5,120.7,121.4
上海,101.1,111.2,111.3
南京,133.0,133.2,133.4
3.1、生成資料集
可以藉助np內建函式生成資料集:
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
例如:
程式碼實現:
import numpy as np
a=np.arange(20).reshape(4,5)
np.savetxt('test.csv',a,fmt='%d',delimiter=',')
程式碼說明:
第二行:
np.arange(n).reshape(x,y)
陣列n不變,返回維度為(x,y)的陣列
第三行:
- frame:名字,檔案、字串的名字等
- array:存入檔案的np陣列,可以是壓縮檔案(.gz,.bz2)
- fmt(format):寫入檔案的格式,預設的是%.18e(科學計數法保留18位),除此之外還有,%d, %2f
- delemiter:分割字串,預設是空格
其中CSV格式儲存的檔案一般採用.csv為副檔名,Windows記事本或者office Excel工具可以開啟。
Python提供了CSV讀寫的標準庫,可以通過import CSV使用
3.2、讀取資料集
仍然使用np內建函式可以實現:
np.loadtxt(frame,dtype=np.float,delimiter=None,inpack=False)
如下:
- frame:檔案來源
- dtype:資料型別
- unpack:預設false,讀入檔案,寫入一個數組;若True,讀入屬性(列)將分別儲存
3.3、csv檔案的侷限
CSV檔案的侷限:只能對一維資料和二維資料進行有效的操作,高維資料無法將文字更直觀的顯示出來
除了savetxt()和loadtxt()可以儲存讀取陣列外
對於ndarray陣列,np中的tofile方法也可以儲存和讀取陣列,但是知識將陣列的元素列出而沒有維度資訊
例如:
儲存:
import numpy as np
a=np.arange(20).reshape(4,5)
a.tofile('a.dat',sep=',',format='%d')
讀取:
np.fromfile(frame,dtype=float,count=-1,sep='')
- count:讀檔案的個數,預設-1,讀取全部
- sep:資料分割字串,如果為空,寫入檔案為二進位制
4、存/取高緯度資料
save/load函式
np.save(frame,array)或者np.savez(frame,array)
np.load(fname)
- frame:檔名,以.npy為副檔名,壓縮為.npz
- array:陣列變數
import numpy as np
a=np.arange(20).reshape(4,5)
np.save('b.npy',a)
5、np例子
正態分佈例項:
公式
程式碼實現:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('Book1.csv') #載入資料檔案
time = data["t"] #文件資料’t'賦值給time
mean = time.mean() #資料的均值
standard = time.std() #資料的標準差σ sigma
def normal(x,m,s): #正態分佈的概率密度函式,其中x:x;m:μ;s:σ
pdf = np.exp(-((x-m)**2)/(2*(s**2)))/(s*(np.sqrt(2*np.pi)))
return pdf
x = np.arange(80,100,0.1) #資料,以0.1為步長更平滑
y = normal(x,mean,standard) #載入公式
plt.plot(x,y)
plt.title('normal distribution')
plt.xlabel('time')
plt.ylabel('probaility')
plt.hist(time,bins=10,rwidth=0.9,normed=True) #畫出直方圖,normed=True或1表示出現的概率
plt.show()
csv資料:
輸出效果圖: