サンプル数が大きい時系列データや周波数応答が格納されたxlsxやcsvファイルをExcelで開くと、かなり動作が重くなることがあります。
そのようファイルでグラフをプロットのような操作をするのは動作が遅いため苦行ですし、Excelが突然落ちるリスクも高くなります。
基本はプログラムやバッチファイルで間引き(デシメーション)するのがよいですが、どうしてもExcelでなんとかしたい場面があります。
そこで、ファイルサイズの大きい xlsxやcsvのデータをExcelで間引く方法を示します。
元データの形式例
例として、時系列データを考えます。
今回は、raw
シートにA列に時系列のインデックス,B-G列に異なる時系列データがあるxlsxを考えます。
このraw
シートを編集せず、decimate
シートに間引いたデータを作成する方法を実行します。
Excel の数式と関数
decimate
シートには、今回はセルi2
に間引き係数 N をセットします。
すなわち、decimate
シートのデータはraw
のデータの 1/Nサンプルになるように間引きを行います。
つまり、N=2であれば行数が半分になります。
間引きの数式は以下のようになります(A2セルに入力する場合)。
=INDIRECT("raw!"& SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),) & ROW(A2)*($I$2)-($I$2-1)*2)
INDIRECT
、SUBSTITUTE
、
ADDRESS
、ROW
、COLUMN
関数の使い方については後述の参考文献をご参照ください。
結局のところ、raw
シートのデータをN-1サンプルごとに参照しています。
これを行と列方向にドラッグするなどしてオートフィルします。
オートフィルしたセルの数式を確認すると、赤線の部分がセル番号に合わせて変化しています。
なお、数式の $I$2
に関する部分を調整することで、間引き係数が格納されたシート/セル番号を変更したり、最初のサンプルをずらす(オフセット変更)などを制御できます。
間引き係数を変えた例
1-fold decimation (間引かない)
3-fold decimation
10-fold decimation