2

データのインポート部分で、MATLAB を使用して経済モデルを実行しようとして立ち往生しています。私のコードのほとんどで、IRIS というフリーウェア ツールボックスを使用しています。

14 個の変数と 160 個のデータポイントを含む四半期ごとのデータセットがあります。基本的に、データセットは、日付 (col1) と変数名 (B1:O1) を含む 15X161 マトリックスです。

IRIS にデータをアップロードするためのコマンドは次のとおりです。

d = dbload('filename.csv')

しかし、これは機能していません。MATLAB は d という 1X1 配列を作成し、その下にフィールドを作成しています (変数ごとに 1 つ)。数値ではなく、すべてのセルが表示されますNaN

なぜこうなった?

IRIS ツールボックスの Web サイトのチュートリアルを確認し、そこからこのコマンドを使用してサンプル データセットを実行およびロードしようとしましたが、同じ問題が発生します。MATLAB ヘルプを含め、私がチェックしたすべての場所で、これは IRIS を使用するときに使用する正しいコマンドのようですが、どういうわけか機能していません。

また、IRIS ではなく MATLAB 関数を使用してデータを直接アップロードしようとしました。私が使用しているコマンドは次のとおりです。

 d = dataset('XLSFile','filename.xls','ReadVarNames', true).

これは機能しており、すべての変数名を確認できますが、MATLAB は日付を読み取ることができません。xlsread と importdata も試しましたが、変数名を読み取れません。変数名と日付を含む Excel シート全体をアップロードする方法はありますか?

コードの残りの部分は IRIS コマンドと互換性があるため、IRIS コマンドを機能させることができれば最高です。

データセットはこのように見えます..

HO_GDP     HO_CPI  HO_CPI  HO_RS  HO_ER  HO_POIL....
 4/1/1970  82.33    85.01  55.00  99.87  08.77
 7/1/1970  54.22     8.98  25.22  95.11  91.77
10/1/1970  85.41    85.00  85.22  95.34  55.00
 1/1/1971  85.99   899      8.89  85.1
4

1 に答える 1

0

TEXTSCAN関数を使用して、MATLAB で CSV ファイルを読み取ることができます。

%# some options
numCols = 15;       %# number of columns
opts = {'Delimiter',',', 'MultipleDelimsAsOne',true, 'CollectOutput',true};

%# open file for reading
fid = fopen('filename.csv','rt');

%# read header line
headers = textscan(fid, repmat('%s',1,numCols), 1, opts{:});

%# read rest of data rows
%# 1st column as string, the other 14 as floating point
data = textscan(fid, ['%s' repmat('%f',1,numCols-1)], opts{:});

%# close file
fclose(fid);

%# collect data
headers = headers{1};
data = [datenum(data{1},'mm/dd/yyyy') data{2}];

投稿した上記のサンプルの結果 (値がカンマ区切りであると仮定):

>> headers
headers = 
    'HO_GDP'    'HO_CPI'    'HO_CPI'    'HO_RS'    'HO_ER'    'HO_POIL'
>> data
data =
   7.1962e+05        82.33        85.01           55        99.87         8.77
   7.1971e+05        54.22         8.98        25.22        95.11        91.77
    7.198e+05        85.41           85        85.22        95.34           55
   7.1989e+05        85.99          899         8.89         85.1            0

コードの最後の行で、データ全体を 1 つの数値行列に格納できるように、日付列をシリアル日付番号に変換する方法に注意してください。DATESTR 関数を使用して、いつでも日付の文字列表現に戻ることができます。

>> datestr(data(:,1))
ans =
01-Apr-1970
01-Jul-1970
01-Oct-1970
01-Jan-1971
于 2012-07-25T23:52:30.107 に答える