本ブログはシリーズものです(が、単体でも使えると思います)。最初の記事であるe-Statの境界データについての説明のページはこちら。一つ前の記事であるe-Statの境界データ一括ダウンロードについてはこちら。
前回の記事で、e-Statから大量のZIPファイルをダウンロードしました。実際に使うためにはこれらを解凍して読み込む必要があります(AlteryxにはZIPファイルを開く機能もありますが、特定の形式でしか使うことができません。また、ファイル名もあらかじめ判明している必要があります。そのため今回のようにZIP解凍に対応していないShepeファイルの場合は、解凍してから読み込む形になります)。
ZIPファイルを解凍するには
ZIPファイルの解凍には、様々な方法があります。基本的にはコマンドラインツールを使い、外部ツール(7-zipやPowerShell)で圧縮・解凍を行うか、Pythonツール、RツールでZIPを操作するパッケージを使って圧縮・解凍を行うか、主に2つの方法に分かれます。
今回は、Windows標準の機能でできるPowerShellを使った方法をご紹介します。
ZIPファイルの解凍をPowerShellで行う場合は、Expand-Archiveコマンドを使います。以下のようなコマンドになります。
powershell -command "Expand-Archive ZIPファイルパス -Force -DestinationPath 解凍先パス"
「-Force」オプションは、強制的に上書きを行います。「-DestinationPath」オプションは、解凍先のパスを指定するオプションです。なお、パスに空白を含んでいる場合は、「’」(シングルクオテーション)で囲む必要があります。
例えば、ZIPファイルのパスが、「C:\MyDoc\AYX\e-Stat\国勢調査\01_北海道.zip」、解凍先パスを、カレントパス直下にある「TownLevel」というパスにすると以下のようになります。
powershell -command "Expand-Archive 'C:\MyDoc\AYX\e-Stat\国勢調査\01_北海道.zip' -Force -DestinationPath './TownLevel'"
このようなものをバッチファイルにし、コマンド実行ツールで実行すればオッケーです。
Alteryxで実装してみる
それではAlteryxで実装してみたいと思います。処理の順番としては以下のとおりです。
- ZIPファイルリストを作る
- ZIPを解凍するコマンドを作る
- ZIP解凍のコマンドをバッチファイルとして保存し実行、解凍する
1.ZIPファイルリストを作る
まず、ZIPファイルが保存しているフォルダからフォルダツールを使ってファイルのリストを作成します。これは非常に簡単で、ディレクトリツールを使うだけです。
ディレクトリにはZIPファイルが保存されているフォルダを指定します。また、ファイル指定の部分は、「*.zip」とし、ZIPファイルのみを読み込むように指定します。
2.ZIPを解凍するコマンドを作る
ZIP解凍のコマンドは、フォーミュラツールで作っていきましょう。一点注意点があります。ZIP解凍のコマンドは、ダブルクオーテーションとシングルクオテーション両方を使います。これは、元々コマンドの中にダブルクオーテーションを含むというのがありますが、さらにファイルパスが空白を含んでいる場合はシングルクオテーションで囲む必要があるため、最初からファイルパスに空白があるのを前提にコマンドを作り込む必要があります。
一般的に文字列をフォーミュラツールに組み込む場合は、シングルクオテーションもしくはダブルクオーテーションで囲む必要がありますが、両方ある場合は少し工夫が必要です。つまり、シングルクオテーションを含む場合は、ダブルクオーテーションで囲み、ダブルクオーテーションを含む場合はシングルクオテーションで囲む必要があります。
例えば、今回のような場合、以下の用に、コマンドの中にシングルクオテーションとダブルクオーテーションを含む形になります。
powershell -command "Expand-Archive 'C:\MyDoc\AYX\e-Stat\国勢調査\01_北海道.zip' -Force -DestinationPath './TownLevel'"
このようなコマンドを作る場合は、以下のような数式で対応します。赤い部分はシングルクオテーションで囲っている部分。水色の部分はダブルクオーテーションで囲っています。
'powershell -command "Expand-Archive '+"'"+[FullPath]+"' -Force -DestinationPath './TownLevel'"+'"'
実際のフォーミュラツールの設定は以下のような形になります。
ここまでのワークフローは以下のような形になります。
3.ZIP解凍のコマンドをバッチファイルとして保存し実行、解凍する
ここまで来ると、あとはコマンド実行ツールの出番です。まず、コマンド実行ツールはどのようなものか解説します。
コマンド実行ツール自体は、一度データを保存し、外部ツールを実行し、さらにデータを読み込む、という機能を持ったツールです。ここで、最初のデータを保存する時に、バッチファイルとして保存します。その後、そのバッチファイルを実行し、今回であれば解凍したファイルをそのまま読み込むことも可能です(解凍しっぱなし、ということももちろんできます)。
まず、最初のデータをバッチファイルとして保存する際に、今回作り込んだ解凍のコマンドを「.bat」形式で保存する必要があります。ただ、コマンド以外の不要なフィールドがあると、正常にバッチファイルが作成されないため、セレクトツールでコマンド部分だけにしましょう。
その後、コマンド実行ツールを接続していきます。
ここで、まず「ソースの書き込み」を行います。
以下のように設定します。
ファイルパスは、「unzip.bat」としています。
ポイントは、ファイル形式を「CSVファイル」にすることです。また、区切り記号は「\0」、「戦闘業にフィールド名を含める」はチェックを外します。これで、不要なデータが書き込まれずコマンドだけが書き込まれます。
再度、コマンド実行ツールの設定に戻ります。
外部プログラムを実行、のところはコマンドを「unzip.bat」にします。最小化で実行、サイレント実行は好みでつけてください。
これで、完成です。
これで実行して問題なければ、コマンド実行画面が開き、ファイルが順次解凍されます。
おまけ
今回、国勢調査の境界データを読み込んできました。形式としてはShapeファイルの形式となっています。これを解凍後にそのまま読み込む設定にしてみましょう。
結果をそのまま読み込むためには、「結果の読み取り」オプションを使います。入力ボタンをクリックしましょう。
単純にデータ入力ツールと同じようなものが立ち上がるので、ここで出力先のフォルダで「*」を使って読み込みます。
今回のShapeファイルは、同じ投影法とスキーマを持ったファイルなので、「*」で読み込みが可能です。このままコマンド実行ツールの後ろにデータ出力ツールを接続すれば完了です。
まとめ
- コマンド実行ツールとPowerShellのコマンドを使って一気にZIPファイルの解凍をする方法をご紹介しました
- 解凍後にファイルを読み込む方法もおまけで紹介しました
コメント