裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

データ処理のお供に AWK

2020年12月10日 | ブログラミング

CSV ファイルのデータで,ある変数の条件によりデータを選択して別ファイルに書き出す。

100000x1500 のデータで,1列目の変数が 80 より大きいもののみ別ファイルに書き出す。

system.time({
    df = read.csv("test.csv")
    write.csv(df[df[,1] > 80,], "select2.csv", row.names=FALSE)
})

これだと,75.519 秒かかる。

system.time({
    library(data.table)
    df = as.data.frame(fread("test.csv"))
    write.csv(df[df[,1] > 80,], "select2.csv", row.names=FALSE)
})

これだと,5.531 秒かかる。

AWK を使うと,ものすごく速い。

$  cat select.awk
BEGIN {
    FS = ","
    getline
    print $0
}
$1 > 80 {
    print $0
}

$ time awk -f select.awk < test.csv > select1.csv
0.541u 0.165s 0:00.71 98.5% 0+0k 0+0io 84pf+0w

0.541 秒である

なお,注意すべきは,プログラムはターミナルで動かすこと。

R の中で system("awk -f select.awk < test.csv > select1.csv") なんてやると,53 秒かかる。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 複数の変数をインクリメントする | トップ | データ処理のお供に AWK -- ... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

ブログラミング」カテゴリの最新記事