欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

R語言計算移動平均的方法

    移動平均可以使時間序列變平滑,是典型的有序計算問題,其基本算法是:將N個連續(xù)的時間序列成員作為一個集合,計算該集合的平均值,并逐項推移該集合。下面用一個例子來說明R計算移動平均的方法。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)公司).為客戶提供專業(yè)的四川雅安電信機房,四川各地服務(wù)器托管,四川雅安電信機房、多線服務(wù)器托管.托管咨詢專線:028-86922220

案例描述:

數(shù)據(jù)框sales有兩個字段:日期和當日銷售額,需要計算三日移動平均值。具體算法是:求出前一日、當日、后一日的銷售額平均值,并逐日推移。部分源數(shù)據(jù)如下:

R語言計算移動平均的方法

    代碼:

    filter(sales$Amount/3, rep(1, 3))

    計算結(jié)果:

R語言計算移動平均的方法

代碼解讀:

    R語言可以用函數(shù)filter計算移動平均值,代碼簡短,非常方便。

    函數(shù)filter雖然很方便,但初學(xué)者卻不易理解。比如sales$Amount/3的本意是將Amount字段中的當前值除以3,但用在filter函數(shù)里卻能將前后三個值相加再除以三。表達式rep(1,3)的值為[1,1,1],用在這里卻能指定取數(shù)范圍。另外,filter的函數(shù)名和參數(shù)名中既沒有“平均”,也沒有“移動”,許多R語言開發(fā)者都不知道它可以用來計算移動平均值。

    事實上,函數(shù)filter是個通用的線性過濾器,它的作用不止計算移動平均值這么簡單。其完整的函數(shù)說明如下:filter(x, filter, method= c("convolution", "recursive"),sides = 2,circular = FALSE, init)。

    如果想改動一下算法,代碼就會更難理解,比如要計算當日、前一日、前兩日這三天的移動平均值,不能寫成:filter(sales$Amount/3,rep(0,2)),而應(yīng)該是filter(sales$Amount/3,rep(1,3), sides = 1)。


總結(jié): R語言可以計算移動平均值,但代碼難理解。

 

第三方解決方案

    本案例也可以用Python、集算器、Perl等語言來實現(xiàn)。和R語言一樣,這幾種語言都可以進行數(shù)據(jù)的統(tǒng)計分析,都可以計算移動平均值,下面簡單介紹Python和集算器的解決方案。

    Python(pandas)

    Pandas是Python的第三方庫函數(shù),其基本數(shù)據(jù)類型仿照R中的數(shù)據(jù)框,具有很強的結(jié)構(gòu)化數(shù)據(jù)處理能力,目前最新版本是0.14。代碼如下:

         pandas.stats.moments.rolling_mean(sales["Amount"],3)

    rolling_mean這個函數(shù)名一目了然,即使剛接觸pandas的開發(fā)者也能輕易查到這個函數(shù),rolling_mean的用法也很簡潔,第一個參數(shù)是被計算的序列,第二個參數(shù)是N日移動平均值中的N。

    集算器

    集算器擅長以敏捷語法自由表達業(yè)務(wù)邏輯,其相對位置表達式可以方便地解決有序計算中的難題。代碼所示:

         sales.(Amount{-1,1}.avg())

    代碼中的{-1,1}表示相對區(qū)間,即前一日和后一日之間的三天??梢钥吹?,使用相對區(qū)間可以直觀地計算移動平均值,而且更加靈活。比如同樣改動算法:計算當日、前一日、前兩日這三天的移動平均值,集算器只需將區(qū)間改為{-2,0}。

    相對區(qū)間是個集合,集算器還可以表達相對位置的元素,比如銷售增長額可以用sales(Amount -Amount[-1])來直觀計算,而R語言和Python就沒這么好理解。

網(wǎng)站標題:R語言計算移動平均的方法
分享路徑:http://chinadenli.net/article24/jiidje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、、App設(shè)計標簽優(yōu)化、用戶體驗建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司