本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは、
本稿のサンプルコードは、
データ分析の難しさ
ビッグデータやデータサイエンスという言葉がよく使われ始めて何年も経ちますが、
データには不具合がある
現場のデータには、
そのため、
使用するデータの選定が難しい
次の理由により、
(f) 各列の値(符号や略語や特別値) の意味が不明 (g) 1枚の表が持つ列数が過多[7] (h) 1枚の表に酷似した列が複数[8] (i) 異なる表に同じ意味の列が過多[9] (j) 提供された表の枚数が過多[10]
そのため、
既存ソフトウェアの問題点
UNIX系コマンドや、-1
や999
や空欄など)awk '{print $1,$3,$2}'
と書けばよいものの、for
文を使ったプログラミングを行う必要があります。これらは1回ではなかなか正しく書けないため、
表形式データを扱う新しいPerl製コマンド群
上記の現状を打破すべく、
Perl製コマンドのメリット
インストール方法
本稿で使う各コマンドは、App::
を前置したモジュール名を指定してインストールします
8個のコマンドを逐次インストールする場合 $ cpanm App::csv2tsv $ cpanm App::csel $ cpanm App::expandtab $ cpanm App::crosstable $ cpanm App::colsummary $ cpanm App::venn $ cpanm App::digitdemog $ cpanm App::colgrep 8個のコマンドを一括インストールする場合 $ cpanm App::Bin4TSV::8 plenvを使っている場合は、各コマンドを利用可能とするため以下を実行 $ plenv rehash
これらのコマンドは、
コマンドの共通オプション
各コマンドには、-~
は、
いくつかのオプションは、-m0
など0
を伴う場合の多くは、-i
は、-g
は、
各コマンドのマニュアルは、--help
を付与して実行すると表示されます。
扱うデータはTSV形式
多くのデータは表形式で、
自由に使えるTSVファイルとしては、
CSV形式からの変換 ──csv2tsv
CSV形式のファイルをTSV形式に変換する場合は、csv2tsv
を使います
CSV形式をTSV形式に変換。リダイレクション(<)の使用が望ましい
$ csv2tsv < foo.csv > foo.tsv
自在な列操作 ──csel
便利さに長年の定評があるAWKをさらに便利にすべく、csel
を作りました。たとえば、csel -p3..
により、
1行12列のTSVファイルの作成 $ perl -E'say join"\t",1..12' | tee c12.tsv 1 2 3 4 5 6 7 8 9 10 11 12 -pで指定列のみ抽出。「..」は範囲指定。AWKより簡単 $ csel -p3..7 c12.tsv 3 4 5 6 7 -dで指定列を出力抑制。「,」は連結指定。AWKだと難しい $ csel -d3..7,10,12 c12.tsv 1 2 8 9 11 -hで指定列を先頭(左端)に移動。「12..10」は逆順指定(12,11,10) $ csel -h12..10 c12.tsv 12 11 10 1 2 3 4 5 6 7 8 9 -tで指定列を末尾(右端)に移動。レイアウトを崩す列の移動に実用的 $ csel -t9,6 c12.tsv 1 2 3 4 5 7 8 10 11 12 9 6
列を縦ぞろえで表示 ──expandtab
表形式のデータは、 次の例では、 実行結果は図1です。
ファイルがタブ区切りではない場合は、 数値パラメータ付きの <続きの 2022年8月24日発売less
で中身を見ても、expandtab
を使います。expandtab
は、/etc/
に対して実行しています。
-sで与えた閾値より幅広な文字列があると、
-i
オプションで区切り文字を指定します。ここでは/etc/
の区切り文字である:を指定しました。
-s
オプションにより、本誌最新号をチェック!
WEB+DB PRESS Vol.130
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT