摘要:科學(xué)計(jì)算與數(shù)據(jù)可視化程序設(shè)計(jì)模塊最重要的一個(gè)特點(diǎn)就是其維數(shù)組對(duì)象即該對(duì)象是一個(gè)快速而靈活的大數(shù)據(jù)集容器。兩行及以上為二維表示數(shù)組各維度大小的元組。
科學(xué)計(jì)算與數(shù)據(jù)可視化1
@(程序設(shè)計(jì))
numpy模塊Numpy最重要的一個(gè)特點(diǎn)就是其N維數(shù)組對(duì)象(即ndarray)該對(duì)象是一個(gè)快速而靈活的大數(shù)據(jù)集容器。
使用Numpy,開發(fā)人員可以執(zhí)行以下操作:
1、數(shù)組的算數(shù)和邏輯運(yùn)算。
2、傅立葉變換和用于圖形操作的例程。
3、與線性代數(shù)有關(guān)的操作。
numpy.ndarray()ndarray是Numpy的數(shù)組類,其中的所有元素必須是相同的數(shù)據(jù)類型。ndarray類的重要對(duì)象屬性有:
利用array函數(shù),可以將序列類型的對(duì)象(元組、列表和其他數(shù)組)轉(zhuǎn)換成數(shù)組類型ndarray。
ndarray.ndim:數(shù)組維度。兩行及以上為二維
ndarray.shape:表示數(shù)組各維度大小的元組。
ndarray.size:數(shù)組元素的總個(gè)數(shù),等于shape屬性中元組元素的乘積。
ndarray.dtype:數(shù)組中元素的數(shù)據(jù)類型
numpy.ndarray()就是numpy的構(gòu)造函數(shù),我們可以使用這個(gè)函數(shù)創(chuàng)建一個(gè)ndarray對(duì)象。構(gòu)造函數(shù)有如下幾個(gè)可選參數(shù):
np.savetxt()將array保存到txt文件,并保持原格式
np.loadtxt()loadtxt(fname, dtype=
np.loadtxt()用于從文本加載數(shù)據(jù)。文本文件中的每一行必須含有相同的數(shù)據(jù)。
arange()numpy.arange([start, ]stop, [step, ]dtype=None)
arange函數(shù)是numpy內(nèi)置的類似range的函數(shù),其返回的是數(shù)組對(duì)象,而不是列表。
range()與arrange()的區(qū)別
1、range()和np.arange()的返回類型不同,range()返回的是range;
2、object,而np.arange()返回的是ndarray類型;
3、range()不支持步長為小數(shù),而np.arange()支持步長(step)為小數(shù);
4、range()和np.arange()都可用于迭代;
5、range()和np.arange()都有三個(gè)參數(shù),以第一個(gè)參數(shù)為起點(diǎn),第三個(gè)參數(shù)為步長,截止到第二個(gè)參數(shù)之前的不包括第二個(gè)參數(shù)的數(shù)據(jù)序列。
5、range()可用于迭代,而np.arange作用遠(yuǎn)不止于此,它是一個(gè)序列,可被當(dāng)做向量使用。
array(...)
array(object, dtype=None, copy=True, order="K", subok=False, ndmin=0)
數(shù)組的特點(diǎn):
1、數(shù)組是相同數(shù)據(jù)類型的元素的集合。
2、數(shù)組中的各元素的存儲(chǔ)是有先后順序的,它們?cè)趦?nèi)存中按照這個(gè)先后順序連續(xù)存放在一起。
3、數(shù)組元素用整個(gè)數(shù)組的名字和它自己在數(shù)組中的順序位置來表示。例如,a[0]表示名字為a的數(shù)組中的第一個(gè)元素,a[1]代表數(shù)組a的第二個(gè)元素,以此類推。
Array[0:] ——>切片從前面序號(hào)“0”開始到結(jié)尾,包括“0”位
[2, 3, 9, 1, 4, 7, 6, 8]
Array[:-1] ——>切片從后面序號(hào)“-1”到最前,不包括“-1”位
[2, 3, 9, 1, 4, 7, 6]
Array[3:-2] ——>切從前面序號(hào)“3”開始(包括)到從后面序號(hào)“-2”結(jié)束(不包括)
[1, 4, 7]
Array[3::2] ——>從前面序號(hào)“3”(包括)到最后,其中分隔為“2”
[1, 7, 8]
Array[::2] ——>從整列表中切出,分隔為“2”
[2, 9, 4, 6]
Array[3::] ——>從前面序號(hào)“3”開始到最后,沒有分隔
[1, 4, 7, 6, 8]
Array[3::-2] ——>從前面序號(hào)“3”開始,往回?cái)?shù)第二個(gè),因?yàn)榉指魹椤?2”
[1, 3]
Array[-1] ——>此為切出最后一個(gè)
8
Array[::-1] ——>此為倒序
[8, 6, 7, 4, 1, 9, 3, 2]
import numpy as np list1=[5,6.5,9,2,3,7.8,5.6,4.9] arr1=np.array(list1) print(arr1) print(arr1.dtype) #數(shù)組中元素的數(shù)據(jù)類型 print(arr1.ndim) #數(shù)組維度。兩行及以上為二維 print(arr1.shape) #表示數(shù)組各維度大小的元組。行*列 print(arr1.size) #數(shù)組元素的總個(gè)數(shù),等于shape屬性中元組元素的乘積。 list2=[[1,2,3,4,5],[6,7,8,9,10]] arr2=np.array(list2) print(arr2) print(arr2.dtype) #數(shù)組中元素的數(shù)據(jù)類型 print(arr2.ndim) #數(shù)組維度。兩行及以上為二維 print(arr2.shape) #表示數(shù)組各維度大小的元組。行*列 print(arr2.size) #數(shù)組元素的總個(gè)數(shù),等于shape屬性中元組元素的乘積。
[5. 6.5 9. 2. 3. 7.8 5.6 4.9]創(chuàng)建指定數(shù)據(jù)類型的數(shù)組對(duì)象
float64
1
(8,)
8
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
int32
2
(2, 5)
10
import numpy as np list2=[[1,2,3,4,5],[6,7,8,9,10]] arr2=np.array(list2) arr3=np.array([10,20,30,40],dtype=np.float64) print(arr3) arr4=arr2.astype(np.float64) #轉(zhuǎn)換數(shù)據(jù)類型 float->int print(arr4) print(arr4.dtype)
[10. 20. 30. 40.]練習(xí)eg13_array1.py()
[[ 1. 2. 3. 4. 5.]
[ 6. 7. 8. 9. 10.]]
float64
產(chǎn)生3個(gè)數(shù)組l1、l2、l3,分別為[0 1 2 3]、[0 2 4 6]、[0 3 6 9],輸出l1、l2、l3以及(l1,l2,l3),并將(l1,l2,l3)的內(nèi)容通過np.savetxt方法存入aa.txt文件中,然后用np.loadtxt讀出數(shù)據(jù)并顯示。程序保存為eg13_array1.py
import numpy as np l1=np.arange(4) #易錯(cuò) l2,l3=l1*2,l1*3 print("l1:",l1) print("l2:",l1) print("l3:",l1) print((l1,l2,l3)) np.savetxt("aa.txt",(l1,l2,l3)) #易錯(cuò) aa=np.loadtxt("aa.txt") print(aa)
l1 [0 1 2 3]思考:繼續(xù)eg13_array1.py
l2 [0 2 4 6]
l3 [0 3 6 9]
(array([0, 1, 2, 3]), array([0, 2, 4, 6]), array([0, 3, 6, 9]))
aa: [[0. 1. 2. 3.]
[0. 2. 4. 6.]
[0. 3. 6. 9.]]
import numpy as np l1=np.arange(4) l2,l3=l1*2,l1*3 print(l1) print(l2) print(l3) aa=np.loadtxt("aa.txt") print("aa的類型:",aa.dtype) print("aa的維度:",aa.ndim) print("aa的總個(gè)數(shù):",aa.size) print("aa的形狀:",aa.shape) #reshape()數(shù)組對(duì)象中的方法,用于改變數(shù)組的形狀 print("bb:",aa.reshape(4,3)) #reshape()改為一個(gè)四維數(shù)組
[0 1 2 3]定義數(shù)組的類型
[0 2 4 6]
[0 3 6 9]
aa的類型: float64
aa的維度: 2
aa的總個(gè)數(shù): 12
aa的形狀: (3, 4)
bb: [[0. 1. 2.]
[3. 0. 2.]
[4. 6. 0.]
[3. 6. 9.]]
import numpy as np d1=np.loadtxt("bb.txt") print("d1:",d1,"sum=",sum(d1)) d2=np.loadtxt("bb.txt",dtype=int) print("d2:",d2,"sum=",sum(d2)) d3=np.loadtxt("bb.txt",dtype=str) print("d3:",d3,"sum=",sum([eval(i) for i in d3])) #這邊不是很明白
d1: [1. 2. 3. 4. 5.] sum= 15.0astype()顯示轉(zhuǎn)換類型
d2: [1 2 3 4 5] sum= 15
d3: ["1" "2" "3" "4" "5"] sum= 15
import numpy as np aa=np.array(["1.25","-9.6","42"],dtype=np.str) bb=aa.astype(float) print(bb)
[ 1.25 -9.6 42. ]數(shù)組和標(biāo)量之間的運(yùn)算
import numpy as np arr=np.array([[1,2,3],[4,5,6]]) print(arr) print(arr*2) print(1/arr) print(arr-arr*2)
[[1 2 3]數(shù)組的元素級(jí)運(yùn)算與函數(shù)
[4 5 6]]
[[ 2 4 6]
[ 8 10 12]]
[[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]]
[[-1 -2 -3]
[-4 -5 -6]]
大小相等的數(shù)組之間的任何算數(shù)運(yùn)算都會(huì)應(yīng)用到元素級(jí)
import numpy as np arr1=np.arange(1,16).reshape(3,5) print(arr1) arr2=np.arange(1,30,2).reshape(3,5) print(arr2) print(arr1*arr2) print(arr1/arr2) print(arr1+arr2) print(arr1-arr2)
[[ 1 2 3 4 5]二元函數(shù)及說明 一維數(shù)組的索引和切片(同列表)
[ 6 7 8 9 10]
[11 12 13 14 15]]
[[ 1 3 5 7 9]
[11 13 15 17 19]
[21 23 25 27 29]]
[[ 1 6 15 28 45]
[ 66 91 120 153 190]
[231 276 325 378 435]]
[[1. 0.66666667 0.6 0.57142857 0.55555556]
[0.54545455 0.53846154 0.53333333 0.52941176 0.52631579]
[0.52380952 0.52173913 0.52 0.51851852 0.51724138]]
[[ 2 5 8 11 14]
[17 20 23 26 29]
[32 35 38 41 44]]
[[ 0 -1 -2 -3 -4]
[ -5 -6 -7 -8 -9]
[-10 -11 -12 -13 -14]]
數(shù)組切片是原始數(shù)組的視圖,數(shù)據(jù)并不會(huì)被復(fù)制,即視圖上的任何修改都會(huì)直接反映到源數(shù)組上。
讀csv文件
c,v=np.loadtxt("data.csv", delimiter=",", usecols=(6,7), unpack=True,skiprows=1)
fname:讀取文件的文件名。例如C:/Dataset/iris.txt。
delimiter:數(shù)據(jù)之間的分隔符。如使用逗號(hào)","。
dtype:數(shù)據(jù)類型。如float,str等。
usecols:選取數(shù)據(jù)的列。
skiprows : list-like or integer, default None需要忽略的行數(shù)(從文件開始處算起),或需要跳過的行號(hào)列表(從0開始)。
平均值和加權(quán)平均值np.mean()
np.average()
對(duì)應(yīng)的權(quán)值列表:weights=[]
將各數(shù)值乘以相應(yīng)的權(quán)數(shù),然后加總求和得到總體值,再除以總的單位數(shù)。
import numpy as np a=(70,80,60) print(np.mean(a)) #平均值 print(np.average(a,weights=[3,3,4])) #加權(quán)平均值 average()
70.0VWAP(Volume-Weighted Average Price):成交量加權(quán)平均價(jià)格
69.0
代表金融資產(chǎn)的“平均”價(jià)格,某個(gè)價(jià)格的成交量越高,該價(jià)格所占的權(quán)重就越大
VWAP就是以成交量為權(quán)重計(jì)算出來的加權(quán)平均值
TWAP(Time-Weighted Average Price):時(shí)間加權(quán)平均價(jià)格只是一個(gè)變種,基本的思想就是最近的價(jià)格重要性大一些,僅僅為了說明問題,并不一定非常正確
選用arange函數(shù)創(chuàng)建一個(gè)從0開始依次增長的自然數(shù)序列,自然數(shù)的個(gè)數(shù)即為收盤價(jià)的個(gè)數(shù)
例題:eg3_vwap_twap.py利用data.csv文件,讀出收盤價(jià)、成交量,計(jì)算成交量加權(quán)平均價(jià)格VWAP、算術(shù)平均值和時(shí)間加權(quán)平均價(jià)格TWAP,程序保存為eg13_vwap_twap3.py
import numpy as np c,v=np.loadtxt("data.csv", delimiter=",", usecols=(6,7), unpack=True,skiprows=1) #usecols列數(shù)是從0開始的 print("收盤價(jià):",c) print("成交量:",v) vwap=np.average(c,weights=v) print("成交量加權(quán)平均價(jià)格VWAP=%f"%vwap) #這邊看不太懂?成交量加權(quán)平均價(jià)格 print("算術(shù)平均值mean1=",np.mean(c)) #算術(shù)平均值 print("算術(shù)平均值mean1=",c.mean()) #算術(shù)平均值 t=np.arange(len(c)) print("時(shí)間加權(quán)平均價(jià)格=",np.average(c,weights=t)) #時(shí)間加權(quán)平均價(jià)格
收盤價(jià): [336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16 354.54
356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62 342.88 348.16
353.21 349.31 352.12 359.56 360. 355.36 355.76 352.47 346.67 351.99]
成交量: [21144800. 13473000. 15236800. 9242600. 14064100. 11494200. 17322100.
17184100.
14395400.
16192700.
16824200.]
成交量加權(quán)平均價(jià)格VWAP=350.589549
算術(shù)平均值mean1= 351.0376666666667
算術(shù)平均值mean1= 351.0376666666667
時(shí)間加權(quán)平均價(jià)格= 352.4283218390804
ptp函數(shù)可以計(jì)算數(shù)組的取值范圍,返回?cái)?shù)組元素的最大值和最小值之間的差值,即返回值=max(array)-min(array)
示例4:eg13_max_min4.py利用data.csv,計(jì)算最高價(jià)中的最大值和最小值以及最高價(jià)和最低價(jià)中最大值和最小值之間的差值,程序保存為eg13_max_min4.py
import numpy as np hst,lst=np.loadtxt("data.csv",delimiter=",",usecols=(4,5), unpack=True,skiprows=1) hh=np.max(hst) ll=np.min(hst) print("最高價(jià)中最大值=",hh) print("最高價(jià)中最小值=",ll) #np.ptp() print("最高價(jià)中最大值和最小值之間的差值=","%.2f"%np.ptp(hst)) print("最低價(jià)中最大值和最小值之間的差值=","%.2f"%np.ptp(lst))
最高價(jià)中最大值= 364.9數(shù)組的基本統(tǒng)計(jì)分析函數(shù)及說明 argmax、argmin、max、min
最高價(jià)中最小值= 340.04
最高價(jià)中最大值和最小值之間的差值= 24.86
最低價(jià)中最大值和最小值之間的差值= 26.97
import numpy as np b=np.array([1,5,8,9,334]) print(np.argmax(b)) #np.argmax();np.argmin print(np.argmin(b)) #reshape()的乘積剛好是arange()的列*行 print(np.arange(7,17).reshape(2,5))
4axis
0
[[ 7 8 9 10 11]
[12 13 14 15 16]]
axis=0 跨行
axis=1 跨列
import numpy as np a=np.arange(7,17).reshape(2,5) print(a) print(np.argmin(a,axis=0)) print(np.argmin(a,axis=1))
[[ 7 8 9 10 11]NumPy常用函數(shù):計(jì)算中位數(shù)和方差 思考1:si13_var1.py
[12 13 14 15 16]]
[0 0 0 0 0]
[0 0]
中位數(shù):np.median()
方差:np.var()
import numpy as np price=np.loadtxt("data.csv",delimiter=",",usecols=(6,),unpack=True,skiprows=1) print(price) print("中位數(shù):",np.median(price)) print("方差:", np.var(price))
[336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16 354.54
356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62 342.88 348.16
353.21 349.31 352.12 359.56 360. 355.36 355.76 352.47 346.67 351.99]
中位數(shù): 352.055
方差: 50.126517888888884
import numpy as np price=np.loadtxt("data.csv",delimiter=",",usecols=(6,),unpack=True,skiprows=1) print(price) print("中位數(shù)",np.median(price)) #驗(yàn)證剛才求的中位數(shù)是否正確 #1、將數(shù)組進(jìn)行排序 sorted = np.msort(price) print(sorted) #2、計(jì)算數(shù)組的元素個(gè)數(shù) n = len(sorted) print(n) #print("middle", "=", sorted[n - 1]//2) #n為奇數(shù) print("中位數(shù):", (sorted[n // 2] + sorted[(n - 1) // 2]) / 2) #n為偶數(shù) #方差等于各個(gè)數(shù)據(jù)與平均數(shù)之差的平方和的平均數(shù),用來度量隨機(jī)變量和其數(shù)學(xué)期望(即均值)之間的偏離程度 #((x1 - a)^2 + (x2 - a)^2 + (x3 - a)^2 ... + (xn - a)^2) / n print("方差:", np.var(price))
[336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16 354.54簡單收益率和對(duì)數(shù)收益率
356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62 342.88 348.16
353.21 349.31 352.12 359.56 360. 355.36 355.76 352.47 346.67 351.99]
中位數(shù) 352.055
[336.1 338.61 339.32 342.62 342.88 343.44 344.32 345.03 346.5 346.67
348.16 349.31 350.56 351.88 351.99 352.12 352.47 353.21 354.54 355.2
355.36 355.76 356.85 358.16 358.3 359.18 359.56 359.9 360. 363.13]
30
中位數(shù): 352.055
方差: 50.126517888888884
簡單收益率:相鄰兩個(gè)價(jià)格之間的變化率
對(duì)數(shù)收益率:所有價(jià)格取對(duì)數(shù)后兩兩之間的差值,也可以用來衡量價(jià)格的變化率
計(jì)算歷史波動(dòng)率(如年波動(dòng)率和月波動(dòng)率)時(shí),需要用到對(duì)數(shù)收益率。
* 如果a的x次方等于N(a>0,且a不等于1),那么數(shù)x叫做以a為底N的對(duì)數(shù)(logarithm),記作x=logaN。其中,a叫做對(duì)數(shù)的底數(shù),N叫做真數(shù)。
年波動(dòng)率 = 對(duì)數(shù)收益率的標(biāo)準(zhǔn)差std / 其均值mean,再除以交易日倒數(shù)的平方根。通常交易日取252天。
diff函數(shù)返回一個(gè)由相鄰數(shù)組元素的差值構(gòu)成的數(shù)組
import numpy as np a=np.array([1,2,5,4,3,7,8,38]) print(np.diff(a))
[ 1 3 -1 -1 4 1 30]numpy.where(暫時(shí)不看)
where(condition, [x, y]):
-- x, y不為空: condition為True, 返回x; False, 返回y -- x, y為空: 返回condition為True的數(shù)組下標(biāo)
np.where(關(guān)系表達(dá)式):數(shù)組中滿足關(guān)系表達(dá)式的元素的下標(biāo)數(shù)組
numpy.take(暫時(shí)不看)np.take(數(shù)組,下標(biāo)數(shù)組):數(shù)組中由下標(biāo)數(shù)組所表示的元素集合
利用data.csv,對(duì)于收盤價(jià),計(jì)算簡單收益率及標(biāo)準(zhǔn)差、對(duì)數(shù)收益率及標(biāo)準(zhǔn)差、年波動(dòng)率和月波動(dòng)率
import numpy as np c=np.loadtxt("data.csv",delimiter=",",usecols=(6,), unpack=True,skiprows=1) returns=np.diff(c)/c[:-1] print("簡單收益率",returns) print("簡單收益率的標(biāo)準(zhǔn)差:",np.std(returns)) logreturns=np.diff(np.log(c)) print("對(duì)數(shù)收益率:",logreturns) print("對(duì)數(shù)收益率的標(biāo)準(zhǔn)差:",np.std(logreturns)) posretindices=np.where(returns>0) print("所有正值元素的元素值:",np.take(returns.posretindices)) #有問題 annual_volatility=np.std(logreturns)/np.mean(logreturns) annual_volatility=annual_volatility/np.sqrt(1/252) print("年波動(dòng)率",annual_volatility) print("月波動(dòng)率",annual_volatility*np.sqrt(1/12))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44035.html
摘要:在本節(jié)中,我們將看到一些最流行和最常用的庫,用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)是用于數(shù)據(jù)挖掘,分析和機(jī)器學(xué)習(xí)的最流行的庫。愿碼提示網(wǎng)址是一個(gè)基于的框架,用于使用多個(gè)或進(jìn)行有效的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯...
摘要:屬于前一種,而且日益被用于數(shù)學(xué)計(jì)算機(jī)器學(xué)習(xí)和多種數(shù)據(jù)科學(xué)應(yīng)用。近來,由于擁有多個(gè)針對(duì)機(jī)器學(xué)習(xí)自然語言處理數(shù)據(jù)視覺化數(shù)據(jù)探索數(shù)據(jù)分析和數(shù)據(jù)挖掘的插件,豐富的數(shù)據(jù)科學(xué)生態(tài)體系得到了較大的發(fā)展,甚至有將數(shù)據(jù)科學(xué)社區(qū)化的趨勢。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發(fā)布時(shí)間是10月29日。譯者一...
摘要:雖然我們可以在網(wǎng)上參照各種模板項(xiàng)目文章博客等創(chuàng)建一個(gè)數(shù)據(jù)科學(xué)項(xiàng)目,但是目前也沒有教科書對(duì)這些知識(shí)做一個(gè)統(tǒng)一的回答。舉個(gè)例子來說,數(shù)據(jù)科學(xué)分析項(xiàng)目通常就不需要部署和監(jiān)控這兩個(gè)過程。創(chuàng)建文件描述源數(shù)據(jù)及位置。進(jìn)一步探索和報(bào)告在整個(gè)數(shù)據(jù)科學(xué)項(xiàng)目中 摘要:?在一個(gè)新的數(shù)據(jù)科學(xué)項(xiàng)目,你應(yīng)該如何組織你的項(xiàng)目流程?數(shù)據(jù)和代碼要放在那里?應(yīng)該使用什么工具?在對(duì)數(shù)據(jù)處理之前,需要考慮哪些方面?讀完本文...
閱讀 3898·2021-11-22 13:54
閱讀 2673·2021-09-30 09:48
閱讀 2359·2021-09-28 09:36
閱讀 3110·2021-09-22 15:26
閱讀 1342·2019-08-30 15:55
閱讀 2509·2019-08-30 15:54
閱讀 1424·2019-08-30 14:17
閱讀 2340·2019-08-28 18:25