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.. :)

19
demandé sur Dominic Comtois 2015-03-14 09:54:47

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
14
répondu WaltS 2015-03-15 12:23:32

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)
12
répondu G. Grothendieck 2018-09-11 12:58:43

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))

1
répondu louisv 2017-12-18 13:44:49

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
1
répondu ChuckCottrill 2018-07-01 00:42:58