为什么csv对象事件时间序列图对象无法转换为xts对象

登录没有账号?
&登录超时,稍后再试
免注册 快速登录
如何基于机器学习设计一套智能交易系统?
&&& 本文首发于微信公众号: 机器之心。文章内容属作者个人观点,不代表和讯网立场。投资者据此操作,风险请自担。
  机器之心编译
  参与:Alex Sun、周亮
  在以后的几篇博文中我们会陆续讨论设计、开发和测试一个具有机器学习能力的人工智能股票与外汇交易系统。机器学习是一个新的领域,它是「基于统计学算法的挖掘技术」的另一个名称。计算机日新月异的计算能力提升使机器学习技术成为了可能。在我们更多的讨论这个问题之前,我希望读者可以先看一下,这部视频解释了什么是机器学习以及它的一些应用,比如垃圾邮件检测,手写识别以及语音识别技术等等。
  R 语言是一门被世界各地学者开发出来的强有力的编程语言,它被用来执行一些用在机器学习领域的统计学算法。R 语言是可以被免费下载的开源软件。在前面几篇文章中我们讨论了如何使用 R 语言来改良我们的交易系统。在继续之前推荐您先浏览一下 如何用R语言开发自己的基于算法的交易系统 。现在我们面临的问题是如何在开始套用 R 语言提供的不同统计模型之前正确将数据格式化。
  前面的有篇文章提到过 ARIMA (自回归积分滑动平均模型)和 GARCH (广义自回归条件异 方差 (模型)。不幸的是,ARIMA+GARCH 的强强组合在预测一个时间段的股票和时表现并不理想。神经网络和向量机是时下被数据分析师们广泛使用的机器学习算法,希望了解更多的读者可以阅览一下我以前介绍向量机的视频内容。
  神经网络模拟使用人脑的方式使用人工智能。 随着这篇文章对神经网络和向量机更详细的介绍,读者也可以参照这篇 讨论预测美元之间汇率方法的论文的文章 。当你对金融时间序列进行预测时,你应该尽可能多的使用投资回报来预测,因为其结果往往更准确,神经网络算法非常擅长进行图像识别。除此之外,也可以参考 KNN 近邻取样(Nearest Neighbor)和隐马尔科夫模型算法 (Hidden Markov Chain)。
  设计基于机器学习的人工智能股票外汇交易系统
  我们希望初步设计一个可以根据预测每日收益来自动进行交易的系统。我们选择一个市场变化的阈值,达到这个阈值后我们才会发生交易操作。举个例子来说,我们想用我们的交易系统来预测一对外汇组合在接下来的 24 小时会朝哪个方向变化,变多少个点。假设我们选择了一组外汇 24 小时内 200 点的变动作为阈值。我们的机器学习算法应该做到能够预测向 2 个方向浮动 200 点的分别的可能性。如果英镑对在未来 24 小时内上涨 200 个点的可能性是 70% 到 80%,我们就使用对 K 线图的理解进行低买高卖来获取预期 200 个点的回报。切记,所有的统计算法本质上都是概率性的。
  下面就是我们要怎么做。我们先计算我们选定的股票或一组外汇当日的收益,然后再预测下一日的 K 线图。然后再运用上文提到的算法来参照计算得到的每日收益数据组来训练交易系统。一旦我们教会了交易系统每日收益数据组,我们就用它来预测下一日的情况。这样可以帮助我们优化交易选择。就像前面提到的,交易系统其实就是跟概率打交道。这就是说,长期地看,预测成真的平均比率将大致等于该预测的概率。
  我们也想缩小范围,以四个小时或者一个小时为单位来预测下一个单位时间的 K 线图来看看预测准确率是否达到70%-80%。如果我们的平均预测成功率超过了70%,就可以考虑去交易市场里赚的风生水起了,所以还等什么?让我们开始吧!
  如何把数据读入到R语言内呢?
  正如前文所说,我们将会使用 R 语言来进行预测。你可以免费下载 R 语言。下载 R 语言之后,我们需要向其中导入数据。我们拿嘉盛举例。嘉盛的交易软件 mt4( metaTrader4 )允许用户下载所有支持外汇组行情的 CSV 格式文件。打开 MT4 软件,选择工具( Tools )历史中心( History Center ).然后下载以今天、过去四小时和一小时为单位的数据文件。然后用下列命令来读取兑美元的每日 CSV 数据文件并导入 R 语言:
  quotes &- read.csv(“E:/MarketData/EURUSD1440.csv”, header=FALSE)
  其中E指代的是储存欧元兑美元的一日 CSV 文件的磁盘盘符,你也可以把数据文件保存在 C 盘, D 盘等磁盘。注意根据存文件的位置修改命令中的磁盘位置。同样你也可以导入四个小时和一个小时的数据文件:
  quotes &- read.csv(“E:/MarketData/GBPUSD240.csv”, header=FALSE)
  quotes &- read.csv(“E:/MarketData/EURUSD60.csv”, header=FALSE)
  现在以上数据就被读取成了 R 语言中最常用的数据格式――数据框(dataframe)。数据框类似一个矩阵。我们需要把现有的数据框转化成按时间序列表示。就像前面提到过的,股票外汇的价格是与时间紧密联系的,这样就形成了一个价格的时间序列。所以我们需要把原始数据转换成时间序列模式来使 R 语言能够处理。xts 是一个在 R 语言里最好用的时间序列类。 所以我们顺理成章的把前面数据转换成 xts 。现在我们需要使用以下命令来把每日的数据框转化成按日为单位划分的时间序列:
  x &- as.xts(quotes[,-(1:2)], as.Date(paste(quotes[,1]),format=’%Y.%m.%d’))
  同理,我们也可以转化四小时和一小时的数据框为 xts 时间序列:
  x &- as.xts(quotes[,-(1:2)], as.POSIXct(paste(quotes[,1],quotes[,2]),format=’%Y.%m.%d %H:%M’))
  发现不同了吗?机智的读者可能已经发现了在按日为单位的时候时间格式是Date %Y.%m.%d,而按小时的时候则是OSIXct %Y.%m.5d %H:%M.为什么呢?这里有个规则。一天之内的时间区间我们需要考虑小时和分钟,而当按天和周为单位的数据我们将忽略小时和分钟,最小时间间隔为小时。在进一步使用上面命令转化好的 xts 时间序列数据之前,不要忘记在时间序列里命名数据列,可以用以下命令实现:
  colnames(x) c(‘Open’,’High’,’Low’,’Close’,’Volume’)
  显而易见,第一列是索引列并与时间绑定了起来。几个数据列分别是Open,High,Low,Close,Volume.
  前面讲到的都是针对 Forex 而言。如果你只是简单的处理股票交易,数据读取会变得简单的多。我们可以直接从 Yahoo 金融下载数据文件,你甚至可以直接从 R 里面下载。R 语言的另一个优点是自动把得到的数据转化成 xts 时间序列。你只需要下载安装 Quantmod 安装包就可以简单做到。安装了 Quantmod 的 R 语言可以被用来实现 K 线图描绘以及大部分的技术性分析工作。Quantmod 的应用将在后面的文章详细解释。现在我们只需要使用下列命令下载亚马逊每日价格:
  library(quantmod)
  首先我们把 Quantamod 库导入R。
  getSymbols(“AMZN”, from = “”, to = “”)
  上面的命令可以使我们轻松得到 2010 年到 2016 年每天的股票价格。现在我们需要转化这些数据到不同的格式来满足我们的不同需要。
  colnames(AMZN) &- c(“Open”, “High”, “Low”, “Close”, “Volume”, “AdjClose”)
  你也可以实用 R语言里的 tseries 库来从网上下载数据,使用下列命令既可:
  library(tseries)
  AMZN &- as.xts(get.hist.quote(“AMZN”,start=”″, quote=c(“Open”, “High”, “Low”, “Close”,”Volume”,”AdjClose”)))
  下面解释一下上面的命令。首先我们导入 tseries 库。然后我们就可以使用 get.hist.quote 命令来下载 Amazon(AMZN)的数据。你可以下载任意股票的数据,简单的将上述命令中的 AMZN 替换成任意你感兴趣的股票代号,R 就会替你自动完成。数据会被下载成 zoo 对象,我们需要将其限制成 xts 时间序列对象。这就是我们在上述命令中使用 as.xts 的原因。
  在这篇文章中我们已经展示了如何从 MT4 里面读取 forex 外汇组(数据)以及如何使用 R 语言从网上轻易的读取每日股票交易信息。切记注意下载数据的时间格式是否正确,不正确的时间格式会在使用统计学算法时对训练和预测造成很大影响。比如,我们在上述命令中就使用了 as.xts 来把数据限制成特定的时间序列。
  正如我们前面所说,接下来我们要使用统计学算法来预测在接下来某个特定时间内,外汇组或者股票是否会增加或减少特定的百分比。在下篇文章里,我们会一起讨论如何来实现。
(责任编辑:王治强 HF013)
和讯网今天刊登了《如何基于机器学习设计一套智能交易系统? 》一文,关于此事的更多报道,请在和讯财经客户端上阅读。
提 交还可输入500字
你可能会喜欢
热门新闻排行榜
和讯热销金融证券产品
【免责声明】本文仅代表作者本人观点,与和讯网无关。和讯网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。
违法和不良信息举报电话:010- 传真:010- 邮箱:yhts@ 本站郑重声明:和讯信息科技有限公司系政府批准的证券投资咨询机构[ZX0005]。所载文章、数据仅供参考,投资有风险,选择需谨慎。相关文章推荐
1、取出当前日期
Sys.Date()
#注意:这种方法返回的是字符串类型
[1] "Wed Oct 29 20:36:07 2014"
2、在R中...
R语言是开源的,同时可以运行在各种平台上(Linux、Windows、MacOS等)。R的许多软件包是由R语言、 LaTeX、Java及最常用C语言和Fortran撰写。本篇为大家介绍的是R语言日期格...
(1)获取当前日期有两个函数
一个是Sys.Date(),另外一个是Sys.time(),获得向前向后的时间
t unclass(t)
获取一个小时前的日期
好了,在前一篇文章中,我们将数据集转化为numeric格式,以便于在实际工作中预测投资者是否再次投资。
不过上次的数据集转化,将时间格式全部转化为了NA,导致预测准确率下降了约5%(因为失去了时间早晚...
R语言格式化输出,数字前补足0:
[1] "001" "002" "004" "011" "123"
日期和时间 date time
日期:Date 内部存储的是距离的天数。
相关函数:date(),Sys.Date(),weekdays(),months(),quarters...
数据清理与转换
1缺失值得处理
#查看哪些地方是数据是缺失的
> which(is.na(a),arr.ind=TRUE)
#删除空缺的数据
> which(is.na...
(1)获取当前日期有两个函数
一个是Sys.Date(),另外一个是Sys.time(),获得向前向后的时间
t unclass(t)
[1] 1442919...
参考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming
Environ...
1. 日期通常以字符串的形式输入到R中,然后转化为数值形式存储的日期变量,函数as.Date()用于执行这种转化,其语法为as.Date(x, "input_format"),其中x是字符型数据,in...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)推荐这篇日记的豆列
&&&&&&&&&&&&& 可扩展的时间序列xts
可扩展的时间序列xts
,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。
要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。
关于作者:
张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
转载请注明出处:
本文是继的扩展实现。看上去简单的时间序列,内藏复杂的规律。zoo作为时间序列的基础库,是面向通用的设计,可以用来定义股票数据,也可以分析天气数据。但由于业务行为的不同,我们需要更多的辅助函数,来帮助我们更高效的完成任务。
xts扩展了zoo,提供更多的数据处理和数据变换的函数。
xts数据结构
xts的API介绍
1. xts介绍
xts是对时间序列数据(zoo)的一种扩展实现,目标是为了统一时间序列的操作接口。实际上,xts类型继承了zoo类型,丰富了时间序列数据处理的函数,API定义更贴近使用者,更实用,更简单!
xts项目地址:
2. xts安装
Win7 64bit
R: 3.0.1 x86_64-w64-mingw32/x64 b4bit
& install.packages("xts")
also installing the dependency ‘zoo’
trying URL 'http://mirror./cran/bin/windows/contrib/3.0/zoo_1.7-10.zip'
Content type 'application/zip' length 875046 bytes (854 Kb)
opened URL
downloaded 854 Kb
trying URL 'http://mirror./cran/bin/windows/contrib/3.0/xts_0.9-7.zip'
Content type 'application/zip' length 661664 bytes (646 Kb)
opened URL
downloaded 646 Kb
package ‘zoo’ successfully unpacked and MD5 sums checked
package ‘xts’ successfully unpacked and MD5 sums checked
3. xts数据结构
xts扩展zoo的基础结构,由3部分组合。
索引部分:时间类型向量
数据部分:以矩阵为基础类型,支持可以与矩阵相互转换的任何类型
属性部分:附件信息,包括时区,索引时间类型的格式等
4. xts的API介绍
xts: 定义xts数据类型,继承zoo类型
coredata.xts: 对xts部分数据赋值
xtsAttributes: xts对象属性赋值
[.xts: 用[]语法,取数据子集
dimnames.xts: xts维度名赋值
sample_matrix: 测试数据集,包括180条xts对象的记录,matrix类型
xtsAPI: C语言API接口
as.xts: 转换对象到xts(zoo)类型
as.xts.methods: 转换对象到xts函数
plot.xts: 为plot函数,提供xts的接口作图
.parseISO8601: 把字符串(ISO8601格式)输出为,POSIXct类型的,包括开始时间和结束时间的list对象
firstof: 创建一个开始时间,POSIXct类型
lastof: 创建一个结束时间,POSIXct类型
indexClass: 取索引类型
.indexDate: 取索引的
.indexday: 索引的日值
.indexyday: 索引的年(日)值
.indexmday: 索引的月(日)值
.indexwday: 索引的周(日)值
.indexweek: 索引的周值
.indexmon: 索引的月值
.indexyear: 索引的年值
.indexhour: 索引的时值
.indexmin: 索引的分值
.indexsec: 索引的秒值
align.time: 以下一个时间对齐数据,秒,分钟,小时
endpoints: 按时间单元提取索引数据
merge.xts: 合并多个xts对象,重写zoo::merge.zoo函数
rbind.xts: 数据按行合并,为rbind函数,提供xts的接口
split.xts: 数据分隔,为split函数,提供xts的接口
na.locf.xts: 替换NA值,重写zoo:na.locf函数
apply.daily: 按日分割数据,执行函数
apply.weekly: 按周分割数据,执行函数
apply.monthly: 按月分割数据,执行函数
apply.quarterly: 按季分割数据,执行函数
apply.yearly: 按年分割数据,执行函数
to.period: 按期间分割数据
period.apply: 按期间执行自定义函数
period.max: 按期间计算最大值
period.min: 按期间计算最小值
period.prod: 按期间计算指数
period.sum: 按期间求和
nseconds: 计算数据集,包括多少秒
nminutes: 计算数据集,包括多少分
nhours: 计算数据集,包括多少时
ndays: 计算数据集,包括多少日
nweeks: 计算数据集,包括多少周
nmonths: 计算数据集,包括多少月
nquarters: 计算数据集,包括多少季
nyears: 计算数据集,包括多少年
periodicity: 查看时间序列的期间
first: 从开始到结束,设置条件取子集
last: 从结束到开始,设置条件取子集
timeBased: 判断是否是时间类型
timeBasedSeq: 创建时间的序列
diff.xts: 计算步长和差分
isOrdered: 检查向量是否是顺序的
make.index.unique: 强制时间唯一,增加毫秒随机数
axTicksByTime: 计算X轴刻度标记位置按时间描述
indexTZ: 查询xts对象的时区
5. xts使用
1). xts类型基本操作
2). xts的作图
3). xts类型转换
4). xts数据处理
5). xts数据统计计算
6). xts时间序列工具使用
1). xts类型基本操作
测试数据集sample_matrix
> library(xts)
> data(sample_matrix)
> head(sample_matrix)
50.78 49.78
50.88 50.67
50.96 50.36
50.47 50.59
50.33 50.12
50.61 49.85
定义xts类型对象
> sample.xts
class(sample.xts)
[1] "xts" "zoo"
> str(sample.xts)
An ‘xts’ object on / containing:
Data: num [1:180, 1:4] 50 50.2 50.4 50.4 50.2 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:4] "Open" "High" "Low" "Close"
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
$ descr: chr "my new xts object"
> head(sample.xts)
50.78 49.78
50.88 50.67
50.96 50.36
50.47 50.59
50.33 50.12
50.61 49.85
> attr(sample.xts,'descr')
[1] "my new xts object"
xts数据查询
> head(sample.xts['2007'])
50.78 49.78
50.88 50.67
50.96 50.36
50.47 50.59
50.33 50.12
50.61 49.85
> head(sample.xts['2007-03/'])
50.20 50.75
50.61 50.59
50.41 50.33
50.81 50.36
50.50 50.67
50.19 50.80
> head(sample.xts['/2007'])
50.19 50.80
50.78 49.81
49.64 49.39
49.77 49.12
49.84 49.98
49.95 49.06
> sample.xts['']
50.88 50.67
2). 操作xts的作图
> data(sample_matrix)
> plot(sample_matrix)
> plot(as.xts(sample_matrix))
Warning message:
In plot.xts(as.xts(sample_matrix)) :
only the univariate series will be plotted
> plot(as.xts(sample_matrix), type='candles')
3). xts类型转换
分别创建首尾时间:firstof, lastof
> firstof(2000)
[1] " CST"
> firstof()
[1] " CST"
> lastof(2007)
[1] " 23:59:59.99998 CST"
> lastof(2007,10)
[1] " 23:59:59.99998 CST"
创建首尾时间
> .parseISO')
$first.time
[1] " CST"
$last.time
[1] " 23:59:59.99998 CST"
> .parseISO-05/2001-02')
$first.time
[1] " CST"
$last.time
[1] " 23:59:59.99998 CST"
> .parseISO-01/02')
$first.time
[1] " CST"
$last.time
[1] " 23:59:59.99998 CST"
> .parseISO8601('T08:30/T15:00')
$first.time
[1] " 08:30:00 CST"
$last.time
[1] " 15:00:59.99999 CST"
取索引类型
> indexClass(x)
[1] "POSIXt"
索引时间格式化
> indexFormat(x)
2010-一月-01 00:00:00.000
2010-一月-01 00:01:00.000
2010-一月-01 00:02:00.000
2010-一月-01 00:03:00.000
2010-一月-01 00:04:00.000
2010-一月-01 00:05:00.000
取索引时间
> .indexhour(head(x))
[1] 0 0 0 0 0 0
> .indexmin(head(x))
[1] 0 1 2 3 4 5
4). xts数据处理
align.time(x, 10)
[1] " 15:42:30 CST" " 15:42:30 CST"
[3] " 15:42:30 CST" " 15:42:40 CST"
[5] " 15:42:40 CST" " 15:42:40 CST"
[7] " 15:42:40 CST" " 15:42:40 CST"
[9] " 15:42:40 CST" " 15:42:40 CST"
[11] " 15:42:40 CST" " 15:42:40 CST"
[13] " 15:42:40 CST" " 15:42:50 CST"
[15] " 15:42:50 CST" " 15:42:50 CST"
[17] " 15:42:50 CST" " 15:42:50 CST"
[19] " 15:42:50 CST" " 15:42:50 CST"
[21] " 15:42:50 CST" " 15:42:50 CST"
[23] " 15:42:50 CST" " 15:43:00 CST"
[25] " 15:43:00 CST" " 15:43:00 CST"
[27] " 15:43:00 CST" " 15:43:00 CST"
[29] " 15:43:00 CST" " 15:43:00 CST"
#整60秒对齐
> align.time(x, 60)
[1] " 15:43:00 CST" " 15:43:00 CST"
[3] " 15:43:00 CST" " 15:43:00 CST"
[5] " 15:43:00 CST" " 15:43:00 CST"
[7] " 15:43:00 CST" " 15:43:00 CST"
[9] " 15:43:00 CST" " 15:43:00 CST"
[11] " 15:43:00 CST" " 15:43:00 CST"
[13] " 15:43:00 CST" " 15:43:00 CST"
[15] " 15:43:00 CST" " 15:43:00 CST"
[17] " 15:43:00 CST" " 15:43:00 CST"
[19] " 15:43:00 CST" " 15:43:00 CST"
[21] " 15:43:00 CST" " 15:43:00 CST"
[23] " 15:43:00 CST" " 15:43:00 CST"
[25] " 15:43:00 CST" " 15:43:00 CST"
[27] " 15:43:00 CST" " 15:43:00 CST"
[29] " 15:43:00 CST" " 15:43:00 CST"
按时间分割数据,并计算
apply.monthly(xts.ts,mean)
> apply.monthly(xts.ts,function(x) var(x))
> apply.quarterly(xts.ts,mean)
> apply.yearly(xts.ts,mean)
按期间分隔:to.period
> data(sample_matrix)
> to.period(sample_matrix)
sample_matrix.Open sample_matrix.High sample_matrix.Low sample_matrix.Close
> class(to.period(sample_matrix))
[1] "matrix"
> samplexts
to.period(samplexts)
samplexts.Open samplexts.High samplexts.Low samplexts.Close
> class(to.period(samplexts))
[1] "xts" "zoo"
按期间分割索引数据
> data(sample_matrix)
> endpoints(sample_matrix)
89 119 150 180
> endpoints(sample_matrix, 'days',k=7)
97 104 111 118 125
[20] 132 139 146 153 160 167 174 180
> endpoints(sample_matrix, 'weeks')
98 105 112 119 126
[20] 133 140 147 154 161 168 175 180
> endpoints(sample_matrix, 'months')
89 119 150 180
数据合并:按列合并
merge(x,y)
#取索引将领合并
> merge(x,y, join='inner')
#以左侧为基础合并
> merge(x,y, join='left')
数据合并:按行合并
rbind(x,x)
数据切片:按行切片
> data(sample_matrix)
split(x)[[1]]
50.78 49.78
50.88 50.67
50.96 50.36
50.47 50.59
50.33 50.12
50.61 49.85
50.63 49.06
49.89 49.33
49.53 49.46
49.10 49.10
50.80 50.19
50.00 50.86
50.95 50.45
50.83 50.12
50.31 50.35
50.36 50.44
50.12 50.32
50.27 50.78
50.23 50.42
50.90 50.90
50.75 50.29
50.61 50.61
50.42 50.45
50.68 50.34
50.08 49.24
50.77 49.91
49.17 49.96
49.38 49.75
49.80 49.80
50.78 50.78
> split(x, f="weeks")[[1]]
50.78 49.78
50.88 50.67
50.96 50.36
50.47 50.59
50.33 50.12
50.61 49.85
50.63 49.06
> split(x, f="weeks")[[2]]
49.89 49.33
49.53 49.46
49.10 49.10
50.80 50.19
50.00 50.86
50.95 50.45
50.83 50.12
x[c(1,2,5,9,10)]
> na.locf(x)
> na.locf(x, fromLast=TRUE)
5). xts数据统计计算
取开始时间,结束时间
start(xts.ts)
> end(xts.ts)
> periodicity(xts.ts)
Daily periodicity from
计算时间区间
> data(sample_matrix)
> ndays(sample_matrix)
> nweeks(sample_matrix)
> nmonths(sample_matrix)
> nquarters(sample_matrix)
> nyears(sample_matrix)
按期间计算统计指标
> zoo.data
98 105 112 119
[19] 126 133 140 147 154 161 168 175 182 189 196 203 210 217 224 231
#计算周的均值
> period.apply(zoo.data, INDEX=ep, FUN=function(x) mean(x))
9....261725
#计算周的最大值
> head(period.max(zoo.data, INDEX=ep))
#计算周的最小值
> head(period.min(zoo.data, INDEX=ep))
#计算周的一个指数值
> head(period.prod(zoo.data, INDEX=ep))
6). xts时间序列工具使用
检查时间类型
> timeBased(Sys.time())
> timeBased(Sys.Date())
> timeBased(200701)
创建时间序列
> timeBasedSeq('')
[1] "" "" "" "" ""
[6] "" "" "" "" ""
> head(timeBasedSeq('8'))
[1] "十二月 1998" "一月 1999"
"二月 1999"
"三月 1999"
"四月 1999"
[6] "五月 1999"
> head(timeBasedSeq('8/d'),40)
[1] "十二月 1998" "一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
[6] "一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
[11] "一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
[16] "一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
[21] "一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
[26] "一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
"一月 1999"
[31] "一月 1999"
"一月 1999"
"二月 1999"
"二月 1999"
"二月 1999"
[36] "二月 1999"
"二月 1999"
"二月 1999"
"二月 1999"
"二月 1999"
#按数量创建,100分钟的数据集
> timeBasedSeq('0',length=100)
[1] " 08:30:00 CST"
[1] "mins"
$length.out
按索引取数据first, last
> first(x, 10)
> first(x, '1 day')
> last(x, '1 weeks')
计算步长和差分
> lag(x, k=-1, na.pad=FALSE)
> diff(x, lag=2)
检查向量是否排序好的
> isOrdered(1:10, increasing=TRUE)
> isOrdered(1:10, increasing=FALSE)
> isOrdered(c(1,1:10), increasing=TRUE)
> isOrdered(c(1,1:10), increasing=TRUE, strictly=FALSE)
强制唯一索引
00:00:00.000
00:00:00.000
00:00:00.000
00:00:00.002
00:00:00.003
> make.index.unique(x)
00:00:00.000999
00:00:00.001000
00:00:00.001001
00:00:00.002000
00:00:00.003000
查询xts对象时区
indexTZ(x)
> tzone(x)
An ‘xts’ object on / containing:
Data: int [1:10, 1] 1 2 3 4 5 6 7 8 9 10
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
xts给了zoo类型时间序列更多的API支持,这样我们就有了更方便的工具,可以做各种的时间序列的转换和变形了。
转载请注明出处:
This entry was posted in
Pingback: ()
Pingback: ()
Pingback: ()
Pingback: ()
Pingback: ()
Designed by您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
时间序列基本操作.doc 21页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:136 &&
你可能关注的文档:
··········
··········
一.建立时间序列对象,表达时间序列数据
1 zoo包和xts包,xts包是zoo包的超子集
2 R的基础包里有ts对象,应用受限过多,一般不使用。
3日期和日期时刻(Date 和 Datetime)
日期可以表达(每)日数据,也可以表达(每)周,月,年数据
日期时刻可以表达日内数据
可以自由使用时间戳记(timestamps)用于解决日历日期(calendar data)
4创建时间序列对象
&?library(zoo)
&?ts &- zoo(x, dt)
&?library(xts)
&?ts &- xts(x, dt)
dt是一个对应日期或日期时刻的向量,x是一个向量或数据框。
可以使用as. 实现对象的转换。
R至少有8种表达时间序列的不同结构。
5 dt 可被称作指标(index)
zoo包中指标可以是任何有序值,如Date对象,POSIXct对象,整数甚至是浮点值。
xts包中的指标必须是一个可以支持日期或时间的类。
Date对象,POSIXct对象,chron对象,
还可以采用yearmon yearqtr dateTime 对象。
&?prices &- c(132.45, 130.85, 130.00, 129.55, 130.85)
&?dates &- as.Date(c(&&, &&, &&,
&?ibm.daily &- zoo(prices, dates)
&?print(ibm.daily)
132.45 130.85 130.00 129.55 130.85
例 以秒为时间单位(1 second ≈ 0. hours)
&?prices &- c(131.18, 131.20, 131.17, 131.15, 131.17)
&?seconds &- c(9.5, 9....501111)
&?ibm.sec &- zoo(prices, seconds)
&?print(ibm.sec)
9.5 9.6 9.1
131.18 131.20 131.17 131.15 131.17
也可以把多个时间序列置于一个数据框,建立多元时间序列。
6对zoo和xts对象可以采用coredata来提取纯数据
&?coredata(ibm.daily)
[1] 132.45 130.85 130.00 0.00 129.55
可以使用index提取时间
&?index(ibm.daily)
[1] && && && && &&
7也可以参考Rmetrics的timeSeries包
1.plot(x)可以处理一个或多个zoo和xts对象
对单个时间序列对象v 可以使用plot(v,type=&l&)或plot.ts(v).
xlab=&Date&
ylab=&Relative Price&
main=&IBM: Historical vs. Inflation-Adjusted&
lty=c(&dotted&, &solid&)
ylim=range(coredata(ibm.infl))
# Plot the two time series in two plots
plot(ibm.infl, screens=c(1,2), lty=lty, main=main, xlab=xlab, ylab=ylab, ylim=ylim)
# Plot the two time series in one plot
plot(ibm.infl, screens=1, lty=lty, main=main, xlab=xlab, ylab=ylab)
# Add a legend
legend(as.Date(&q
正在加载中,请稍后...}

我要回帖

更多关于 as.xts 对象的时间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信