フィルターが先、ソートは後、という大原則

Power Queryの決まり事。ビッグデータ解析では必須とされる「フィルターが先、ソートが後」の大原則。
だが、フィルターとソート、「中の人」が良しなにしてくれるので、その順番に実は差はない。

元データ1

75000行ほどの小さいデータ。
拙著『モダンExcel入門」(日経BP)のサンプルファイルがもとになっている。

方針

このデータで、左列「アイテム」でイチゴとオレンジの2つに「フィルター」、右列「純売上高」で昇順で「ソート」する。
フィルターとソートの順番次第で、表示される結果に違いは出ない。
ただし、処理速度が違う。
今回は典型的な4つのパターンで検証。

①全列で、ソートが先で、フィルターが後

「適用したステップ」のとおり、「並べ替えられた行」が先、「フィルターされた行」が後。

かかった時間を計測。

②全列で、フィルターが先で、ソートが後

「適用したステップ」のとおり、「フィルターされた行」が先、「並べ替えられた行」が後。

かかった時間を計測。

①1.6➡②0.8、ほぼ半分の処理時間。

③対象列を絞り、ソートが先で、フィルターが後

「適用したステップ」のとおり、「削除された他の列」を実行後、「並べ替えられた行」が先、「フィルターされた行」が後。

かかった時間を計測。

①1.6➡③1.3。短縮された。

④対象列を絞り、フィルターが先で、ソートが後

「適用したステップ」のとおり、「削除された他の列」を実行後、「フィルターされた行」が先、「並べ替えられた行」が後。

かかった時間を計測。

①1.6>③1.3>②0.8>④0.6。
④が最速。

ここまでの結論

最長①、最短④の差は、およそ1秒。
たった7万行のデータで、これだけの差。
ビッグデータになるほど、留意したい論点の一つ。

「フィルターが先で、ソートは後。」
MS一次情報にも書いてあることだから、当然これで処理速度が速くなる。

そう思い込んでいた………。
小さいデータでは間違いのもとだ、反省。

元データ2

加賀田さんから指摘を受けた。
「実は、中の人がうまいことやってくれる」
ん?

ということで、再度確かめることにした。
今度は「104万行の壁」に再挑戦。104万8576行×500列。
エクセルでも読み込める最大行数のデータを対象に再検証。

方針

Colmun1で昇順に「ソート」、Colmun2で1~5に「フィルター」。
つまり、その他の1,048,571行と498列は不要な列。

前回同様、①全列、ソート、フィルター。②全列、フィルター、ソート。③対象列、ソート、フィルター。④対象列、フィルター、ソート。4つのパターンで検証。

その結果は、実に興味深いものであった。

①全列で、ソートが先で、フィルターが後

全列、ソート、フィルターの結果は、次のとおり。

かかった時間を計測。

①48.21秒。

②全列で、フィルターが先で、ソートが後

全列、フィルター、ソートの結果は、次のとおり。

かかった時間を計測。

①48.21>②48.18。
ほぼ、同じ結果???

③対象列を絞り、ソートが先で、フィルターが後

対象列、ソート、フィルターの結果は、次のとおり。

かかった時間を計測。

③13.45秒。①②よりも格段に速くなった。
データ分析の対象列を絞り込むことは、処理速度にかなり影響があるということ。

④対象列を絞り、フィルターが先で、ソートが後

対象列、フィルター、ソートの結果は、次のとおり。

かかった時間を計測。

③13.45>④13.10。
ほぼ同じ???

本当の結論

「フィルターが先、ソートが後」というのは、大原則。

これは、MS一次情報にも書いてある。
しかし、この大原則は「中の人」がうまいことやってくれる。
さすが、Power Query。

もちろん、「フィルターが先、ソートが後」という基本原則は、処理速度を速めるには大切な思考回路だ。
実際、①>②、③>④という検証結果もある(但し、その差は僅少、大勢に影響はない)。

実は、処理速度を高めるために最も有効なのは、一番遅い①48.21>一番早い④13.10の違い、つまり「不要な列」の削除ということになる。

「列全部ではなく、対象を絞る」
これで、処理速度が格段に速くなる。

エクセル脳では、この辺りで躓く。
Power Queryはコネクトしているだけなので、元データはそのまま存在する。
だから、不要な行列は削除して分析対象となるデータだけに絞る方が、圧倒的に処理速度が速くなる。

「フィルター」すれば、データを絞り込め、その分後工程の負荷が小さくなる。だから「先」の方が有利。
「ソート」は、全部読み込んでから並べ替えるので、負荷が高くなりがち、だから「後」回しの方が良い。
これが大原則。

だが、これら「フィルター」「ソート」の順番は、そこまで気にする必要がないのかもしれない。
上記のように「中の人」がサポートしてくれている。
一応、「フィルターが先、ソートが後」の原則は、知っておいた方が良い。

繰り返す。
処理速度を高めるために最も大切なのは、分析対象となる「行列」を絞ること。
エクセル脳だと、すべての行列を残したり、ファイルをコピーしてごみと化したり………。
なんでもエクセルで、というのは、そろそろやめた方が良いと思う。

モダンExcelであれば、PowerQueryで行列の削除を実行しても、元データはそのまま残る。
とにかく、必要なデータに絞り込もう。
これで、処理速度を圧倒的に高められる。

基本が大切。

蛇足

モダンExcelは、エクセルを入り口にしているだけの別物、こうした認識が大切だ。

■■■■■

「正しいモダンExcel」の使い方の基本を学ぶには、Power Query(パワークエリ)とPower Pivot for Excel(パワーピボット)の両者を「一体理解」する必要があります。
ぜひ、拙著「モダンExcel入門」(日経BP)で学んでみて欲しいと思います。
サンプルデータで、実際に手を動かしながら、理解を深めることもできます。参考にしてください。

■■■■■

「モダンExcel研究所」を楽しむ際の【注意事項】

コンテンツコピー、スクレイピングなど【厳禁】 ☚【検知ツール設置済】☚悪質な場合【法的措置】を講じます

(過負荷によるサーバー障害が生じた経験上、ご協力お願いいたします!)

モダンExcel研究所

フォローお待ちしてます!

error: Content is protected !!