中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-06 01:54:27 來源:網絡 閱讀:5639 作者:datanalysis 欄目:編程語言

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

案例描述:

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

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

    代碼:

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

    計算結果:

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

代碼解讀:

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

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

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

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


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

 

第三方解決方案

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

    Python(pandas)

    PandasPython的第三方庫函數,其基本數據類型仿照R中的數據框,具有很強的結構化數據處理能力,目前最新版本是0.14。代碼如下:

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

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

    集算器

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

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

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓝田县| 武平县| 刚察县| 房山区| 瑞安市| 嘉定区| 洛浦县| 鹤山市| 普洱| 沂源县| 宜君县| 苏尼特左旗| 湖北省| 峨山| 白山市| 南丰县| 眉山市| 江孜县| 墨玉县| 定边县| 墨江| 迁西县| 永和县| 金平| 香港| 循化| 承德县| 新晃| 合作市| 仁寿县| 襄城县| 邯郸市| 阿克陶县| 甘孜县| 江都市| 安塞县| 合阳县| 旺苍县| 饶河县| 峨边| 微博|