ビッグデータ時代である。データを様々な可視化し見える化することでビジネスの糸口やなにかの切っ掛けを見出すことも可能になっている昨今である。オープンデータの流れも着実に広がっており、公共機関や学術機関によるデータの公開も増加している。

当然ながら、ビジネスシーンでもCSVなどのデータファイルが日常的に蓄積されていくことになる。前回、サクッとPowerShellからアプリケーションを開くコマンドをカスタマイズしたが、ターミナル上でCSVを手軽に開けるとよりスムーズになる。

Import-CsvコマンドレットでCSV表示

Import-Csvコマンドレット(公式API)を使えば可能になる。

Import-Csv .\sample.csv
  • Import-Csvで同じフォルダ内にあるdevelopers.csv(GitHubのオープンデータ)を表示

    Import-Csvで同じフォルダ内にあるdevelopers.csv(GitHubのオープンデータ)を表示

表示ををソートするには、Sort-Objectを用いるが、数字を文字列(Sting型)として認識するのでこのままではいただけない。

Import-Csv .\developers.csv | Sort-Object developers
  • developers(開発者数)でソートしてもString型なので思ったソートにならない

    developers(開発者数)でソートしてもString型なので思ったソートにならない

int型に変換して数値としてソートする場合には

Import-Csv .\developers.csv | Sort-Object {[int]$_.developers} 

とすると、目的の並びになる。

  • int型に変換すると想定する並びに近くなる

    int型に変換すると想定する並びに近くなる

やはり数字は大きい方からならべたい。降順(大きい→小さい)に並べ替えるには-Descendingを末尾に加える。

Import-Csv .\developers.csv | Sort-Object {[int]$_.developers} -Descending
  • これこそ想像していた並びである

    これこそ想像していた並びである

CSV表示をコマンド化する

先に述べたようにCSVをPowerShellで簡易に開けると利便性がある。しかし、毎回、コマンドレットを2つとパイプを繋げる上記の処理を思い出し/探し出すのは面倒である。コマンド化(csvopen)する方法を考えた。


function csvopen {
    Import-Csv .\developers.csv | Sort-Object {[int]$_.developers} 
}

ファイル名と列名は毎回異なるので、引数で処理できるようにPowerShellのキーワードparamでパラメーラー化する。


function csvopen {
    param(
        $A,
        $B
    )
    Import-Csv $A | Sort-Object {[int]$_.$B} -Descending
}

こうしておけば、毎回異なるファイル名、列名であっても引数で入力することで汎用化できる。notepad $PROFILEでプロファイルを開き、.$PROFILEで反映させると

  • notepad $PROFILEでプロファイルを開き、.$PROFILEで反映

    notepad $PROFILEでプロファイルを開き、.$PROFILEで反映

のように動作する。当面はint型の数値でよいのであるが、実際には小数点や金額などの項目をソートする際には、intではなくdoubleやdecimalなどの使用も考慮しなければならないところだ。今回はこれでいいのだ。そう思った。