0

次のようなデータセットがあります。

'2014-01-07 22:20:00'        [0.0016]
'2014-01-07 22:25:00'        [0.0013]
'2014-01-07 22:30:00'        [0.0017]
'2014-01-07 22:35:00'        [0.0020]
'2014-01-07 22:40:00'        [0.0019]
'2014-01-07 22:45:00'        [0.0022]
'2014-01-07 22:50:00'        [0.0019]
'2014-01-07 22:55:00'        [0.0019]
'2014-01-07 23:00:00'        [0.0021]
'2014-01-07 23:05:00'        [0.0021]
'2014-01-07 23:10:00'        [0.0026]

最初の列はタイム スタンプ記録データすべて 5 分、2 番目の列はリターンです。

毎日、5 分バーのリターンの平方和を計算したいと思います。ここでは、1 日を午後 5 時から午後 5 時までと定義します。(したがって、日付2014-01-07はからから2014-01-06 17:00までです2014-01-07 17:00)。したがって、毎日、午後 5 時から午後 5 時までのリターンの 2 乗を合計します。出力は次のようになります。

'2014-01-07'        [0.046]
'2014-01-08'        [0.033]

どうすればいいですか?

4

2 に答える 2

0

ここに代替ソリューションがあります いくつかのランダムデータを定義するだけです

t1 = datetime('2016-05-31 00:00:00','InputFormat','yyyy-MM-dd HH:mm:ss ');
t2 = datetime('2016-06-05 00:00:00','InputFormat','yyyy-MM-dd HH:mm:ss ');
Samples = 288;        %because your sampling time is 5 mins            
t = (t1:1/Samples:t2).';
X = rand(1,length(t));

最初に、指定された基準を持つサンプルを見つけます (何でもかまいません。あなたの場合は 00:05:00 でした)

 n = find(t.Hour >= 5,1,'first')
    b = n;

与えられたサンプルの後の合計日数を見つけます

totaldays = length(find(diff(t.Day)))

そして、毎日の「リターン」を2乗して累積します

for i = 1:totaldays - 1
    sum_acc(i) = sum(X(b:b + (Samples - 1)).^2);
    b = b + Samples;

end

これはデータの視覚化のためだけです

Dates = datetime(datestr(bsxfun(@plus ,datenum(t(n)) , 0:totaldays - 2)),'Format','yyyy-MM-dd')
table(Dates,sum_acc.','VariableNames',{'Date' 'Sum'})

   Date        Sum  
__________    ______

2016-05-31    93.898
2016-06-01    90.164
2016-06-02    90.039
2016-06-03    91.676
于 2016-06-15T16:49:25.617 に答える
0

日付がセルにあり、値がベクトルにあることは認めます。

たとえば、次のようになります。

date = {'2014-01-07 16:20:00','2014-01-07 22:25:00','2014-01-08 16:20:00','2014-01-08 22:25:00'};

value = [1 2 3 4]; 

次の方法で、各日付の合計を見つけることができます。

%Creation of an index that separate each "day".

    [~,~,ind]   = unique(floor(cellfun(@datenum,date)+datenum(0,0,0,7,0,0))) %datenum(0,0,0,7,0,0) correspond to the offset

for i = 1:length(unique(ind))
    sumdate(i) = sum(number(ind==i).^2)
end

そして、各合計の対応する日を見つけることができます

datesum  = cellstr(datestr(unique(floor(cellfun(@datenum,date)+datenum(0,0,0,7,0,0)))))
于 2016-06-15T16:01:44.190 に答える