ファイルサイズが大き​いCSVファイルの読​み込みについて

ファイルサイズが、行2000000 列10のファイルを読み込みたいです。 データインポートでは時間がかかってしまいます。 また、datastoreだと行数が多きいためエラーになってしまいます。
このファイルを読み込む方法を教えてください。

 Accepted Answer

Kazuya
Kazuya on 19 Oct 2018
Edited: Kazuya on 19 Oct 2018

1 vote

datastore が最適な気がしますが、どんな読み込みをされたときにどんなエラーがでましたか?
200万x10の行列だと、double 型で大体 150MBのサイズになりますが・・これをすべてメモリ上に読み込む必要がありますか?
tall 配列の機能を使うと、一度に全部読み込まずにいろいろ計算できるので、PCのメモリ容量に不安がある場合にお勧めです。その分計算時間は余計にかかるのは難点ですが。 参照: tall 配列

4 Comments

neshin
neshin on 19 Oct 2018
200万x10の行列だと、double 型で大体 150MBのサイズになりますが・・これをすべてメモリ上に読み込む必要がありますか? >>できれば読み込みたいです。
データの形ですが、 time a b ・・・i j 1 1 2 9 10 2 11 12 19 20 : 2000000 100 200 800 900
コード
ds = datastore(filename);
ds.ReadSize = 2000000;
data = read(ds);
Reardを2000000にしていますが、 456132x10 table しか読み込めません。 また、 data1 = readall(ds); とすると、 エラーになります。
エラー: matlab.io.datastore.TabularTextDatastore/readAllData (line 44) ファイル 'D:\Program Files\MATLAB\100統合検討PG\test1.CSV' 内のデータは、各行と各列のフィールド数が揃った表形式ではありません。"テキスト形式のプロパティ" と "テキスト形 式の詳細プロパティ" を確認してください。
エラー: matlab.io.datastore.TabularDatastore/readall (line 134)
t = readAllData(ds);
読み込む方法を教えてください。
Kazuya
Kazuya on 19 Oct 2018
エラーの内容ありがとうございます。エラーの原因はデータの大きさではないようですね。私も以前出くわしたことがありますが、
各行と各列のフィールド数が揃った表形式ではありません。
とあるように、456132行目かその次あたりでフォーマットが崩れている可能性がありそうでが、、いかがですか?例えば
ds = datastore(filename);
ds.ReadSize = 456132;
data = read(ds);
と読み込めるところまで読み取ったデータ(の最後付近の値)をもとに、csvファイル内で検索かけて怪しいところがないか確認してみてはいかがでしょう。
neshin
neshin on 20 Oct 2018
返信ありがとうございます。 色々調べたのですが、ファーマットが壊れている箇所はありませんでした。 datastoreでは、読み込めるサイズが決まってるのでしょうか?
とりあえず、このコードで読み込めました。
data = readtable(filename, 'delimiter', ',');
data;
何度も、ありがとうございました。
Kazuya
Kazuya on 20 Oct 2018
datastoreで読み込めるサイズが決まっているということはなさそうですが・・。もやもやしますね。。
私の場合は、数値であるべき列に途中で文字列が混ざっていたのが原因で途中で読み込みが止まっていた、、と記憶しています。その場合、readtable で読むと数値で読み込むはずの列が、セル配列になってたりするのでわかりやすいのですけども。

Sign in to comment.

More Answers (1)

neshin
neshin on 21 Oct 2018

0 votes

解明方法を探して頂いてありがとうございました。 また、知恵をかしていただければと思います。

Asked:

on 19 Oct 2018

Answered:

on 21 Oct 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!