Octaveを用いたデータの読み込みと書き込み

octaveは、csvファイルを読み込みがとても簡単にできます。

ファイルを選ぶ

ファイル名が決まっていない場合や任意のファイルを選びたい場合などでは、 OctaveではGUIを用いて選んだファイルのファイル名を取得できます。

1     [fname fpath fltindex]=uigetfile();
2     [fname fpath fltindex]=uiputfile();
  • uigetfile()はファイル読み込みのダイアログが開きます。
1	[fname fpath fltindex]=uigetfile("*.ext")
とすれば、表示するファイルの拡張子extを指定できるようです。
  • uiputfile()はファイル保存のダイアログが開きます。

読み書きするためのパスまで含んだ全ファイル名は次のようにすれば設定できます。

1     FILENAME=[fpath fname]

これを以下の関数に用いるFILENAMEとすれば、扱うファイルをGUIで取捨選択できます。

読み込み関数と書き込み関数

代表的なファイルフォーマットに対応する読み込み/書き込み関数

ファイルタイプ代表的な拡張子対応する読み込み関数書き込み関数
テキストファイル.txt .csv .datcsvread,dlmread, loadcsvwrite, save
スプレッドシート.xlsxlsreadxlswrite
音声ファイル.wavaudioread
(wavread:廃止予定)
audiowrite
(wavwrite:廃止予定)
動画ファイル
(video package必要)
.avuavireadaviwrite
画像ファイル.bmp .jpg .gifimreadimwrite
Octave(Matlab)
固有ファイル
.matloadsave
万能
ASCII table,
Image File,
MATLAB file,
Spreadsheet files,
WAV file
importdata(FNAME)
  • 原始的な読み込み関数として textscan(FID,FORMAT)があります。
    しかしFORMAT(保存している書式や形式)が不明な場合は、正しく読み込めません。

  • importdata(FILENAME)は、汎用的にデータファイルを読み込めます。
    文字と数値が混在しているデータファイルも読み込めますが、 読み込んだデータの型がstructになりその後の処理が大変複雑になるので あまり使われていないようです。

  • dlmreadはデータの区切り(デリミタ)を任意の文字に指定でき るものです。 tabや空白を区切りに用いることが多いです。

1	dlmread(FILENAME,SEP,R0,C0)

SEPはセパレータで、データ区切りを示します。
R0,C0は行と列の最初の読み飛ばし数を示します。
たとえば

1	x=dlmread(FILENAME,',',2,0)

とするとデータ区切りは,(コンマ)、最初の2行を読み飛ばして読み込みます。
データファイルにヘッダがついていてもコメント行扱いできるので、便利です。

  • dlmreadのセパレータをコンマ,(comma)に指定したものがcsvreadです。
    csvとはcomma-saparated-valueの略で、データの区切りをコンマ(,)としたファイルの通称をcsvファイルといいます。
    • csvwrite(FILENAME,配列変数名);で、配列変数名の数値を、そののままのサイズで保存します。

    • 読み込みは

1	t=csvread(FILENAME);

FILENAMEの変数値が変数名tに設定されます。 保存時の変数名と一致させる必要はありません。

FILEの内容が既知であることが必要です。

  • saveとload

    • save FILENAME とすると ワークスペースをそのまま全て保存します。
      つまり変数名とその値をセットにして保存します。
      保存したファイルはascii形式ですのでエディタで内容読めます。
1	save FILENAME a,b,c

とすると、 ワークスペース内のa,b,cのみをFILENAMEに保存します。

1	save options 保存ファイル名 変数名

として、さまざまなoption指定を行って保存できます。
例えば、-binaryとすると、バイナリ形式になります。 help saveして調べてください。

  • load FILENAMEとすると保存した変数と変数値をそのまま読み込めます。
  • ファイル名の拡張子がmatのファイルの読み書き
    MATLAB固有(互換)形式なので、mat形式と呼ばれています。

  • save hage.matでmat形式で保存されます。Octaveではascii形式のようです。

  • matファイルの読み込みはloadで行います。

表計算ソフトでグラフも書けますが、セル内に式を埋め込むと、式の内容が把握しづらくなりメンテナンス性が悪化します。
データと処理式を分離することをおすすめします。 そこで、 最低限、基本のcsvファイルを読み書きできるようになりましょう。

clear all 
clc
x=0:0.01:10;
y=exp(x);
save 'd1' 
save 'd_y' y
save d2.mat 
左記のスクリプトを実行し、 保存されたファイルd1,d_y,d2.matを 適当なテキストエディタ (notepad(メモ帳など), octaveは不可(値として代入される)) で開いて見てみよう。
以下のことがわかります。
  • アスキー形式で読める。
  • 保存されている変数名と値が示されている。
    型と大きさも明示されている。
  • mat形式は効かない??
clear all
clc
x=[1,2,3;4,5,6];
csvwrite('xdata',x);
save 'xd' x 
  • xdataというファイルに数値のみが保存されている。
  • xdというファイルには変数名と数値が保存されている。
clear all
clc 
[t]=csvread('xdata');
load 'xd' 
  • csvreadは任意の変数名に数値を読み込む。
    保存したときのxdataの変数名は残っていない
  • loadは変数名と変数値が組となって読み込む。

このシリーズの投稿