DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

EFファイル/DファイルをPowershellで扱う

なんでいきなりPowershellなの?

えーと、ご存じない方のために説明すると、Powershellコマンドプロンプトの強化版みたいな奴です。
将来的にはコマンドプロンプトを置き換える方向に進むみたいですね。

さて、なんでPowershellかと言うと・・・

Import-Csvコマンドが便利

Import-Csvコマンドは、かなり大きなサイズのCSVでも読み込めて、しかも何の苦労も要りません。 例えば、

$x = Import-Csv efile.txt -Delimiter "`t" -Encoding Default

と打てば、同じディレクトリにあるefile.txtをタブ区切りテキスト形式で読み込んで、変数$xに格納できます。
読み込んだデータはテキストでは無くオブジェクトになります。
ヘッダがある場合、ヘッダに対して各列が紐付く形になります。
つまりどういうことかと言えば、 $x.データ識別番号などと打てば、データ識別番号の列だけを抽出できるんですね。
これは超便利です。PandasのDataFrameの簡易版みたいに使えます。
この関数がC#にあれば普通にC#使ってたかも…

メソッドが便利

上記の通り、データがオブジェクトになるため、メソッドが扱えます。

$x.退院年月日.replace("00000000","infinity")

上の例では、$xの属性退院年月日replaceメソッドをかけて、文字列00000000をinfinityに置換しています。
ちなみに目的はPostgres読み込み前の前処理ですね。
Postgresで00000000を日付データとして読み込もうとするとエラーになるので・・・

データの上書き(2017-03-02追記)

データの上書きを行うには、一度foreachループを回す必要があります。 例えば

$x | foreach {
$_.退院年月日 = $_.退院年月日.replace("00000000","infinity")
}

という感じです。
実際にEF/Dファイルの退院年月日を修正するスクリプトGitHubに置きましたので、参考までにどうぞ。

普段Pythonを触っていて、オブジェクトという概念に馴染みがあれば、Powershellは使いやすいシェルだと思います。
時間があれば触ってみるといいかも知れません。