我希望得到Stack Overflowers关于用C++编写的时间序列库的建议和建议,这些库的一些约束和要求:
我正在寻找一种方法将DataFrame转换为TimeSeries而不拆分索引和值列.有任何想法吗?谢谢.
In [20]: import pandas as pd
In [21]: import numpy as np
In [22]: dates = pd.date_range('20130101',periods=6)
In [23]: df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
In [24]: df
Out[24]:
A B C D
2013-01-01 -0.119230 1.892838 0.843414 -0.482739
2013-01-02 1.204884 -0.942299 -0.521808 0.446309
2013-01-03 1.899832 0.460871 -1.491727 -0.647614
2013-01-04 1.126043 0.818145 0.159674 -1.490958
2013-01-05 0.113360 0.190421 -0.618656 0.976943
2013-01-06 -0.537863 -0.078802 0.197864 -1.414924
In [25]: pd.Series(df)
Out[25]:
0 A
1 B
2 C
3 D
dtype: object
Run Code Online (Sandbox Code Playgroud) 我在使用GRETL.在那里,当我对arima模型的验证进行预测时,我会得到蓝色系列的拟合系列和红色系列的原始系列.后来,我切换到R,在这里我找不到任何命令来做同样的事情.我正在使用预测包中的Arima模型.
细节,
在GRETL中,我用来做模型 - >时间序列 - > arima - >预测.它会自动打印合适的系列和原始系列.任何想法在R上做同样的事情?
我在ggplot2包中有一个时间序列图,我已经执行了移动平均线,我想将移动平均值的结果添加到时间序列图中.
数据集样本(p31):
ambtemp dt -1.14
2007-09-29 00:01:57
-1.12 2007-09-29 00:03:57 -1.33
2007-09-29 00:05:57
-1.44 2007-09-29 00:07:57
-1.54 2007-09-29 00:09:57
-1.29 2007-09-29 00:11:57
时间序列演示的应用代码:
Require(ggplot2)
library(scales)
p29$dt=strptime(p31$dt, "%Y-%m-%d %H:%M:%S")
ggplot(p29, aes(dt, ambtemp)) + geom_line() +
scale_x_datetime(breaks = date_breaks("2 hour"),labels=date_format("%H:%M")) + xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")+
opts(title = ("Node 29"))
Run Code Online (Sandbox Code Playgroud)
时间序列演示的样本

移动平均线图样本
预期结果的样本
挑战在于时间序列数据ov =从数据集中获得,其中包括时间戳和温度,但移动平均数据仅包括平均列而不是时间戳,并且拟合这两者可能导致不一致.

我在熊猫中有一个时间序列,如下所示:
Values
1992-08-27 07:46:48 28.0
1992-08-27 08:00:48 28.2
1992-08-27 08:33:48 28.4
1992-08-27 08:43:48 28.8
1992-08-27 08:48:48 29.0
1992-08-27 08:51:48 29.2
1992-08-27 08:53:48 29.6
1992-08-27 08:56:48 29.8
1992-08-27 09:03:48 30.0
Run Code Online (Sandbox Code Playgroud)
我想将其重新采样到一个规则的时间序列,步长为15分钟,其中值是线性插值的.基本上我想得到:
Values
1992-08-27 08:00:00 28.2
1992-08-27 08:15:00 28.3
1992-08-27 08:30:00 28.4
1992-08-27 08:45:00 28.8
1992-08-27 09:00:00 29.9
Run Code Online (Sandbox Code Playgroud)
但是,使用Pandas的重采样方法(df.resample('15Min')),我得到:
Values
1992-08-27 08:00:00 28.20
1992-08-27 08:15:00 NaN
1992-08-27 08:30:00 28.60
1992-08-27 08:45:00 29.40
1992-08-27 09:00:00 30.00
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的'how'和'fill_method'参数的重采样方法,但从未得到我想要的结果.我使用了错误的方法吗?
我认为这是一个相当简单的查询,但我在网上搜索了一段时间,但找不到答案.
提前感谢您提供的任何帮助.
如何使用data.table执行以下(直接使用sqldf)并得到完全相同的结果:
library(data.table)
whatWasMeasured <- data.table(start=as.POSIXct(seq(1, 1000, 100),
origin="1970-01-01 00:00:00"),
end=as.POSIXct(seq(10, 1000, 100), origin="1970-01-01 00:00:00"),
x=1:10,
y=letters[1:10])
measurments <- data.table(time=as.POSIXct(seq(1, 2000, 1),
origin="1970-01-01 00:00:00"),
temp=runif(2000, 10, 100))
## Alternative short names for data.tables
dt1 <- whatWasMeasured
dt2 <- measurments
## Straightforward with sqldf
library(sqldf)
sqldf("select * from measurments m, whatWasMeasured wwm
where m.time between wwm.start and wwm.end")
Run Code Online (Sandbox Code Playgroud) 我想使用特定日期(或月份)作为第一个 bin 的边缘对 Pandas 对象重新采样。例如,在下面的代码片段中,我希望我的第一个索引值是2020-02-29,我很乐意指定start=2or start="2020-02-29"。
>>> dates = pd.date_range("2020-01-29", "2021-07-04")
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M').count()
2020-01-31 3
2020-05-31 121
2020-09-30 122
2021-01-31 123
2021-05-31 120
2021-09-30 34
Freq: 4M, dtype: int64
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我能想到的最干净的用途,pd.cut并且groupby:
>>> rule = "4M"
>>> start = pd.Timestamp("2020-02-29") - pd.tseries.frequencies.to_offset(rule)
>>> end = s.index.max() + pd.tseries.frequencies.to_offset(rule)
>>> bins = pd.date_range(start, end, freq=rule)
>>> gb = s.groupby(pd.cut(s.index, bins)).count()
>>> gb.index = gb.index.categories.right
>>> gb
2020-02-29 32
2020-06-30 …Run Code Online (Sandbox Code Playgroud) 如何进行K-means聚类时间序列数据?我理解当输入数据是一组点时它是如何工作的,但我不知道如何用1XM聚类时间序列,其中M是数据长度.特别是,我不确定如何更新时间序列数据的集群平均值.
我有一组标记时间序列的,我想用K-means算法来检查我是否会得到一个类似的标签或没有.我的X矩阵将是NXM,其中N是时间序列的数量,M是如上所述的数据长度.
有谁知道如何做到这一点?例如,我如何修改这个k-means MATLAB代码,以便它适用于时间序列数据?此外,我希望能够使用欧几里德距离以外的不同距离指标.
为了更好地说明我的疑虑,这里是我为时间序列数据修改的代码:
% Check if second input is centroids
if ~isscalar(k)
c=k;
k=size(c,1);
else
c=X(ceil(rand(k,1)*n),:); % assign centroid randomly at start
end
% allocating variables
g0=ones(n,1);
gIdx=zeros(n,1);
D=zeros(n,k);
% Main loop converge if previous partition is the same as current
while any(g0~=gIdx)
% disp(sum(g0~=gIdx))
g0=gIdx;
% Loop for each centroid
for t=1:k
% d=zeros(n,1);
% Loop for each dimension
for s=1:n
D(s,t) = sqrt(sum((X(s,:)-c(t,:)).^2));
end
end
% Partition data to closest centroids
[z,gIdx]=min(D,[],2);
% Update …Run Code Online (Sandbox Code Playgroud) 我有一个包含大量日内数据的DataFrame,DataFrame有几天的数据,日期不连续.
2012-10-08 07:12:22 0.0 0 0 2315.6 0 0.0 0
2012-10-08 09:14:00 2306.4 20 326586240 2306.4 472 2306.8 4
2012-10-08 09:15:00 2306.8 34 249805440 2306.8 361 2308.0 26
2012-10-08 09:15:01 2308.0 1 53309040 2307.4 77 2308.6 9
2012-10-08 09:15:01.500000 2308.2 1 124630140 2307.0 180 2308.4 1
2012-10-08 09:15:02 2307.0 5 85846260 2308.2 124 2308.0 9
2012-10-08 09:15:02.500000 2307.0 3 128073540 2307.0 185 2307.6 11
......
2012-10-10 07:19:30 0.0 0 0 2276.6 0 0.0 0
2012-10-10 09:14:00 2283.2 80 98634240 2283.2 …Run Code Online (Sandbox Code Playgroud) 给定一个时间序列,我想计算最大亏损,我还想找到最大亏损的起点和终点,这样我就可以计算出持续时间.我想在这样的时间序列图上标记缩编的开始和结束:
一只忙碌的猫http://oi61.tinypic.com/r9h4er.jpg
到目前为止,我已经有了生成随机时间序列的代码,并且我已经有了计算最大亏损的代码.如果有人知道如何确定缩编开始和结束的地方,我真的很感激!
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# create random walk which I want to calculate maximum drawdown for:
T = 50
mu = 0.05
sigma = 0.2
S0 = 20
dt = 0.01
N = round(T/dt)
t = np.linspace(0, T, N)
W = np.random.standard_normal(size = N)
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W
S = S0*np.exp(X) ### geometric brownian motion ###
plt.plot(S)
# Max drawdown …Run Code Online (Sandbox Code Playgroud) time-series ×10
python ×5
pandas ×4
r ×3
dataframe ×2
add ×1
c++ ×1
data-mining ×1
data.table ×1
datetime ×1
ggplot2 ×1
k-means ×1
matlab ×1
numpy ×1
performance ×1