1

リレーショナルデータベースから(単一のSQLクエリから)インポートされた時系列データを次の形式で変換する簡単な方法を見つけようとしています

ticker     date   price      num_tickers num_dates
-------    ----   --------   ----------  ---------
t001       d1     pr001_d1    k           n    
t001       d2     pr001_d2    k           n     
...    
t001       dn     pr001_dn    k           n 
...
t002       d1     pr002_d1    k           n     
t002       d2     pr002_d2    k           n     
... 
t002       dn     pr002_dn    k           n 

...

t00k       d1     pr00k_d1    k           n     
t00k       d2     pr00k_d2    k           n     
... 
t00k       dn     pr00k_dn    k           n 

(最後の 2 列を含めたので、データを繰り返し処理しなくてもティッカーと日付の数がわかります)

これは次の形式で Mathematica にインポートされます

data = {{'t001',d1,pr001d1,k,n},{'t001',d2,pr001d2,k,n},...,{'t001',dn,pr001dn,k,n},
{'t002',d1,pr002d1,k,n},{'t002',d2,pr002d2,k,n},...,{'t002',dn,pr002dn,k,n}
...
{'t00k',d1,pr00kd1,k,n},{'t00k',d2,pr00kd2k,k,n},...,{'t00k',dn,pr00kdn,k,n}}

しかし、私はそれを次の形式で必要とします:

tickers = {'t001','t002',...,'t00k'}
dates =   {d1,d2,...,dn}
timeseries ={{pr001_d1,pr002_d1,...,pr00k_d1},
             {pr001_d2,pr002_d2,...,pr00k_d2},
             ...
             {pr001_dn,pr002_dn,...,pr00k_dn}}

これは力ずくですべてをループすることで行うことができますが、Mathematica には非常に強力なリスト操作関数がいくつかあることを知っています (私はあまり詳しくありません)。ありがとう!

4

1 に答える 1

2

ある種のラベルである最初の要素に従ってデータを分割したいとします。SplitBy次のように使用します。

Module[{split=SplitBy[data,First]},
  tickers=split[[All,1,1]];
  dates=split[[1,All,2]];
  timeseries=split[[All,All,3]];]
于 2013-02-25T04:29:24.917 に答える