裏 RjpWiki

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

整数のリストを文字型にして連結して整数に

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

digits = [1, 2, 3, 4, 5, 6]  # を 123456 という整数に変換したいとのことで,

int(''.join([str(n) for n in digits]))

が書かれていた。

以下のようにも書ける。

int(''.join(map(str, digits)))

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python 嫌いだけど,こんな Python プログラムはいやだ(その1)

2020年12月10日 | Python

a がリストなんだが(そもそもリストである必然性はないが),その合計を求めるのに

a = [5, 5, 5, 2, 4, 1, 2, 4, 4, 3, 4, 2, 1, 1]

t = 0
for j in range(len(a)):
    t += a[j]

print(t)

t は 43 になるが,こんなものに 3 行もかける意義はない

t = sum(a) で十分

作者は従来のプログラミング言語の作法に毒されている模様。

なお,a.sum() はエラーになるのが Python の,なところ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データ処理のお供に AWK -- その2

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

100000x1500 のデータフレームの,2列目の数値データによりソートしたデータファイルを作る。

R だと,以下のスクリプトで 220 秒ほどかかる。

df = read.csv("test.csv")
write.csv(df[order(df[,2]),], file="test1.csv", row.names=FALSE)

AWK, sort を組み合わせると 20 秒ほどで終わる。

awk -F "," '{print $2, $0}' test.csv | sort -ns | awk '{print $2}' > test2.csv

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データ処理のお供に 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でシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村