机器学习-数据科学库(第三天)
14.numpy的數(shù)組的創(chuàng)建
什么是numpy
一個在Python中做科學計算的基礎庫,重在數(shù)值計算,也是大部分PYTHON科學計算庫的基礎庫,多用于在大型、多維數(shù)組上執(zhí)行數(shù)值運算(數(shù)組就是列表、列表嵌套列表等)
import numpy as np t1 = np.array([1,2,3]) print(t1) print(type(t1)) t2 = np.array(range(10)) print(t2) t3 = np.arange(10) print(t3) print(t3.dtype) [1 2 3] <class 'numpy.ndarray'> [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9] int64 import numpy as np t1 = np.array(range(10),dtype="float64") print(t1) print(t1.dtype)t2 = t1.astype("int8") print(t2.dtype) [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] float64 int8 t3 = np.array([random.random() for i in range(10)]) print(t3) print(t3.dtype)t4 = np.round(t3,2) print(t4) [0.15551533 0.00401583 0.15190568 0.8632606 0.26929546 0.647212470.40041603 0.18216162 0.36326966 0.80083215] float64 [0.16 0. 0.15 0.86 0.27 0.65 0.4 0.18 0.36 0.8 ]15.數(shù)組的計算和數(shù)組的計算
數(shù)組的形狀
import numpy as np t1 = np.arange(12) print(t1) print(t1.shape)t2 = np.array([[1,2,3],[5,4,6]]) print(t2.shape)t3 = np.array([[[1,2,3],[5,4,6]],[[2,2,5],[5,7,3]]]) print(t3.shape)t4 = np.arange(12) print(t4.reshape((3,4)))t5 = np.arange(24).reshape((2,3,4)) print(t5)print(t5.flatten()) [ 0 1 2 3 4 5 6 7 8 9 10 11] (12,) (2, 3) (2, 2, 3) [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]] [[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]]] [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]數(shù)組和數(shù)的計算
?廣播原則
?
16.numpy讀取本地數(shù)據(jù)
軸(axis)
在numpy中可以理解為方向,使用0,1,2...數(shù)字表示,對于一個一維數(shù)組,只有一個0軸,對于2維數(shù)組(shape(2,2)),有0軸和1軸,對于三維數(shù)組(shape(2,2,3)),有0,1,2軸
?
numpy讀取數(shù)據(jù)
CSV:Comma-Separated Value,逗號分隔值文件 顯示:表格狀態(tài) 源文件:換行和逗號分隔行列的格式化文本,每一行的數(shù)據(jù)表示一條記錄 由于csv便于展示,讀取和寫入,所以很多地方也是用csv的格式存儲和傳輸中小型的數(shù)據(jù),為了方便教學,我們會經(jīng)常操作csv格式的文件,但是操作數(shù)據(jù)庫中的數(shù)據(jù)也是很容易的實現(xiàn)的
np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)?
unpack為轉(zhuǎn)置,默認為False
numpy中的轉(zhuǎn)置
?
17.numpy中的索引和切片
numpy中的索引和切片
import numpy as np a = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]]) print(a[1]) #取第一行,第三行 print(a[[0,2]]) print(a[1:]) #取列 print(a[:,0]) print(a[:,[0,2]])print(a[2,3]) print(type(a[2,3]))#取多行多列,取第2行到第三行,第2列到第三列 #取的是行列的交叉點位置 b = a[1:3,1:3]#取多個不相鄰的點 c = a[[0,1],[0,3]] print(c) #取得點是 (0,0)(1,3) [4 5 6 7] [[ 0 1 2 3][ 8 9 10 11]] [[ 4 5 6 7][ 8 9 10 11]] [0 4 8] [[ 0 2][ 4 6][ 8 10]] 11 <class 'numpy.int64'> [0 7]18.numpy中更多的索引方式
numpy中數(shù)值的修改
?
np.where(t>10,20,0) 把t中大于10的替換成20,其他的替換為0
numpy中的clip(裁剪)?
?
t里邊小于10的換成10,大于18的換成18,nan是浮點類型?
19.numpy中的nan和常用統(tǒng)計方法
?numpy中的nan的注意點
nan(NAN,Nan):not a number表示不是一個數(shù)字
什么時候numpy中會出現(xiàn)nan: ? ? ?
當我們讀取本地的文件為float的時候,如果有缺失,就會出現(xiàn)nan當做了一個不合適的計算的時候(比如無窮大(inf)減去無窮大)??
import numpy as np t3 = np.arange(12).reshape((3,4)) print(t3) print(np.sum(t3)) print(np.sum(t3,axis=0)) print(np.sum(t3,axis=1)) [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]] 66 [12 15 18 21] [ 6 22 38]那么問題來了,在一組數(shù)據(jù)中單純的把nan替換為0,合適么?會帶來什么樣的影響?
比如,全部替換為0后,替換之前的平均值如果大于0,替換之后的均值肯定會變小,所以更一般的方式是把缺失的數(shù)值替換為均值(中值)或者是直接刪除有缺失值的一行
import numpy as np t2=np.array([[0,3,3,3,3,3],[0,3,3,3,10,11],[0,13,14,15,16,17],[0,19,20,11,20,20]])print(t2.sum(axis=0)) print(t2.mean(axis=0)) print(t2.max(axis=0)) print(t2.min(axis=0)) print(np.median(t2,axis=0)) print(np.ptp(t2)) #極值,最大值和最小值之差 print(t2.std()) #標準差 [ 0 38 40 32 49 51] [ 0. 9.5 10. 8. 12.25 12.75] [ 0 19 20 15 20 20] [0 3 3 3 3 3] [ 0. 8. 8.5 7. 13. 14. ] 20 7.281540587906747?
20.numpy中填充nan和youtube數(shù)據(jù)的練習
缺失值填充均值
import numpy as np t1 = np.arange(12).reshape((3,4)).astype("float") t1[1,2:] = np.nan print(t1) for i in range(t1.shape[1]):temp_col = t1[:,i] #當前的一列nan_num = np.count_nonzero(temp_col!=temp_col)if nan_num !=0: #不為0,說明當前這一列中有nantem_not_nan_col = temp_col[temp_col==temp_col] #當前一列不為nan的arraytemp_col[np.isnan(temp_col)] = tem_not_nan_col.mean() print(t1) [[ 0. 1. 2. 3.][ 4. 5. nan nan][ 8. 9. 10. 11.]] [[ 0. 1. 2. 3.][ 4. 5. 6. 7.][ 8. 9. 10. 11.]]21.數(shù)據(jù)的拼接
數(shù)據(jù)的拼接
?????
?數(shù)組的行列交換
?
22.numpy中的隨機方法
數(shù)據(jù)拼接例子
現(xiàn)在希望把之前案例中兩個國家的數(shù)據(jù)方法一起來研究分析,同時保留國家的信息(每條數(shù)據(jù)的國家來源),應該怎么辦?
import numpy as np us_data = "" uk_data = ""#加載國家數(shù)據(jù) us_data = np.loadtxt(us_data,delimiter=",",dtype = int) uk_data = np.loadtxt(us_data,delimiter=",",dtype = int)#添加國家信息 #構造全為0的數(shù)據(jù) zeros_data = np.zeros(us_data.shape[0],1).astype(int) ones_date = np.ones(ukss_data.shape[0],1).astype(int)#分別添加一列全為0,1的數(shù)據(jù) us_data = np.hstack((us_data,zeros_data)) uk_data = np.hstack((uk_data,ones_date))numpy更多好用的方法
numpy生成隨機數(shù)
總結
以上是生活随笔為你收集整理的机器学习-数据科学库(第三天)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-数据科学库(第二天)
- 下一篇: 机器学习-数据科学库(第四天)