Rのファイル読み込み速度比較 csvとrds
Rを使っているときにファイルの読み込み速度はボトルネックになることが多い。 同じスクリプトを何度も繰り返し実行するとき、ファイルの読み込みに膨大な時間がかかると、とてもストレスフルです。
できればデータなんてさっさと読み込んでデータと戯れたい…
そんなあなたにおすすめできるのがrdsというファイル形式でデータを扱うことです。
rdsはRのオブジェクトを保存しておくためのファイル形式。 Rに最適化されているためか、読み込みが早いらしい。
今回はこのrdsとcsvの読み込み速度にどれだけ差があるのか実験します。
実験方法
csvファイルを一度Rで読み込みrdsとして保存したファイル*1 と生のcsvの読み込み速度を比較します。
rdsはreadRDS、csvはfread関数を使って読み込む。
それぞれのファイルサイズは以下のとおり。
ファイル形式 | ファイルサイズ |
---|---|
csv | 839MB |
rds | 155MB |
なんかもうすでに結果が見えてる感じがしてますが、このまま続けます。
読み込みだけなのでスクリプトは非常に単純。
# csvファイル読み込み速度確認用 start = proc.time() system.time(r_data<-fread("csv_file.csv")) end = proc.time() print(end - start)
# rdsファイル読み込み速度確認用 start = proc.time() system.time(r_data<-readRDS("rds_file.rds")) end = proc.time() print(end - start)
実験結果
上記のスクリプトを実行した結果を次の表に示します。
ファイル形式 | user | system | elapsed |
---|---|---|---|
csv | 21.128 | 0.448 | 21.579 |
rds | 5.060 | 0.369 | 5.431 |
表のuser,elapsedを見るとだいたい4倍速くなっていることが分かります。
今までなんとなくで使っていましたが、rds形式を使うのは有効みたいです。 みなさんもぜひお試しあれ。
VCSのtimescaleに関するエラーを消したいとき
Synopsys社のVCSで回路の動作検証をしようとしていたときに以下のエラーがでてきて困った.
Error-[ITSFM] Illegal `timescale for module tb_dcstped_b01.v, 2 Module "tb_b01" has `timescale but previous module(s) do not. Please refer LRM 1364-2001 section 19.8.
このエラー,どうやら回路記述の読み込みの順番が問題らしい.
エラーがでているときは,テストベンチ記述(tb_dcstped_b02.v)を後ろから二番目に読み込むようにしていた.
vcs -full64 -v ~/Scripts/Libraries/nangate.v tb_dcstped_b02.v dcstped_b02.v -R
これを以下のように一番最初に読み込むようにしてあげると,上手いことシミュレーションできた.
vcs -full64 tb_dcstped_b02.v -v ~/Scripts/Libraries/nangate.v dcstped_b02.v -R
追記1
.vファイルにtimescaleの指定がない場合にも同様のエラーが出た. その時は.vファイルに`timescale 1ns/1ns などとするとエラーが回避できた.
追記2
サブモジュールをインクルードしてる場合,timescaleを先に書かなければ同様のエラーが出る. 以下が間違った例.
`include "aaa.v" `timescale 1ns/1ns
以下のようにするとエラー回避できる.
`timescale 1ns/1ns `include "aaa.v"
lsコマンドの出力に色を付ける
lsコマンドの出力結果に色を付ける方法について調べてみました. manコマンドでlsの説明を見ると,どうやらls -Gとすれば色が付くみたいです.
ls -G
と実行した結果がこちら.
ただ,そのままだと見づらい....
自分の好きな色にしたいときは環境変数LSCOLORSを変更すれば良いようです.
デフォルトは以下のような設定になってます.
LSCOLORS=exfxcxdxbxegedabagacad
順番とアルファベットによってそれぞれの場所に色を設定します.
順番と場所の対応はそれぞれ以下のようになっていて,文字の色,文字の背景の順番に指定します.
順番
順番 | 場所 |
---|---|
1,2 | ディレクトリ |
3,4 | シンボリックリンク |
5,6 | ソケット |
7,8 | パイプ |
9,10 | 実行形式 |
11,12 | ブロックスペシャル |
13,14 | キャラクタスペシャル |
15,16 | setuid ビットが設定された実行形式 |
17,18 | setgid ビットが設定された実行形式 |
19,20 | 他者 が書き込み可能なディレクトリ,スティッキービットが設定あり |
21,22 | 他者 が書き込み可能なディレクトリ,スティッキービットが設定なし |
色は次のような対応になってます.
色
それぞれ,大文字にすると太字になります.
- a:ブラック
- b:レッド
- c:グリーン
- d:ブラウン
- e:ブルー
- f:マゼンタ
- g:シアン
- h:ライトグレイ
- x : デフォルト
例えば,ディレクトリの文字をシアンの太字,
実行可能ファイルをマゼンタの太字にしたければ次のように設定すれば行けます.
export LSCOLORS=GxfxcxdxFxegedabagacad
結果が次のようになります.
自分好みに改変していくのは楽しそうですね.
起動時から設定する方法
自分のホームディレクトリの.bashrcに以下の二行を追加するだけでOKです.
alias ls='ls -G'
export LSCOLORS=GxfxcxdxFxegedabagacad
すると,起動時にも設定が反映されることになります.