comment convertir la base de données en séries chronologiques en R
j'ai un fichier csv dans lequel j'ai 2 cours de clôture des actions(sur une base quotidienne)
Dates Bajaj_close Hero_close
3/14/2013 1854.8 1669.1
3/15/2013 1850.3 1684.45
3/18/2013 1812.1 1690.5
3/19/2013 1835.9 1645.6
3/20/2013 1840 1651.15
3/21/2013 1755.3 1623.3
3/22/2013 1820.65 1659.6
3/25/2013 1802.5 1617.7
3/26/2013 1801.25 1571.85
3/28/2013 1799.55 1542
je veux convertir les données ci-dessus en format de série temporelle. (date de début est 3/14/2013
et la date de fin est 3/13/2015
) j'ai essayé mais ça me donne des résultats bizarres
values <- bajaj_hero[, -1] (excluded first column i.e date in real dataset)
bajaj_hero_timeseries <- ts(values,start=c(2013,1),end=c(2015,3),frequency=365)
Sortie:
Bajaj_close Hero_close
2013.000 1854.80 1669.10
2013.003 1850.30 1684.45
2013.005 1812.10 1690.50
2013.008 1835.90 1645.60
2013.011 1840.00 1651.15
2013.014 1755.30 1623.30
2013.016 1820.65 1659.60
2013.019 1802.50 1617.70
2013.022 1801.25 1571.85
s'il vous plaît aider.. :)
4 réponses
R a de multiples façons de represeting temps de la série. Puisque vous travaillez avec les prix quotidiens des actions, vous pouvez vouloir considérer que les marchés financiers sont fermés les week-ends et les jours fériés de sorte que les jours de négociation et les jours de calendrier ne sont pas les mêmes. Toutefois, vous devrez peut-être utiliser vos séries chronologiques à la fois en termes de jours de négociation et de jours civils. Par exemple, les rendements quotidiens sont calculés à partir des prix de clôture quotidiens séquentiels, qu'un week-end intervienne ou non. Mais vous pouvez vous voulez également faire des rapports basés sur le calendrier tels que des résumés hebdomadaires des prix. Pour ces raisons, le paquet xts, une extension de zoo, est couramment utilisé avec les données financières dans R. Un exemple de la façon dont il pourrait être utilisé avec vos données suit.
en supposant que les données indiquées dans votre exemple sont dans le dataframe DF
library(xts)
stocks <- xts(df[,-1], order.by=as.Date(df[,1], "%m/%d/%Y"))
#
# daily returns
#
returns <- diff(stocks, arithmetic=FALSE ) - 1
#
# weekly open, high, low, close reports
#
to.weekly(stocks$Hero_close, name="Hero")
qui donne la sortie
Hero.Open Hero.High Hero.Low Hero.Close
2013-03-15 1669.1 1684.45 1669.1 1684.45
2013-03-22 1690.5 1690.50 1623.3 1659.60
2013-03-28 1617.7 1617.70 1542.0 1542.00
Entrée. nous commencerons par le texte de l'intrant indiqué dans la question puisque la question n'a pas fourni l'intrant csv:
Lines <- "Dates Bajaj_close Hero_close
3/14/2013 1854.8 1669.1
3/15/2013 1850.3 1684.45
3/18/2013 1812.1 1690.5
3/19/2013 1835.9 1645.6
3/20/2013 1840 1651.15
3/21/2013 1755.3 1623.3
3/22/2013 1820.65 1659.6
3/25/2013 1802.5 1617.7
3/26/2013 1801.25 1571.85
3/28/2013 1799.55 1542"
zoo."ts"
les séries de classes ne représentent normalement pas les index des dates, mais nous pouvons créer une série zoo qui le fait (voir forfait):
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y")
alternativement, si vous avez déjà lu ceci dans une base de données DF
alors il pourrait être converti en zoo comme indiqué sur le deuxième ligne ci-dessous:
DF <- read.table(text = Lines, header = TRUE)
z <- read.zoo(DF, format = "%m/%d/%Y")
Dans les deux cas ci-dessus z
ia une série de zoo avec un "Date"
classe indice de temps. On pourrait aussi créer la série zoo,zz
, qui utilise 1, 2, 3, ... comme l'indice de temps:
zz <- z
time(zz) <- seq_along(time(zz))
ts. L'un ou l'autre pourrait être converti en "ts"
classe de la série:
as.ts(z)
as.ts(zz)
le premier a un indice de temps qui est le nombre de jours depuis L'époque (1er janvier 1970) et aura NAs pour les jours manquants et le second avez 1, 2, 3, ... comme l'indice de temps et pas de NAs.
série Mensuelle. typiquement "ts" série:
z.m <- as.zooreg(aggregate(z, as.yearmon, mean), freq = 12)
as.ts(z.m)
bibliothèque fpp
, vous pouvez facilement créer des séries chronologiques avec le format de date:
time_ser=ts(data,frequency=4,start=c(1954,2))
le Voir, cette question: Conversion des données.cadre de la xts order.by nécessite un temps approprié en fonction de l'objet, ce qui suggère d'examiner les arguments order.by,
les classes actuellement acceptables sont: 'Date’, 'POSIXct', ' timeDate’, ainsi que "yearmon’ et "yearqtr" où les valeurs de l'indice restent unique.
et suggère en outre une conversion explicite en utilisant order.by = as.POSIXct,
df$Date <- as.POSIXct(strptime(df$Date,format),tz="UTC")
xts(df[, -1], order.by=as.POSIXct(df$Date))
Où est votre format attribué ailleurs,
format <- "%m/%d/%Y" #see strptime for details