真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python衰減函數(shù) python阻尼衰減曲線繪制

利用Python進(jìn)行數(shù)據(jù)分析(10)-移動(dòng)窗口函數(shù)

Python-for-data-移動(dòng)窗口函數(shù)

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括漢臺(tái)網(wǎng)站建設(shè)、漢臺(tái)網(wǎng)站制作、漢臺(tái)網(wǎng)頁制作以及漢臺(tái)網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,漢臺(tái)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到漢臺(tái)省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

本文中介紹的是 ,主要的算子是:

統(tǒng)計(jì)和通過其他移動(dòng)窗口或者指數(shù)衰減而運(yùn)行的函數(shù),稱之為 移動(dòng)窗口函數(shù)

style scoped="".dataframe tbody tr th:only-of-type { vertical-align: middle; } precode.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } /code/pre/style

2292 rows × 3 columns

rolling算子,行為和resample和groupby類似

rolling可以在S或者DF上通過一個(gè)window進(jìn)行調(diào)用

style scoped="".dataframe tbody tr th:only-of-type { vertical-align: middle; } precode.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } /code/pre/style

2292 rows × 3 columns

指定一個(gè)常數(shù)衰減因子為觀測(cè)值提供更多的權(quán)重。常用指定衰減因子的方法:使用span(跨度)

一些統(tǒng)計(jì)算子,例如相關(guān)度和協(xié)方差等需要同時(shí)操作兩個(gè)時(shí)間序列。

例如,金融分析中的股票和基準(zhǔn)指數(shù)的關(guān)聯(lián)性問題:計(jì)算時(shí)間序列的百分比變化pct_change()

style scoped="".dataframe tbody tr th:only-of-type { vertical-align: middle; } precode.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } /code/pre/style

在rolling及其相關(guān)方法上使用apply方法提供了一種在移動(dòng)窗口中應(yīng)用自己設(shè)計(jì)的數(shù)組函數(shù)的方法。

唯一要求:該函數(shù)從每個(gè)數(shù)組中產(chǎn)生一個(gè)單值(縮聚),例如使用rolling()...quantile(q)計(jì)算樣本的中位數(shù)

python有多少內(nèi)置函數(shù)

Python內(nèi)置函數(shù)有很多,為大家推薦5個(gè)神仙級(jí)的內(nèi)置函數(shù):

(1)Lambda函數(shù)

用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來執(zhí)行單個(gè)操作并且可以在一行中編寫時(shí),就可以用到匿名函數(shù)了。

Lamdba的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。

利用Lamdba函數(shù),往往可以將代碼簡(jiǎn)化許多。

(2)Map函數(shù)

會(huì)將一個(gè)函數(shù)映射到一個(gè)輸入列表的所有元素上,比如我們先創(chuàng)建了一個(gè)函數(shù)來返回一個(gè)大寫的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。

我們還可以使用匿名函數(shù)lamdba來配合map函數(shù),這樣可以更加精簡(jiǎn)。

(3)Reduce函數(shù)

當(dāng)需要對(duì)一個(gè)列表進(jìn)行一些計(jì)算并返回結(jié)果時(shí),reduce()是個(gè)非常有用的函數(shù)。舉個(gè)例子,當(dāng)需要計(jì)算一個(gè)整數(shù)列表所有元素的乘積時(shí),即可使用reduce函數(shù)實(shí)現(xiàn)。

它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個(gè)參數(shù),而map接收一個(gè)參數(shù)。

(4)enumerate函數(shù)

用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。

它的兩個(gè)參數(shù),一個(gè)是序列、迭代器或其他支持迭代對(duì)象;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開始,也可以自定義計(jì)數(shù)器的起始編號(hào)。

(5)Zip函數(shù)

用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表

當(dāng)我們使用zip()函數(shù)時(shí),如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長度與最短的對(duì)象相同。

python數(shù)據(jù)分析與應(yīng)用第三章代碼3-5的數(shù)據(jù)哪來的

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開始

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)開始。接下來是一個(gè)可選的標(biāo)志字符:-表示結(jié)果左對(duì)齊,0表示左端補(bǔ)0,+表示輸出符號(hào)(正號(hào)+或負(fù)號(hào)-)。第三部分為可選的輸出寬度參數(shù),表示輸出的最小位數(shù)。第四部分是精度格式符,以”.”開頭,后面跟一個(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è)長度為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)過翻轉(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

Python 幾個(gè)重要的內(nèi)置函數(shù)

在學(xué)習(xí)Python的過程中,有幾個(gè)比較重要的內(nèi)置函數(shù):help()函數(shù)、dir()函數(shù)、input()與raw_input()函數(shù)、print()函數(shù)、type()函數(shù)。

第一、help()函數(shù)

Help()函數(shù)的參數(shù)分為兩種:如果傳一個(gè)字符串做參數(shù)的話,它會(huì)自動(dòng)搜索以這個(gè)字符串命名的模塊、方法等;如果傳入的是一個(gè)對(duì)象,就會(huì)顯示這個(gè)對(duì)象的類型的幫助。比如輸入help(‘print’),它就會(huì)尋找以‘print’為名的模塊、類等,找不到就會(huì)看到提示信息;而print在Python里是一個(gè)保留字,和pass、return同等,而非對(duì)象,所以help(print)也會(huì)報(bào)錯(cuò)。

第二、dir()函數(shù)

dir()函數(shù)返回任意對(duì)象的屬性和方法列表,包含模塊對(duì)象、函數(shù)對(duì)象、字符串對(duì)象、列表對(duì)象、字典對(duì)象等。盡管查找和導(dǎo)入模塊相對(duì)容易,但是記住每個(gè)模塊包含什么卻不是這么簡(jiǎn)單,您并不希望總是必須查看源代碼來找出答案。Python提供了一種方法,可以使用內(nèi)置的dir()函數(shù)來檢查模塊的內(nèi)容,當(dāng)你為dir()提供一個(gè)模塊名的時(shí)候,它返回模塊定義的屬性列表。dir()函數(shù)適用于所有對(duì)象的類型,包含字符串、整數(shù)、列表、元組、字典、函數(shù)、定制類、類實(shí)例和類方法。

第三、input與raw_input函數(shù)

都是用于讀取用戶輸入的,不同的是input()函數(shù)期望用戶輸入的是一個(gè)有效的表達(dá)式,而raw_input()函數(shù)是將用戶的輸入包裝成一個(gè)字符串。

第四、Print()函數(shù)

Print在Python3版本之間是作為Python語句使用的,在Python3里print是作為函數(shù)使用的。

第五、type()函數(shù)

Type()函數(shù)返回任意對(duì)象的數(shù)據(jù)類型。在types模塊中列出了可能的數(shù)據(jù)類型,這對(duì)于處理多種數(shù)據(jù)類型的函數(shù)非常有用,它通過返回類型對(duì)象來做到這一點(diǎn),可以將這個(gè)類型對(duì)象與types模塊中定義類型相比較。

python 8個(gè)常用內(nèi)置函數(shù)解說

8個(gè)超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()

python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。

這次來梳理下8個(gè)好用的python內(nèi)置函數(shù)

1、set()

當(dāng)需要對(duì)一個(gè)列表進(jìn)行去重操作的時(shí)候,set()函數(shù)就派上用場(chǎng)了。

用于創(chuàng)建一個(gè)集合,集合里的元素是無序且不重復(fù)的。集合對(duì)象創(chuàng)建后,還能使用并集、交集、差集功能。

2、eval()之前有人問如何用python寫一個(gè)四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡(jiǎn)單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。

3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會(huì)用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted() ,它可以對(duì)任何可迭代對(duì)象進(jìn)行排序,并返回列表。對(duì)列表升序操作:

對(duì)元組倒序操作:

使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:

根據(jù)自定義規(guī)則,對(duì)元組構(gòu)成的列表進(jìn)行排序:

4、reversed()如果需要對(duì)序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個(gè)序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。

5、map()做文本處理的時(shí)候,假如要對(duì)序列里的每個(gè)單詞進(jìn)行大寫轉(zhuǎn)化操作。這個(gè)時(shí)候就可以使用map()函數(shù)。

map()會(huì)根據(jù)提供的函數(shù),對(duì)指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會(huì)把序列里的每一個(gè)元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個(gè)例子,對(duì)列表里的每個(gè)數(shù)字作平方處理:

6、reduce()前面說到對(duì)列表里的每個(gè)數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個(gè)元素相乘,該怎么做呢?這時(shí)候用到reduce()函數(shù)。

reduce()會(huì)對(duì)參數(shù)序列中元素進(jìn)行累積。第一、第二個(gè)元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個(gè)元素進(jìn)行函數(shù)操作,以此類推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個(gè)例子,將字母連接成字符串。

你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因?yàn)樗匾恕?/p>

7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?

filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個(gè)元素映射到函數(shù),最終返回結(jié)果。我們?cè)僭囋?,如何從許多單詞里挑出包含字母w的單詞。

8、enumerate()這樣一個(gè)場(chǎng)景,同時(shí)打印出序列里每一個(gè)元素和它對(duì)應(yīng)的順序號(hào),我們用enumerate()函數(shù)做做看。

enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對(duì)序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個(gè)例子說明,對(duì)字符串進(jìn)行標(biāo)注,返回每個(gè)字母和其索引。


分享文章:python衰減函數(shù) python阻尼衰減曲線繪制
文章地址:http://weahome.cn/article/hhjgjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部