2

次のサンプルデータがあります

Date,Open,High,Low,Close,Volume,Adj Close
10/24/2011,181.51,183.39,180.62,182.25,5890600,182.25
10/21/2011,179.11,181.67,178.75,181.63,8054200,181.63
10/20/2011,178.13,179.24,176.17,177.25,7513800,177.25

CSV ファイルから MATLAB にデータを読み込んでいます。

data = csvread('filename.csv','A1:G12542');

次のエラーが表示されます。この問題を回避する方法はありますか?

   ??? Error using ==> dlmread at 145
Header lines must be integer-valued.

Error in ==> csvread at 50
    m=dlmread(filename, ',', r, c);

Error in ==> Q11 at 1
data1 = csvread('ibm.csv','A1:G12542');
4

2 に答える 2

1

3 つの問題:

1) 提供されるサンプル データは csv ではありません。csv はコンマ区切り変数の略です。サンプル データがタブまたは空白で区切られているようです。更新:データが csv になるようにサンプルを編集したようです。それに応じてソリューションを編集しました。

2) 行と列の入力引数を使用する場合csvreadは、「Excel」タイプの文字列ではなく、ゼロベースの整数値の行と列の引数として入力する必要があります。

3) 提供されたサンプルから、最初の列の日付を取得したいようです。これらの関数を使用したい場合、csvreadまたはdlmreadこれらの関数の両方が数値データのみを処理できるため、これは問題です (10/24/2011 は文字列であることに注意してください)。

ですから、あなたが私たちに見せてくれたものはあなたのファイルを代表していると思います. これを考えると、それを matlab にインポートする方法は次のとおりです。

fid1 = fopen('YourFilePathHere', 'r');
D = textscan(fid1, '%s%f%f%f%f%f%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1)
D = [datenum(D{1}, 'mm/dd/yyyy'), D{2}, D{3}, D{4}, D{5}, D{6}, D{7}];

最初の行で、読み取り用にファイルを開きます。2 行目で、データをスキャンします。フォーマット文字列に注意してください'%s%f%f%f%f%f%f'。これは、最初の列が string format%sで、次の 6 列が浮動小数点であることを示しています (これを他の数値型に変更することもできますが、現時点では浮動小数点が最も単純です)。3 行目でファイルを閉じます。最後の行では、日付文字列を matlab 数値日付形式に変換し、これを残りのデータと組み合わせて 1 つの数値行列にします。これで分析の準備が整います。

于 2012-10-29T04:54:00.167 に答える
0

13b では、MATLAB テーブルを利用してこのデータにアクセスできます。

data = readtable('filename.csv');
data = 

    Date         Open      High      Low      Close       Volume      AdjClose
____________    ______    ______    ______    ______    __________    ________

'10/24/2011'    181.51    183.39    180.62    182.25    5.8906e+06    182.25  
'10/21/2011'    179.11    181.67    178.75    181.63    8.0542e+06    181.63  
'10/20/2011'    178.13    179.24    176.17    177.25    7.5138e+06    177.25 

変数名が有効な MATLAB 識別子に変更されたという事実について、私が省略した警告があったことに注意してください。これは、「Adj Close」の間のスペースが原因でした。

于 2013-10-28T18:05:01.803 に答える