表示、清洗、統計和展示資料
Numpy庫入門
NumPy是一個開源的Python科學計算基礎庫,包含:
• 一個強大的N維數組對象 ndarray
• 廣播功能函數
• 整合C/C++/Fortran代碼的工具
• 線性代數、傅裡葉變換、随機數生成等功能
NumPy是SciPy、 Pandas等資料處理或科學計算庫的基礎
dataframe指派
隻截取特定列
df = df.iloc[:,:6]
計算不重複的個數
df.unique()
df.value_count()
指派
df.map({df裡的值,替換的值})
data[col].replace(‘yes’,‘True’).replace(‘no’,‘False’).astype(np.bool)
删除某列空值所在的行
data = df[(df[’’]==999)].index.tolist()找出空行所在索引
df.drop(data)
df[df[’’].isin([])==False] #找到不含特定值的資料
df = df.dropna()
與list差別
- list每個元素可以是不同的類型,numpy每個元素類型一樣
- numpy比list速度快非常多,%timeit
評價函數
機率大于0.5指派為一
np_data = np.array([0.1,0.3,0.7,0.4,0.9])
np.where(np_data> 0.5, 1, 0)
NumPy的數組對象:ndarray
建立方法:
1.從Python中的清單、元組((1,2),[1,2])等類型建立
2.從Numpy中函數建立數組,如:arange,ones,zeros**
a = np.linspace(1,10,4)
#array([1.,4.,7.,10]) endpoint預設true
3.位元組流
4.檔案中讀取特定格式
ndarray數組變換
use the numpy.copy function to separate the arrays memory-wise.
轉換資料類型
new_a = a.astype(new_type)
astype會建立新的數組
a = np.ones((2,3,4),dtype=np.int)
b = a.astype(np.float)
轉換成清單,失去部分排列規則
ls=a.tolist()
ndarray數組操作
索引(擷取特定位置元素)+切片(擷取數組元素子集)
切片:
一維:a[1:4:2] 起始編号:終止編号(不含):步長
多元:a[:,:,::2]使用步長跳躍切片
從數組中傳回所需的索引,無論其尺寸如何,numpy.where()
要删除特定的索引,可以使用numpy.delete()
ndarray數組運算
數組與标量的運算作用于數組每個元素
一進制函數:np.abs(x),np.sqrt(x),mp.square(x),np.ceil(x)
二進制函數:
-
-
- / ** np.fmax() np.fmin()
-
python已有清單類型,為什麼需要一個數組對象(類型)?
- 省略每個元素運算所需循環,使得一維向量像單個資料
- 優化後提升這類運算速度
import numpy as np
a = np.array([0,1,2,3,4])
b = np.array([0,1,2,3,4])
c = a**2 + b**3
import numpy as np
a = [0,1,2,3,4]
b = [0,1,2,3,4]
c = []
for i in range(len(a)):
c.append(a[i]**2+b[i]**3)
ndarray是一個多元數組對象,由實際資料和描述資料的中繼資料(資料次元、資料類型)構成
一般要求所有元素類型相同(同質),數組下标從0開始
ndarray對象屬性
Numpy庫資料存取
普通文本檔案讀入和寫入
讀取
f = open('somefile.txt', 'r')
alist = f.readlines()
f.close()
寫入
f = open('newtextfile.txt', 'w')
f.writelines(newdata)
f.close()
數組存儲
當資料量非常大時,且類型一緻,使用如下方式更快速
np.savetxt(frame, array, fmt=’%.18e’, delimiter=None)
frame:檔案、字元串或産生器
fmt:格式,如%d,%.2f
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
dtype:類型預設float
unpack:如果為True,讀入屬性将分别寫入不同變量
存為二進制檔案使用 numpy.savez
任意次元存取
a.tofile(frame, sep=’’, format=’%s’)
sep : 資料分割字元串,如果是空串,寫入檔案為二進制
**np.fromfile(**frame, dtype=float, count=‐1, sep=’’)
• count : 讀入元素個數, ‐1表示讀入整個檔案
便捷檔案存取
np.save(fname, array) / np.savez(fname, array)
np.load(fname)
随機函數庫
numpy統計函數
梯度函數:np.gradient(f)
梯度:連續值之間的變化率