首先2個(gè)包:
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),葉城企業(yè)網(wǎng)站建設(shè),葉城品牌網(wǎng)站建設(shè),網(wǎng)站定制,葉城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,葉城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
import?numpy?as?np
from?sklearn.decomposition?import?PCA
然后一個(gè)m x n 的矩陣,n為維度,這里設(shè)為x。
n_components = 12 是自己可以設(shè)的。
pca?=?PCA(n_components=12)
pca.fit(x)
PCA(copy=True,?iterated_power='auto',?n_components=12,?random_state=None,
svd_solver='auto',?tol=0.0,?whiten=False)
float_formatter?=?lambda?x:?"%.2f"?%?x
np.set_printoptions(formatter={'float_kind':float_formatter})
print?'explained?variance?ratio:'
print?pca.explained_variance_ratio_
print?'cumulative?sum:'
print?pca.explained_variance_ratio_.cumsum()
LDA降維后的維度區(qū)間在[1,C-1],C為特征空間的維度,與原始特征數(shù)n無(wú)關(guān),對(duì)于二值分類,最多投影到1維,所以我估計(jì)你是因?yàn)檫@是個(gè)二分類問(wèn)題,所以只能降到一維。
savetxt
import numpy as np
i2 = np.eye(2)
np.savetxt("eye.txt", i2)
3.4 讀入CSV文件
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True) #index從0開(kāi)始
3.6.1 算術(shù)平均值
np.mean(c) = np.average(c)
3.6.2 加權(quán)平均值
t = np.arange(len(c))
np.average(c, weights=t)
3.8 極值
np.min(c)
np.max(c)
np.ptp(c) 最大值與最小值的差值
3.10 統(tǒng)計(jì)分析
np.median(c) 中位數(shù)
np.msort(c) 升序排序
np.var(c) 方差
3.12 分析股票收益率
np.diff(c) 可以返回一個(gè)由相鄰數(shù)組元素的差
值構(gòu)成的數(shù)組
returns = np.diff( arr ) / arr[ : -1] #diff返回的數(shù)組比收盤價(jià)數(shù)組少一個(gè)元素
np.std(c) 標(biāo)準(zhǔn)差
對(duì)數(shù)收益率
logreturns = np.diff( np.log(c) ) #應(yīng)檢查輸入數(shù)組以確保其不含有零和負(fù)數(shù)
where 可以根據(jù)指定的條件返回所有滿足條件的數(shù)
組元素的索引值。
posretindices = np.where(returns 0)
np.sqrt(1./252.) 平方根,浮點(diǎn)數(shù)
3.14 分析日期數(shù)據(jù)
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True)
print "Dates =", dates
def datestr2num(s):
return datetime.datetime.strptime(s, "%d-%m-%Y").date().weekday()
# 星期一 0
# 星期二 1
# 星期三 2
# 星期四 3
# 星期五 4
# 星期六 5
# 星期日 6
#output
Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0.
1. 2. 3. 4.]
averages = np.zeros(5)
for i in range(5):
indices = np.where(dates == i)
prices = np.take(close, indices) #按數(shù)組的元素運(yùn)算,產(chǎn)生一個(gè)數(shù)組作為輸出。
a = [4, 3, 5, 7, 6, 8]
indices = [0, 1, 4]
np.take(a, indices)
array([4, 3, 6])
np.argmax(c) #返回的是數(shù)組中最大元素的索引值
np.argmin(c)
3.16 匯總數(shù)據(jù)
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
#得到第一個(gè)星期一和最后一個(gè)星期五
first_monday = np.ravel(np.where(dates == 0))[0]
last_friday = np.ravel(np.where(dates == 4))[-1]
#創(chuàng)建一個(gè)數(shù)組,用于存儲(chǔ)三周內(nèi)每一天的索引值
weeks_indices = np.arange(first_monday, last_friday + 1)
#按照每個(gè)子數(shù)組5個(gè)元素,用split函數(shù)切分?jǐn)?shù)組
weeks_indices = np.split(weeks_indices, 5)
#output
[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])]
weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)
def summarize(a, o, h, l, c): #open, high, low, close
monday_open = o[a[0]]
week_high = np.max( np.take(h, a) )
week_low = np.min( np.take(l, a) )
friday_close = c[a[-1]]
return("APPL", monday_open, week_high, week_low, friday_close)
np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s") #指定了文件名、需要保存的數(shù)組名、分隔符(在這個(gè)例子中為英文標(biāo)點(diǎn)逗號(hào))以及存儲(chǔ)浮點(diǎn)數(shù)的格式。
0818b9ca8b590ca3270a3433284dd417.png
格式字符串以一個(gè)百分號(hào)開(kāi)始。接下來(lái)是一個(gè)可選的標(biāo)志字符:-表示結(jié)果左對(duì)齊,0表示左端補(bǔ)0,+表示輸出符號(hào)(正號(hào)+或負(fù)號(hào)-)。第三部分為可選的輸出寬度參數(shù),表示輸出的最小位數(shù)。第四部分是精度格式符,以”.”開(kāi)頭,后面跟一個(gè)表示精度的整數(shù)。最后是一個(gè)類型指定字符,在例子中指定為字符串類型。
numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)
def my_func(a):
... """Average first and last element of a 1-D array"""
... return (a[0] + a[-1]) * 0.5
b = np.array([[1,2,3], [4,5,6], [7,8,9]])
np.apply_along_axis(my_func, 0, b) #沿著X軸運(yùn)動(dòng),取列切片
array([ 4., 5., 6.])
np.apply_along_axis(my_func, 1, b) #沿著y軸運(yùn)動(dòng),取行切片
array([ 2., 5., 8.])
b = np.array([[8,1,7], [4,3,9], [5,2,6]])
np.apply_along_axis(sorted, 1, b)
array([[1, 7, 8],
[3, 4, 9],
[2, 5, 6]])
3.20 計(jì)算簡(jiǎn)單移動(dòng)平均線
(1) 使用ones函數(shù)創(chuàng)建一個(gè)長(zhǎng)度為N的元素均初始化為1的數(shù)組,然后對(duì)整個(gè)數(shù)組除以N,即可得到權(quán)重。如下所示:
N = int(sys.argv[1])
weights = np.ones(N) / N
print "Weights", weights
在N = 5時(shí),輸出結(jié)果如下:
Weights [ 0.2 0.2 0.2 0.2 0.2] #權(quán)重相等
(2) 使用這些權(quán)重值,調(diào)用convolve函數(shù):
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
sma = np.convolve(weights, c)[N-1:-N+1] #卷積是分析數(shù)學(xué)中一種重要的運(yùn)算,定義為一個(gè)函數(shù)與經(jīng)過(guò)翻轉(zhuǎn)和平移的另一個(gè)函數(shù)的乘積的積分。
t = np.arange(N - 1, len(c)) #作圖
plot(t, c[N-1:], lw=1.0)
plot(t, sma, lw=2.0)
show()
3.22 計(jì)算指數(shù)移動(dòng)平均線
指數(shù)移動(dòng)平均線(exponential moving average)。指數(shù)移動(dòng)平均線使用的權(quán)重是指數(shù)衰減的。對(duì)歷史上的數(shù)據(jù)點(diǎn)賦予的權(quán)重以指數(shù)速度減小,但永遠(yuǎn)不會(huì)到達(dá)0。
x = np.arange(5)
print "Exp", np.exp(x)
#output
Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]
Linspace 返回一個(gè)元素值在指定的范圍內(nèi)均勻分布的數(shù)組。
print "Linspace", np.linspace(-1, 0, 5) #起始值、終止值、可選的元素個(gè)數(shù)
#output
Linspace [-1. -0.75 -0.5 -0.25 0. ]
(1)權(quán)重計(jì)算
N = int(sys.argv[1])
weights = np.exp(np.linspace(-1. , 0. , N))
(2)權(quán)重歸一化處理
weights /= weights.sum()
print "Weights", weights
#output
Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]
(3)計(jì)算及作圖
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
ema = np.convolve(weights, c)[N-1:-N+1]
t = np.arange(N - 1, len(c))
plot(t, c[N-1:], lw=1.0)
plot(t, ema, lw=2.0)
show()
3.26 用線性模型預(yù)測(cè)價(jià)格
(x, residuals, rank, s) = np.linalg.lstsq(A, b) #系數(shù)向量x、一個(gè)殘差數(shù)組、A的秩以及A的奇異值
print x, residuals, rank, s
#計(jì)算下一個(gè)預(yù)測(cè)值
print np.dot(b, x)
3.28 繪制趨勢(shì)線
x = np.arange(6)
x = x.reshape((2, 3))
x
array([[0, 1, 2], [3, 4, 5]])
np.ones_like(x) #用1填充數(shù)組
array([[1, 1, 1], [1, 1, 1]])
類似函數(shù)
zeros_like
empty_like
zeros
ones
empty
3.30 數(shù)組的修剪和壓縮
a = np.arange(5)
print "a =", a
print "Clipped", a.clip(1, 2) #將所有比給定最大值還大的元素全部設(shè)為給定的最大值,而所有比給定最小值還小的元素全部設(shè)為給定的最小值
#output
a = [0 1 2 3 4]
Clipped [1 1 2 2 2]
a = np.arange(4)
print a
print "Compressed", a.compress(a 2) #返回一個(gè)根據(jù)給定條件篩選后的數(shù)組
#output
[0 1 2 3]
Compressed [3]
b = np.arange(1, 9)
print "b =", b
print "Factorial", b.prod() #輸出數(shù)組元素階乘結(jié)果
#output
b = [1 2 3 4 5 6 7 8]
Factorial 40320
print "Factorials", b.cumprod()
#output
def dict_f(f): d={} for line in f: l = line.strip("\n").split(" ") d[l[0]] = l[1:] return ddef result(d_c,d_a,cookn): app,game,shoot,apply,function,iq=0,0,0,0,0,0 app = len(d_c[cookn]) for i in d_c[cookn]: for ii in d_a[i]: if (ii=="game"): game= game+1 elif(ii=="shoot"): shoot = shoot +1 elif(ii=="apply"): apply = apply +1 elif(ii=="function"): function = function +1 elif(ii=="iq"): iq = iq +1 else: pass return (app,game,shoot,apply,function,iq) f = open("cookie.txt","r+") #行首沒(méi)有空格,每個(gè)單詞之間有且僅有一個(gè)空格d_c = dict_f(f) f1 = open("app.txt","r+")#行首沒(méi)有空格,每個(gè)單詞之間有且僅有一個(gè)空格d_a = dict_f(f1)l_c = d_c.keys()l=[i for i in sorted(l_c) if(i!="") ]for i in l: print i+" "+"app=%d game=%d shoot=%d apply=%d function=%d iq=%d"%result(d_c,d_a,i)#print 可以改寫輸入到文件中
ravel():將多維數(shù)組拉平(一維)。
flatten():將多維數(shù)組拉平,并拷貝一份。
squeeze():除去多維數(shù)組中,維數(shù)為1的維度,如315降維后3*5。
reshape(-1):多維數(shù)組,拉平。
reshape(-1,5):其中-1表示我們不用親自去指定這一維度的大小,理解為n維。
python學(xué)習(xí)網(wǎng),大量的免費(fèi)python視頻教程,歡迎在線學(xué)習(xí)!