前回の
表データの把握
(2)colsummaryの結果を眺めることで、vennにより、cselでいくつか選んで、crosstableでクロス集計表を作成することで、
クロス集計表の作成 ──crosstable
crosstableの基本機能は、
Twitterから収集したデータに対する例
Twitterのツイートを特定のキーワード群で検索して取得したデータであるtwitter.に対してcrosstableを実行し、
twitter.は各行に日付、crosstableで集計します。
各行「年-月-日\t時:分:秒\t発言内容」の:以下をPerlで除去
$ crosstable <( perl -pe's/:.*//' twitter.tsv )
得られた結果をターミナルからExcelにコピー&ペーストし、
 
出力からの知見
図1から、
全列の特徴量の表示 ──colsummary
全列のさまざまな特徴量を、colsummaryです。列の特徴量として表1の各項目を色付きで出力します。
| 列番 | 入力表の列の番号。1始まり | 
| 異なる値 | 入力表のその列が、 | 
| 値の範囲 | 各出現値を | 
| 最頻値 | 頻度 | 
| 頻度 | 上位と下位の頻度を、 | 
| 桁数 | 各値の文字数を0か1以上により|で区切り、 | 
これらの出力項目を目で読み取ることで、
TRC書誌情報の表に対する例
次の例では、colsummaryを実行しています。
ダウンロードしたZIPファイルの解凍。次で使うT*0710.txtを生成 $ unzip TRCOpenBibData_20210710.zip 出力表の視認性のためにexpandtabを使用 $ colsummary -g3 -v9 -j -m0 T*0710.txt | expandtab -s30
実行結果は図2です。図2の出力の18行は、T*0710.
 
複数データの重なり把握 ──venn
vennは、vennでは出現延べ数と具体値も出力されるため、
4個のファイルに対する例
ここでは、
自作シェル関数yを作成。引数を文字ごとにばらして改行を挿入 $ function y(){ echo -n $* | perl -pe's/./$&\n/g' } cardi.はcardinalityの略。minstrとmaxstrは辞書順の先頭と末尾 $ venn <(y ABCCC) <(y AABDEFG) <(y ABBDEFG) <(y DEEEFG) cardi. file1 file2 file3 file4 minstr maxstr 2. 2 3 3 0 'A' 'B' 1. 3 0 0 0 'C' 4. 0 4 4 6 'D' 'G'
最初に自作シェル関数yを定義します。yは、
次のコマンドラインは、{A,B,C,C,C}と{A,A,B,D,E,F,G}と{A,B,B,D,E,F,G}と{D,E,E,E,F,G}に対応する4個のファイルfile1~4とします)vennに与えるかのように振る舞います。
vennのアルゴリズム
上記の例をもとに、vennのアルゴリズムを説明します。
まず、
次に、
file1~4のそれぞれに、
最後に、
出力表から読みとれること
出力の0の出現パターンなどから、
データの値の簡便な解読
本節では、digitdemogは、colgrepを意味の不明な値を持つ行の抽出に使えば、
各行各桁に出現した全文字の頻度集計 ──digitdemog
ある列の文字列の出現パターンを知る場合は、digitdemogdigitdemogの基本機能は、
以下では、csel -p11を使うことにより、T*0710.の11列目を取り出しています。
各文字が各行先頭から何文字目に何度出現したか。-.で追加のヒント
$ digitdemog -. <( csel -p11 T*0710.txt ) | expandtab
    1   2   3     4     5     6   7   8   9
'.' 0   1.  0     0     0     0   0   0   0
'0' 0   132 0     0     7     0   0   0   0
'1' 504 308 0     7     4     0   0   0   0
'2' 753 70  0     22    3     1.  0   0   0
'3' 102 13  0     7     3     0   0   0   0
'4' 0   10  0     0     0     0   0   0   0
'5' 0   96  0     0     2     0   0   0   0
'6' 0   312 0     0     11    0   0   0   0
'7' 0   31  1.    0     3     0   0   0   0
'8' 0   101 0     0     1     0   0   0   0
'9' 1.  286 0     0     3     0   0   0   0
'c' 0   0   1323. 0     0     36. 1.  0   0
'm' 0   0   0     1323. 0     0   36. 1.  0
'×' 0   0   36.   1.    0     0   0   0   0
end 134 0   0     0     1323. 0   0   36. 1.
※各値の末尾に仮想的な文字endを伴うと見なしている
この結果から、.)0は、
文字列パターンの解読
上記でdigitdemogにオプション-.を与えたので、1.36.1323.1323.と示された3ヵ所は、'c'と'm'とend)
この追加のヒントから元データをもとに謎解きをすると、T*0710.の11列目の出現値は、
この11列目は、
指定列で正規表現検索 ──colgrep
colgrepは、
以下では、
1列目のISBNコードが空の図書をすべて検出。cselでタイトルなどのみ表示
$ colgrep -c1 -e'^$' T*0710.txt | csel -p11,17,2
match:7 unmatch:1487 total:1494 (colgrep)
30cm    ¥1800   東京2020オリンピック公式ガイドブック
30cm    ¥1800   東京2020パラリンピック公式ガイドブック
21cm    ¥545    現代俳句 令和3年7月号
26cm    ¥8100   法令全書 令和3年5月号
30cm    ¥3000   賃金事情調査 令和2年
30cm    ¥4500   水産油脂統計年鑑 2020年
26cm    ¥1000   法と民主主義 NO.559(2021-6)
-c1と-e'^$'により、^$にマッチ
上記の結果から、
特別値を持つ行の特徴を比較でとらえる
また別の少し実用的な例で試してみます。
抽出した行全体についての性質をcolsummaryで調べる $ colgrep -c11 -e'^$' T*0710.txt | colsummary 134 line(s) read;... ※11列目が空なら10、15、16、18列目もすべて空とわかる 比較のために、上記で抽出した行以外(-~指定)を調べる $ colgrep -~ -c11 -e'^$' T*0710.txt | colsummary 1360 line(s) read;... ※比較してわかることは、すべてが空でないのは10列目のみ
ここではcolsummaryも併用しています。別の列との関係をきちんと把握するには、colgrepにオプション-~を与えて、
紙幅の都合で出力は省略しましたが、
このようにcolgrepとcolsummaryを使った比較で、
まとめ
本稿は、
さて、
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/
定価1,628円
ISBN978-4-297-13000-8
- 特集1
 イミュータブルデータモデルで始める
 実践データモデリング
 業務の複雑さをシンプルに表現!
- 特集2
 いまはじめるFlutter
 iOS/Android両対応アプリを開発してみよう 
- 特集3
 作って学ぶWeb3
 ブロックチェーン、スマートコントラクト、 NFT 



