R語言時間序列數據應用xts

zoo是時間序列的基礎庫,是面向通用的設計。 xts 是對時間序列庫(zoo) 的一種擴展實現。xts 類型繼承了zoo 類型,豐富了時間序列數據處理的函數。

一、xts對象的結構和定義

1xts對象是一個具有時間索引的觀測值矩陣,結構如下

? xts = matrix + times

2、創建xts對象,函數如下:

xts?(x= , ?order.by= , ?…? )

參數?? x :?數據,必須是一個向量或者矩陣;

order.by: 索引(index),是一個與x行數相同的升序排列的時間對象。

創建示例:

data <- rnorm(5)

dates <- seq(as.Date("2016-01-01"), length = 5, by = "days")

smith <- xts(x = data, order.by = dates)

3屬性(Attr

xts允許數據綁定任意鍵值屬性,可用來保存對象的元數據。創建xts對象時添加屬性,只需要將name=value參數傳送給xts()函數。

#使用 POSIXct日期類對象創建bday
bday <- as.POSIXct("1899-05-08")

# 創建xts對象,并新增born屬性
hayek <- xts(x = data, order.by = dates, born = bday)

4、分解xts對象

xts?和?zoo的核心是一個簡單的R矩陣和一些附加屬性,最重要的屬性是索引(?index)。索引包含了將數據作為時間序列的所有信息。

coredata()? ?獲取xts對象中的矩陣部分。

index()??? ??獲取xts對象的index部分。

5、轉換成xts對象

??as.xts()

6xts與其他時間序列的主要區別

xts與R大部分其他時間序列對象的主要區別是:?xts可以使用表示時間的任何類,不管是POSIXct,?Date 還是其他類,xts將它們轉換成一種內部格式,使用戶盡可能自然地選取子集。

a <- xts(x = 1:2, as.Date("2012-01-01") + 0:1)

a[index(a)]

7、索引的屬性

查看索引的類別?indexClass()?

查看索引的時區?indexTZ()?

顯示或修改索引時間格式? ?indexFormat()?

# 修改時間表示格式
indexFormat(temps) <- "%m/%d/%Y"

tzone(), 用于提取或設置時區。

tzone(x) <- "Time_Zone"

?

Xts對象的索引的原始向量是自UNIX紀元(1970-01-01)以來的累計秒數的向量

.index()可獲取索引的原始向量。

以下函數用于提取類似于POSIXlt?類型的時間組件:

.indexday()

.indexmon()

.indexyear()
#創建一個周末日期索引
index <- which(.indexwday(temps) == 0 | .indexwday(temps) == 6)

?

二、輸入和輸出xts數據

1、實際應用中從硬盤或者網絡中讀取數據。

例如,硬盤中的tmp_file文件的內容如下:

a,b

1/02/2015, 1, 3

2/03/2015, 2, 4

輸入示例1:

# 讀取tmp_file文件
dat<-read.csv(tmp_file)

#將dat轉換成xts格式
xts(dat, order.by = as.Date(rownames(dat), "%m/%d/%Y"))

輸入示例2:

#使用read.zoo讀取tmp_file文件
dat_zoo <- read.zoo(tmp_file, index.column = 0, sep = ",", format = "%m/%d/%Y")

#將dat_zoo轉換成xts
dat_xts <- xts(dat_zoo)

輸入示例3:

# FUN = as.yearmon將時間字符串轉換成更合適的時間類。

sun <- read.zoo(tmp_file, sep = ",", FUN = as.yearmon)

# 轉換成xts對象
sun_xts<-xts(sun)

2、?輸出xts 對象

主要有兩種方式:

1、使用saveRDS() 和readRDS()?將單個R對象序列化。

2、使用?zoo中的函數?write.zoo()

#獲取臨時文件名
tmp <- tempfile()

#使用zoo將xts對象寫入tmp文件
write.zoo(data_xts, sep = ",", file = tmp)

?

三、查詢時間范圍

1、查詢日期范圍

Xts可快速有效地確定日期和時點范圍的子集,并提取相應的觀測值。

使用特殊字符和日期搭配就可提取xts對象的日期范圍。

A["20090825"]?????? ## 20090825

A["201203/201212"]????? ?## 201203至201212

A["/201601"]???????## 自 201601開始

2、提取每日時間間隔

# 選取所有日期9:30-16:00之間的觀測值

NYSE["T09:30/T16:00"]

3、觀測值的更新或替換

# 將dates向量中對應的觀測值設置為NA

x[dates] <- NA

# 自2016-06-09至今的觀測值修改為0

x["2016-06-09/"] <- 0

4、定位時間周期的開始和結束
last(temps, "1 week")

last(lastweek, 2)

first(lastweek, "-2 days")

?可以將first()和last()組合起來使用

#第1周的后3天

last(first(Temps, '1 week'), '3 days')

5、查看時間周期性和次數

periodicity()? 查看時間序列的周期

?ndays()?,?nmonths(),?nquarters() ?查看周期的次數

?

四、xts對象的合并運算

?xts?objects在做數學計算時,會遵循時間并且只返回有時間交集的數據。?

1、用merge按列合并xts

merge()將一個或多個序列按列合并。適用于按固定日期來規范觀測值。

merge(a, b, join = "right", fill = 9999)

3個關鍵參數:

?... :用于合并的任意個的對象

Join :規定如何合并序列,例如inner或left方式。

?Fill : 規定如何設置序列合并后出現的缺失值

2、用rbind按行合并xts

合并結果按時間升序排列

?

五、觀測值的NA值處理

1、前一個或下個觀測值結轉法

取缺失值的前一個觀測值來填補缺失值。可防止先窺偏差(look-ahead bias)

# 使用上個觀測值

na.locf(x)???????????????

#設置fromLast = TRUE,可使用下個觀測值填補空缺

na.locf(x, fromLast = TRUE)

2、使用 na.approx()插補缺值

na.approx()基于兩點之間的簡單線性插值,數據點使用索引值之間的距離來估算,估算值在時間上是線性的。

?

六、時間序列操作

1、偏移函數lag()

k是偏移的步長。在xts中,k為正,序列的觀測值將向下(時間后方)偏移;k為負,觀測值將向上偏移。Zoo與xts相反。

> a

?????????? [,1]

2016-01-01??? 1

2016-01-02??? 2

2016-01-03??? 3

> lag(a)

?????????? [,1]

2016-01-01?? NA

2016-01-02??? 1

2016-01-03??? 2

> lag(a,k=-1)

?????????? [,1]

2016-01-01??? 2

2016-01-02??? 3

2016-01-03??? NA

2、差分函數diff()

一個簡單的差分例如: ?x(t) - x(t-k)? 其中k是序列偏移的步長。高階差分是對每個之前的差分計算結果的重復應用。

diff(xtsdata, ?lag = , differences = )

參數說明:

?Lag:偏移數;

differences:差分的次序(例如:調用多少次?diff?)。

# 下面兩條指令的效果相同

diff(x, differences = 2)

diff(diff(x))

3endpoints()函數,按時間間隔分割數據

endpoints(data,on=, k= )

該函數接收一個時間序列并返回每個時間區間的最后一個觀測值的位置向量。返回值以0開始,以數據長度(總行數)結束。

參數on?支持各種時間周期, 包括"years",?"quarters",?"months","hours"和?"minutes"等。

參數K用于找到第k個周期。例如,設置on = "weeks", k = 2, 可取每兩周的最后一天。注意最后一個返回值總是數據的長度,即便是與間隔周期不一致。

例如,下列代碼顯示某數據每年的最后一個觀測值

endpoints(Air, on = "years")

[1] 0 12 24 36 48 60 72 84 96 108 120 132 144

4、用period.apply按時間分割數據,并運算

period.apply(x, INDEX, FUN, ...)

使用舉例:

# 計算每周的端點
ep <- endpoints(temps, on = "weeks")

# 計算每周均值并顯示結果

period.apply(temps, INDEX = ep, FUN = mean)

5、用 split-lapply-rbind分割數據并運算

#按周來劃分數據,f參數是一個字符串,用于描述劃分的間隔(例如:"months",?"years")

data_weekly <- split(data, f = "weeks")

#創建一個每周均值的列表

temps_avg <- lapply(X = data_weekly, FUN = mean)

x_list_rbind <- do.call(rbind, temps_avg)

do.call(rbind, ...)

向rbind傳送一個list,而不是一次傳送一個對象。

6、單變量序列轉換成OHLC數據(Open-High-Low-Close data

基于常規窗口整合不同頻次的序列可以使分析更容易。

to.period()函數格式如下,參數包括序列x, 表示周期的字符k等

to.period(x,

????????? period = "months",

????????? k = 1,

????????? indexAt,

????????? name=NULL,

????????? OHLC = TRUE,

????????? ...)

使用舉例:
usd_eur_weekly <- to.period(usd_eur, period = "weeks")
usd_eur_yearly <- to.period(usd_eur, period = "years", OHLC = FALSE)

7、轉換成低頻序列

?to.period()也可將序列轉換成低調整頻次的數據,類似于二次抽樣。

# 轉換成季度OHLC格式

mkt_quarterly <- to.period(eq_mkt, period = "quarters")

#使用快捷功能轉換成季度OHLC格式

mkt_quarterly2 <- to.quarterly(eq_mkt, name = "edhec_equity", indexAt = "firstof")

indexAt參數設置為firstof?,選取區間時間的起點。設置參數name可以改變每一列的基礎名。

8、計算時間序列的滾動標準差

時間序列數據的另一個常用需求是在數據的滾動窗口應用函數。

?xts?對象可使用zoo函數rollapply()來實行。

該函數參數有時間序列對象x,窗口大小width,應用于每個滾動周期的函數FUN。

Width參數規定了窗口中的觀測值數量。例如,選取一個序列的10天滾動。

rollapply(x, width = 10, FUN = max, na.rm = TRUE)

注意:如果是日觀測值的序列是選取10天,如果是月觀測值的序列會選取10個月。

?

七、修改時間戳

1、在高頻次數據中發現具有相同時間戳的觀測值時,一般有效的做法是強制時間唯一,增加毫秒隨機數。

make.index.unique(dataeps= ,? drop=? ,…)?

參數說明:

eps:epsilon or small change的縮寫,控制相同的時間被擾亂的程度。

drop = TRUE:移除全部重復觀測值。

舉例

make.index.unique(x, eps = 1e-4)? # ?增加隨機數

make.index.unique(x, drop = TRUE) # 去除重復項

?

2、?某些情形時間戳過于精確,最好是近似到一些固定的間隔點。例如觀測值可能在一小時內的任何時點發生,但只需記錄最近的下個整點。

以下一個時間對齊數據,秒,分鐘,小時。

align.time(data,n= )?? 參數n,表示要近似到的秒數

align.time(x, n = 60) # 近似到分鐘

?

轉載于:https://www.cnblogs.com/jiangmiaomiao/p/6931045.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455489.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java筆記04-核心類庫

Java筆記04-核心類庫 Object類 1.1 常用的包 java.lang包 -該包是Java語言中的核心包,該包中的內容由Java虛擬機自動導入 如:String類,System類等java.util包- 該包是Java語言中的工具包,里面包含了大量的工具類和集合類等java.io包 是輸入輸出包,包括讀寫各種設備java.net…

Butterknife全方位解析

概述 Butterknife是供職于Square公司的JakeWharton大神開發的開源庫&#xff0c;使用這個庫&#xff0c;在AS中搭配Android ButterKnife Zelezny插件&#xff0c;可以大大提高開發的效率&#xff0c;從此擺脫繁瑣的findViewById(int id)&#xff0c;也不用自己手動bind(int id)…

Linux下編譯FFMpeg

環境&#xff1a;RedHat AS4  1。首先獲取ffmpeg  通過svn下載&#xff1a;  從 http://subversion.tigris.org下載SVN客戶端程序。   先裝subversion&#xff0c;確保已經安裝了apr和apr-util&#xff0c;在apache.org網站能下到  wget http://subversion.tigris.or…

論文筆記 Aggregated Residual Transformations for Deep Neural Networks

這篇文章構建了一個基本“Block”&#xff0c;并在此“Block”基礎上引入了一個新的維度“cardinality”(字母“C”在圖、表中表示這一維度)。深度網絡的另外兩個維度分別為depth&#xff08;層數&#xff09;、width&#xff08;width指一個層的channel的數目&#xff09;。 首…

matlab 歸一化_機器學習中如何用Fscore進行特征選擇(附Matlab代碼)

作者&#xff1a;kervin編輯&#xff1a;阿吉 目前&#xff0c;機器學習在腦科學領域的應用可謂廣泛而深入&#xff0c;不論你是做EEG/ERP研究&#xff0c;還是做MRI研究&#xff0c;都會看到機器學習的身影。機器學習最簡單或者最常用的一個應用方向是分類&#xff0c;…

Java筆記05-Collection、泛型、迭代器

Java筆記05-Collection、泛型、迭代器 【Collection、泛型】 主要內容 Collection集合迭代器增強for泛型 第一章 Collection集合 1.1 集合概述 在前面基礎班我們已經學習過并使用過集合ArrayList ,那么集合到底是什么呢? 集合&#xff1a;集合是java中提供的一種容器&a…

IOS安裝CocoaPods完整流程

作為一個底層系統大菜鳥,又搞過幾年ios來說,安裝一個CocoaPods是一件蛋痛的事~ 說懂又懂,說不懂又不懂. 由于安裝過程比較復雜,步驟較多,而網上教程又比較零散,并且有一些是扯蛋的,所以本篇文章主要從頭到位依據自身安裝經歷記錄每一條終端指令,至于里面的原理和一些概念性的東…

重裝TCP/IP

在Windows XP的網絡組件列表里&#xff0c;Internet 協議 (TCP/IP)的"卸載"按鈕是灰色不可選狀態。這是因為傳輸控制協議/Internet 協議 (TCP/IP) 堆棧是 Microsoft XP/ 2003 的核心組件(TCP/IP協議是Windows XP的默認協議),不能刪除。所以Windows XP不允許卸載TCP/I…

linux 修改時區_教你在Centos8中更改時區

對于許多與系統相關的任務和進程&#xff0c;使用正確的時區是必不可少的。例如&#xff0c;cron守護進程使用系統的時區執行cron作業&#xff0c;日志文件中的時間戳基于同一系統的時區。環 境CentOS 8檢查現在的時區timedatectl是一個命令行實用程序&#xff0c;允許您查看和…

UVA12511 - Virus(DP+最長公共上升子序列)

題目鏈接&#xff1a; https://vjudge.net/problem/UVA-12511 題目大意&#xff1a; 給定兩個序列&#xff0c;求出兩個序列的最長公共上升子序列&#xff08;嚴格上升&#xff09;。 解題過程&#xff1a; 比賽的時候沒有做出來&#xff0c;非常咸魚的一場比賽&#xff0c;當時…

Java筆記06-Map集合

Map集合 學習目標 能夠說出Map集合特點使用Map集合添加方法保存數據使用”鍵找值”的方式遍歷Map集合使用”鍵值對”的方式遍歷Map集合能夠使用HashMap存儲自定義鍵值對的數據能夠使用HashMap編寫斗地主洗牌發牌案例 Map集合概述 啥也不用說,Map集合就相當于python中的字典…

理解什么是前后端分離

HTML、CSS、JS。 AJAX或Fetch。 學習一個前端的框架&#xff0c; React或者Vue或者Angularjs2都可以。 學會一個前端的路由框架&#xff0c; 如React-Router或者Vue-Router。 在學會3的基礎上你肯定已經搭建好前端的開發環境了&#xff0c;所有和后端的交互走AJAX或者Fetch…

幀間、幀內像素塊預測

一、像素塊預測 H.264/ AVC標準中的基本預測技術是基于塊&#xff0c;而不是基于對象的。它的編碼器是利用混合的編碼方案來提高編碼效率&#xff0c;這些方案包括高級的預測技術和有效熵編碼技術。在運動預測中它使用不同的塊的大小進行預測&#xff0c;以樹結構的方式來組織…

高性能mysql 第10章 復制

復制功能不僅能夠構建高可用的應用&#xff0c;同時也是高可用性&#xff0c;可擴展性&#xff0c;災難恢復&#xff0c;備份以及數據倉庫等工作的基礎。 mysql支持兩種復制方式&#xff1a;基于語句的復制和基于行的復制。基于語句的復制&#xff08;也成為邏輯復制&#xff0…

vb6在后臺將窗體保存到圖片_如何將寺庫網多個商品圖片一鍵分類保存到一個目錄...

寺庫網是全球最大的奢侈品網上在線購物平臺&#xff0c;那么我們怎樣可以從寺庫網上一鍵批量采集到多個寶貝商品圖片&#xff0c;并分類保存到電腦呢&#xff1f;今天小編給大家帶來一款專業電商圖片鏈接采集軟件【載圖助手】&#xff0c;它支持平臺高達141個&#xff0c;均可支…

Java筆記07-List、Set、數據結構、Collections

Java筆記07-List、Set、數據結構、Collections 主要內容 數據結構List集合Set集合Collections 第一章 數據結構 2.1 數據結構有什么用&#xff1f; 當你用著java里面的容器類很爽的時候&#xff0c;你有沒有想過&#xff0c;怎么ArrayList就像一個無限擴充的數組&#xff…

Apache安裝問題:configure: error: APR not found . Please read the documentation

參考&#xff1a;http://cuisuqiang.iteye.com/blog/2068794 http://www.cnblogs.com/Anker/p/3355573.html pcre: https://ftp.pcre.org/pub/pcre/ http://www.linuxidc.com/Linux/2012-06/62289.htm 1. 不贊成去卸載httpd的東西。 2. server上可以存在多個apache。一個是rpm&…

浮動與定位

2019獨角獸企業重金招聘Python工程師標準>>> 一.浮動:float:一個元素浮動時,其他內容會"環繞"該元素. 浮動元素的外邊距不會合并浮動的元素不能超出其包含快的內邊界浮動元素彼此會避免重疊浮動元素的頂端不能比之前所有浮動元素或塊級元素的頂端更高如果…

驅動級的自動按鍵_Aqara全自動智能推拉鎖D100,體驗全自動開門的便捷

大家好&#xff0c;我是夢想是個豬&#xff0c;今天為大家帶來的是一篇智能門鎖的使用體驗。前言家里的這張門陸陸續續的換了好幾把智能門鎖了&#xff0c;也體驗了好幾種不同的開鎖方式。最開始開發商給安裝的是一把指紋和把手分離的那種款式&#xff0c;開鎖的時候需要先輸入…

碼率問題

幀率影響的是每幀的額定比特數 我說的幀率是編碼幀率&#xff0c;不是采集幀率。對于一個采集后的序列&#xff0c;MAD 只跟參考幀有關。而編碼幀率與參考幀無關&#xff0c;因此編碼幀率不影響 MAD。 ———————————————————————————————————…