数値とテキストの混在したcsvファイルの扱い

数値データ(各種データ)とテキストデータ(銘柄名)の混在した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
HIronori Kamachi on 13 Dec 2020
上林様
コメントいただきありがとうございます。
低水準命令ですか…実際の入力データを確認して簡単にできるかどうか確認したいと思います。
どうもありがとうございました。
Kenta
Kenta on 14 Dec 2020
HIronori Kamachi
HIronori Kamachi on 14 Dec 2020
Kenta様
コメントいただき、ありがとうございます。
読み込みに関してはreadtableでいけるかもしれません。ここに質問した後に自分でもいろいろ試してみましたら、銘柄列をtable2array()でcell配列に、数値データ列をtable2cell()でcell配列にして結合すると、queryall配列がcell配列で生成できるというのはわかりました。
ただ、最初の質問には書いておりませんでしたが、結合したqueryall配列を最終的には.csvファイルに書きこみたいので、結局writecellにするとすごく時間がかかるような感じですので、別のやり方はないかと考えている次第です。
実際は、書きこんだqueryall.csvファイルを1行ずつ読み込んで1行ずつquery.csvとして吐き出すプログラムAがあり、その吐き出されたquery.csvを別のプログラムBが読み込んで計算を実施するような動作をさせております。
本来は1分毎に測定データ等を管理するサーバから吐き出されたquery.csvをプログラムBが読み込んで計算を実施するところを、プログラムAにより過去データ等を使用して連続してquery.csvを吐き出させるようにして、プログラムBのパラメータのケーススタディの速度を速くする目的でやっております。
その際のLogファイルの吐き出し等にも応用出来ればと思い、現在、比較的時間のかかるwritecell以外の方法はないかと考えている次第です。

Sign in to comment.

Answers (0)

Categories

Products

Release

R2019b

Asked:

on 4 Dec 2020

Commented:

on 14 Dec 2020

Community Treasure Hunt

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

Start Hunting!