数値とテキストの混在したcsvファイルの扱い
Show older comments
数値データ(各種データ)とテキストデータ(銘柄名)の混在したquerydata.csvファイルがあります。
実際のデータは、行数、列数も大きい(60万行*250列程度)ので、readcellでは読込時間がかかり、readmatrixではテキストデータが読みこめません。
なるべく速い読み込みで、データを落とさずに同じ形の配列(queryall)を作成するにはどうすればよいのでしょうか。
ご教示いただけますよう、よろしくお願いいたします。
なお、銘柄名にはテキストとして認識されるアルファベットと数字からなるものと、数字だけのものが混在しています。
例) querydata.csv 1-3列目:各種データ、4列目:銘柄名
4 Comments
源樹 上林
on 12 Dec 2020
readcell 、 readmatrix なるほど。今はこんな便利な命令あるんですか。でも2015では動かないのか残念。csv ならあとは、 textread …じゃなくて textscan もありますね。ボトルネックはテキストファイルへのアクセスだと思います。
fscanf や fgetl と split など、低水準の命令の方が早い可能性があります。高水準な命令は便利な半面、今回のケースにとっては余計な処理も含まれているはずなので遅くなっているはずです。一般的には低水準に近いほうが無駄がなく早いはずです。(最近の流行ではそうはならないのですが、MATLABはどうなんだろう?)
低水準 I/O によるテキスト データ ファイルのインポート
https://jp.mathworks.com/help/matlab/import_export/import-text-data-files-with-low-level-io.html
さて結論ですが、すみません。やってみないとわかりません。やったことありません。低水準の命令のほうが早いと思うのですが、もしかすると高水準な方は、内部で高速処理ような最適化とかしてるかもしれませんし。ということなので、ベンチマークテストをやってみることをおすすめします。
readcell や textscan 、 fscanf で読み込むだけのスクリプトをそれぞれ書いて、同じデータを読み込む時間をテストしてください。時間計測は、 tic, toc で十分だと思います。それで一番早いやつで諦めるしかないのかな。
データを出力する側が mat 形式などの matlab で簡単に読めるバイナリ形式で出力してくれれば一番楽なんですけどね。出力元の方のマニュアルや最新情報を確認するのも良いかもしれません。(Database Toolbox ?)
HIronori Kamachi
on 13 Dec 2020
Kenta
on 14 Dec 2020
HIronori Kamachi
on 14 Dec 2020
Answers (0)
Categories
Find more on データ型の変換 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!