機械学習システムでのトレーニングとテストのために、CSV データセットを小さなデータセットに分割する宝石を探しています。ランダムサンプリングに基づいてこれを行うRのパッケージがあります。しかし私の調査では、Ruby については何も判明していません。これを Ruby で実行したかった理由は、元のデータセットが非常に大きい (たとえば 1700 万行または 5.5 ギガ) ためです。 Rは、データセット全体をメモリにロードすることを想定しています。Ruby ははるかに柔軟です。任意の提案をいただければ幸いです。
質問する
601 次
4 に答える
1
これにより、元のデータがすべてメモリに読み込まれることなく、2 つのファイルに分割されます。
require 'csv'
sample_perc = 0.75
CSV.open('sample.csv','w') do |sample_out|
CSV.open('test.csv','w') do |test_out|
CSV.foreach('alldata.csv') do |row|
(Random.rand < sample_perc ? sample_out : test_out) << row
end
end
end
于 2013-03-30T21:39:15.357 に答える
0
smarter_csv Ruby gem を使用して、chunk_size を目的のサンプル サイズに設定し、チャンクを Resque jobs として保存して、並列処理することができます。
https://github.com/tilo/smarter_csv
その GitHub ページの例を参照してください。
于 2013-04-13T18:46:54.560 に答える
0
CSV は Ruby に組み込まれているため、これを行うために gem は必要ありません。
require 'csv'
csvs = (1..10).map{|i| CSV.open("data#{i}.csv", "w")}
CSV.foreach("data.csv") do |row|
csvs.sample << row
end
CSV.foreach は、ファイル全体をメモリにロードしません。
于 2013-03-30T11:39:58.450 に答える