我想制作一个包含一周内每个事件相关信息的新变量:事件之前3天,事件之后3天。 我所拥有的:
import tensorflow as tf
a = tf.constant([3, -0.5, 2, 7])
b = tf.constant([2.5, 0.0, 2, 8])
c = tf.metrics.mean_squared_error(a,b)
init = tf.global_variables_initializer() <--
sess = tf.Session()
sess.run(init) <---
print(sess.run(c))
我希望我的数据集看起来像什么
df <- Date APP DE10
2014-09-22 0 1.010
2014-09-19 0 1.043
2014-09-18 0 1.081
2014-09-17 0 1.050
2014-09-16 0 1.061
2014-09-15 0 1.067
2014-09-12 1 1.082
2014-09-11 0 1.041
2014-09-10 0 1.047
2014-09-09 0 0.996
2014-09-08 0 0.953
2014-09-05 0 0.928
2014-09-04 1 0.970
2014-09-03 0 0.955
2014-09-02 0 0.931
2014-09-01 0 0.882
我一直在尝试不同的方法,但是没有解决。
编辑
我想要的数据集与上面的一样。我需要它以便在图中绘制多条线以比较事件发生前后三天的市场影响。简而言之,我想要一个像下面这样的图,但有更多行,每行代表事件发生前后的发展。 APP Indicator DE10_Event1 DE10_Event2
0 1 1.050 0.996
0 2 1.061 0.996
0 3 1.067 0.996
1 4 1.082 0.970
0 5 1.041 0.955
0 6 1.047 0.931
0 7 0.996 0.882
指示事件发生的时间,因此APP=1
时需要Indicator=4
。
我希望此修订有意义。否则请再次询问我。我非常感谢您的帮助。
答案 0 :(得分:1)
读取示例数据:
df <- read.table( text = c('
Date APP DE10
2014-09-22 0 1.010
2014-09-19 0 1.043
2014-09-18 0 1.081
2014-09-17 0 1.050
2014-09-16 0 1.061
2014-09-15 0 1.067
2014-09-12 1 1.082
2014-09-11 0 1.041
2014-09-10 0 1.047
2014-09-09 0 0.996
2014-09-08 0 0.953
2014-09-05 0 0.928
2014-09-04 1 0.970
2014-09-03 0 0.955
2014-09-02 0 0.931
2014-09-01 0 0.882' ),
header = TRUE )
添加星期几:
df$Weekday <- strftime(df$Date, '%u')
现在计算每个APP和每个工作日的事件数,然后传播您的数据。您可以尝试使用dplyr / tidyr。我已经习惯了data.table,所以:
library(data.table)
df <- as.data.table(df)
df[ , Event := paste0('DE10_Event', 1:.N) , by = .(APP, Weekday) ]
df.s <- dcast(df, APP + Weekday ~ Event, value.var = 'DE10')
> df.s
APP Weekday DE10_Event1 DE10_Event2 DE10_Event3 DE10_Event4
1: 0 1 1.010 1.067 0.953 0.882
2: 0 2 1.061 0.996 0.931 NA
3: 0 3 1.050 1.047 0.955 NA
4: 0 4 1.081 1.041 NA NA
5: 0 5 1.043 0.928 NA NA
6: 1 4 0.970 NA NA NA
7: 1 5 1.082 NA NA NA
答案 1 :(得分:1)
您的问题仍然不清楚,但是如果我理解正确,那么您所需的不是创建新变量,而是选择每次发生APP的日期。我要发布一个新答案,因为这是一个不同的问题。
读取示例数据:
df <- read.table( text = c('
Date APP DE10
2014-09-22 0 1.010
2014-09-19 0 1.043
2014-09-18 0 1.081
2014-09-17 0 1.050
2014-09-16 0 1.061
2014-09-15 0 1.067
2014-09-12 1 1.082
2014-09-11 0 1.041
2014-09-10 0 1.047
2014-09-09 0 0.996
2014-09-08 0 0.953
2014-09-05 0 0.928
2014-09-04 1 0.970
2014-09-03 0 0.955
2014-09-02 0 0.931
2014-09-01 0 0.882' ),
header = TRUE )
现在确定您的应用程序在哪里,并获取周围的数据。当然,有更优雅的方法可以做到这一点,但这确实可以做到。它将创建一个新的data.frame,其中包含绘图所需的全部内容:
# Itentify the rows where APP is 1:
APProws <- as.numeric(rownames( df[ df[,'APP'] == 1, ] ))
# An empty data.frame to receive the data:
APP.df <- data.frame(
Event = rep(NA, length(APProws)*7),
Date = as.Date('2000-12-31'),
DE10 = NA,
Indicator = NA )
n <- 0
for( i in APProws ) {
rows <- (n*7+1):(n*7+7)
APP.df$Event[rows] <- paste('Event', n+1)
APP.df$Date[rows] <- df$Date[(i-3):(i+3)]
APP.df$DE10[rows] <- df$DE10[(i-3):(i+3)]
APP.df$Indicator[n*7+4] <- '1'
n <- n+1
}; rm(i, n, rows)
现在,您已经有了所需的情节。
library(ggplot2)
ggplot(APP.df, aes(Date, DE10)) +
geom_line() +
geom_vline(
data = subset(APP.df, Indicator == 1),
aes(xintercept = as.numeric(Date)),
color = 'red' ) +
facet_grid( ~Event, scales = 'free_x')
如果这是您需要的,我真的建议您编辑帖子的标题,因为这会引起误解。描述您要实现的目标,而不是您认为达到目标的方式。
答案 2 :(得分:1)
感谢您的贡献!
对于正在寻找类似问题的解决方案的其他人,我将得到的答案结合在一起:
df$APProws <- 1:nrow(df) #Variable with row numbers
events_rows <- df %>% filter(APP==1) %>% select(APProws) #Indicator for row number for event, APP=1
减去两个变量以获得事件的行距:
diffs <- data.frame(df %>%
mutate(Event1_DE10=df$APProws-events_rows$APProws[1]) %>%
mutate(Event2_DE10=df$APProws-events_rows$APProws[2]))
绘制图形:
diffs %>% ggplot() +
geom_line(aes(x=Event1_DE10,y=DE10), color="blue") +
geom_line(aes(x=Event2_DE10,y=DE10), color="red") +
geom_vline(xintercept=0, linetype="dashed") +
scale_x_continuous(limits=c(-3,3)) +
scale_y_continuous(limits=c(0.3,0.7))
这是结果: