1. 程式人生 > >Python 3.x--資料分析: numpy(一)

Python 3.x--資料分析: numpy(一)

所謂自由,不是隨心而欲,而是自我主宰

numpy介紹:

前言:

因為Python中array模組只支援一維陣列,不支援多維陣列,也沒有各種運算函式,不適合數值運算,所以numpy的出現彌補了不足

NUMPY庫(簡稱np)是Python資料分析中必不可少的第三方庫,np是Python其他科學計算包的基礎包,是資料分析的基礎,np是Scipy,Pandas等資料處理或科學計算庫最基本的函式功能庫。
因此,充分理解和應用np的資料型別對Python資料分析幫助很大,因為需求,所以最近要好好的學習一下有關資料分析的基本知識,那麼就從numpy開始~

numpy的主要物件

是由同種元素構成的多維陣列(ndarray),簡稱“陣列”

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資料:
這裡寫圖片描述

輸出效果圖:
這裡寫圖片描述