タグ別アーカイブ: MCMD

分析者目線のPowerShell活用シナリオ

PowerShellもバージョンを重ね、WindowsだけではなくLinuxでの稼働などいろいろな方向性が見えてきている。それらを踏まえて、インフラ側ではなく分析者として活用を過去の事例を踏まえて検討する。

私は、業務において分析者として、PowerShellを活用してきた。なぜならば、PowerShellは.NET Framework、そして、WindowsであればCOMコンポーネントを呼び出せるため、通常だと操作がしにくいものも操作できる可能性があるためである。

例えば、パスワード付きのExcelファイルなどは分析者泣かせである。ETLツールでの対応もほとんど見ないため、分析のワークロードの中にパスワード付きExcelが入ってくるとかなり面倒になる。しかし、コンプライアンス等々の観点から、パスワード付きExcelファイルなどを処理したいというニーズは存在するであろう。

さて、PowerShellをデータ分析で用いる場合、行志向のデータを行でイテレートして集計するなどの動きは容易に起こりえるが、この辺りがPowerShellでは厄介になるところである、たしかに、PowerShellにはforeach構文とForEach-Objectというイテレートが存在し、ForEach-ObjectにはIEnumerableなどを使って、行ごとのイテレートをこなせる可能性がある。

とはいえ、IEnumerableのようなインターフェイスを使いたいもっとも、大きな理由、行を逐次的に扱うことでデータの行数に対するスケーラビリティを確保するが実現できるかどうかはここのオブジェクトの実装にも左右される面が多く一筋縄ではいかない。なぜなら、データを途中でメモリに全量バッファリングしてないかどうかは個々のオブジェクトによるからである。

Hiveなどを使って並列分散の処理環境を構築すれば回答としては単純であるが、そもそも、環境の準備に要する時間や、パスワード付きのExcelファイルが紛れ込んでいたりすると一筋縄ではいかない。そして、ただでさえデータの前処理は必要であり、なおかつ時間も要する作業であり、できるだけライトウェイトな作業を心掛けたいところではある。

分析者として、有用なcmdletを一つ上げるとすれば Measure-Object である。このcmdletは数値の合計、最大値、最小値、平均を算出できるため、データの確認に有用である。もちろん、データサイズのスケーラビリティには注意する必要があるが。

現在であれば、MCMDをWindowsで稼働させるのも容易になってきているので、PowerShellに頼るべき局面も減少してきているとは思うが、COMの呼び出しなどほかのソリューションでは困難な状況も打開できるため、PowerShellを活用した前処理基盤の構築を現在、もくろんでいる。

PowerShellの分析シーンでの活用としては、以下の記事を参照した。