AwkでEffective前処理理
Shinya  Akiba
2014/05/27
⾃自⼰己紹介
○研究テーマ  
   スペースデブリの軌道設計  
   Deeplearningを⽤用いた画像認識識  <-‐‑‒  いまここ  
○バイト  
   ALBERT  -‐‑‒  集計、分析のお仕事  
○趣味とか  
   ラグビー、Python、お酒、⿇麻雀
@aki_̲n1wa
秋庭  伸也  
   早稲⽥田⼤大学  -‐‑‒  機械科学専攻  M2
今⽇日話すこと
GLM
階層ベイズ
MCMC
etc..
データ解析
レポート
可視化
論文
今⽇日話すこと
GLM
階層ベイズ
MCMC
etc..
データ解析
レポート
可視化
論文
前
処
理
今⽇日話すこと
データ解析を始める前に… 前処理理!
「面倒な前処理もサクッと解決
 そう、Awkならね。」
(※Awkを使った前処理理の話をします。)
OUTLINE
□Effective前処理理とは  
□Awkって何?  
□Awkプログラミング  
□おまけ
サンプルコード:  
https://github.com/akiniwa/awk_̲preprocess
Effective前処理理とは
1. お⼿手軽  
!
!
2. ファイル⼀一括処理理  
!
!
3. 再現性、⼀一般性
→少ない行数、身近なアプリ
→フォルダ内のファイルを一括で処理したい…
→同じコード書かない、変更に強い(やっぱこのカラム追加して∼)
Effective前処理理とは
1. お⼿手軽  
!
!
2. ファイル⼀一括処理理  
!
!
3. 再現性、⼀一般性
→少ない行数、身近なアプリ
→フォルダ内のファイルを一括で処理したい…
→同じコード書かない、変更に強い(やっぱこのカラム追加して∼)
Awkでできるよ!
Awkって何?
○開発者:  Aho,  Weinberger,  and  Kernighan  
!
○ファイル処理理⾔言語(コマンド)  
!
○Cっぽい構⽂文  
!
○Awkの良良いところ  
   学習曲線ゆるやか  
   ワンライナー  ~∼  数ライナー  
!
○Awkが苦⼿手なこと  
   ちょっと複雑なデータ(リレーショナルとか)  
   *.xlsx
Awkプログラミング
○Awkのイントロ  
○Awkでパターンアクション  
○逆引きAwk  
!
タイタニックのデータを使います。
○全⾏行行表⽰示
awk {print $0} titanic.txt
awkスクリプト 入力ファイル
awk {スクリプト} ファイル名
Awkのイントロ
○基本の形
1⾏行行⽬目  
2⾏行行⽬目  
3⾏行行⽬目  
4⾏行行⽬目  
…
awkスクリプトを⼊入⼒力力ファイルの1⾏行行⽬目から最終⾏行行まで  
1⾏行行ずつ実⾏行行していく。
print $0 →
print $0 →
print $0 →
print $0 →
print $0 →
Awkのイントロ
○名前、年年齢表⽰示
awk {print $4, $6} titanic.txt
4列目、6列目を標準出力へ
$i でi列目を表示。
Awkのパターンアクション
○Williamが含まれる⾏行行を表⽰示
awk /William/{print $0} titanic.txt
awk /William/{print $0} titanic.txt
○パターンアクション
パターン パターンが含まれているときに
スクリプトを実行
Awkのパターンアクション
○⾏行行頭が10,  11,  12,  14で始まる⾏行行を表⽰示
awk '/^1[0-3]/{print $0}' titanic.txt
awk $6>=40{print $0} titanic.txt
○40歳以上を表⽰示
逆引きAwk
○最⼩小値を求める
awk 'NR==2{min=$10}{if($10<min) {min=$10};} END {print min}' titanic.txt
awk '{age+=$6};END{print age/(NR-1)}' titanic.txt
○平均年年齢
終了時に呼ばれる
○乗船場所の重複削除
awk '!colname[$12]++{print $12}'
○乗客IDと年年齢を表⽰示
awk '{print $1, $6}' titanic.txt
種⼦子数データの処理理
# 列方向の合計
for (i=0;i<=NF;i++){
colsum+=$i
}
# 列方向の平均
ave=colsum/NF;
data.RDataを.txtにしたものを使用します。
○列列⽅方向の集計
$ awk -f var.awk rdata.txt	
2.98776 	
$ awk -f sd.awk rdata.txt 	
1.72851
$1, $2, …
全ての列に対して集計できる。
○分散と標準偏差
種⼦子数データの処理理
○ファイル内⼀一括処理理
for t in rdata*.txt	
do 	
	 awk -f sd.awk $t 	
done
all_̲rdata.sh
$ . all_rdata.sh 	
1.72851 	
1.93412 	
1.63108
rdata*.txtに対して実⾏行行
おまけ
○.txtのビジュアライゼーション awk -f graph.awk hist.txt
[shinya@ShineAir:~/Programs/awk_preprocess]$ awk -f graph.awk hist.txt 	
|------------------------------------------------------------------------|	
| |	
| |	
| |	
12 - * |	
| |	
| * |	
| * |	
| |	
| |	
8 - |	
| |	
| |	
| |	
| * |	
4 - * * |	
| |	
| * |	
| |	
| |	
| * |	
|-----------|-----------|------------|-----------|-----------|-----------|	
0 2 4 6 8 	
Poisson hist
参考書籍、URL
!
AWKプログラミング
http://www.geocities.jp/aukjp/awk.html
!
AWKを256倍使うための本
http://ascii.asciimw.jp/books/books/detail/4-7561-0162-3.shtml
ご清聴ありがとうございました。

Awkでeffective前処理