次の形式のExcelデータがあります
Ticker Date Price
GOOG 1/1/12 100
GOOG 1/2/12 200
AAPL 1/1/12 50
等
これを次の形式の時系列コレクション (または単にデータのマトリックス) に変換したいと思います。
Date GOOG AAPL .... (variable number of tickers)
1/1/12 100 50
これは、Matlab でいくつかの計算を行うために使用する方が簡単だからです。
私が過去にこれを行った方法は、それが最も効率的だとは思いませんが、unique(tickers)
関数を実行してティッカーの数を確認し、それに応じて for ループでデータを切り取ることでした。これは、大規模なデータセットでは非常に非効率的 (かつ醜い) だと思います。誰かがより良い提案をしてくれることを望んでいましたか?
これは、データがティッカーでソートされていることを前提として、同様のデータに対して行った以前の試みのサンプルです。
[uniqueSecurities, uniqueIndex] = unique(Tickers);
numberSecurities = length(uniqueSecurities);
上記のコードは、新しいティッカーが開始する場所 (uniqueIndex エントリごと) を示します。
各ティッカーの観測数が同じであると仮定すると、次の方法でデータを切り取ることができます。
numberObservations = whatever
j = 0;
for secIndex = 1:numberSecurities
NewDataMatrix(:,secIndex) = Prices(j : j + numberObservations);
j = j + numbrtObservations;
end
ここで、証券ごとに可変数の観測がある場合、「numberObservations」間隔でジャンプする代わりに、uniqueIndex
上記で定義した I を使用し、同様の方法で、uniqueIndex(k) と uniqueIndex(k) の間のインデックスですべてを切り刻みます。 +1)。
私が投稿している理由は、私が非常に効率的であるとは思わないためです。さらに、これを行うためのデフォルトの MATLAB の方法はありますか? 私が理解しているように、ほとんどのデータベースは上記の形式 (最高の形式ではありません!) でデータを提供しますが、残念ながら形式を制御することはできません。