2012-07-25 3 views
2

데이터 가져 오기 부분에서 MATLAB을 사용하여 경제 모델을 실행하려고했습니다. 대부분의 코드에서 IRIS라는 프리웨어 도구 상자를 사용하고 있습니다.timeseries 데이터 세트를 MATLAB으로 가져 오기 (모든 값은 NaN으로 표시됨)

저는 14 개의 변수와 160 개의 데이터 포인트를 가진 분기 별 데이터 세트를 가지고 있습니다. 본질적으로 데이터 집합은 날짜 (col1)와 변수 이름 (B1 : O1)을 포함하여 15X161 행렬입니다.

IRIS에 데이터를 업로드에 사용되는 명령은

d = dbload('filename.csv') 

하지만이 작동하지 않습니다. MATLAB은 d라는 1X1 배열을 만들고 그 아래에 필드를 만듭니다 (각 변수마다 하나씩). 모든 셀에 숫자가 아닌 NaN이 표시됩니다.

왜 이런 일이 발생합니까?

IRIS 도구 상자 웹 사이트에서 자습서를 확인하고이 명령을 사용하여 실행하고 샘플 데이터 집합을로드하려고 시도했지만 동일한 문제가 발생합니다. 어디에서나 MATLAB 도움말을 포함하여 점검했습니다. IRIS를 사용할 때 올바른 명령 인 것 같습니다. 어떻게 든 작동하지 않습니다.

또한 IRIS가 아닌 MATLAB 함수를 사용하여 직접 데이터를 업로드하려고 시도했습니다. 내가 사용하고있는 명령은 다음과 같습니다.

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

이 작업이 가능하지만 모든 변수 이름을 볼 수 있지만 MATLAB은 날짜를 읽을 수 없습니다. xlsread 및 importdata도 시도했지만 변수 이름은 읽지 않습니다. 변수 이름과 날짜가있는 전체 Excel 시트를 업로드 할 수있는 방법이 있습니까?

내 코드의 나머지 부분이 호환 될 수 있기 때문에 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 
+0

실제 CSV 데이터의 일부 (헤더와 1 또는 2 행)를 게시 할 수 있습니다. 기본적으로 파일 구분 기호 (쉼표로 의심되는 항목), 각 열의 유형은 무엇인지 확인하려고합니다. 위의 그림에서 첫 번째 열은 날짜이며 나머지는 숫자 데이터입니다. 모든 열의 경우입니까? 나는 [IRIS] (http://code.google.com/p/iris-toolbox-project/)에 대한 경험이 없다고 말해야한다. 전에 사용하지 못했습니다 – Amro

+0

위의 데이터는 실제 CSV 자체에서 가져온 것입니다. 그리고 당신은 정확합니다, 첫 번째 열은 날짜, 나머지 14는 숫자 값입니다. 첫 번째 행은 HO_GDP, HO_CPI 등의 값으로 구성된 헤더입니다. 그 후에는 위에 표시된 실제 데이터입니다. 데이터는 소수점 이하 5 자리까지 올라갑니다. – S1234

답변

0

당신은 MATLAB에서 CSV 파일을 읽을 수있는 TEXTSCAN 기능을 사용할 수 있습니다 :

%# 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 

참고로 c 우리는 하나의 숫자 행렬에 전체 데이터를 저장할 수 있도록 날짜 열을 serial date number으로 변환합니다. DATESTR 함수를 사용하여 항상 날짜의 문자열 표현으로 돌아갈 수 있습니다.

>> datestr(data(:,1)) 
ans = 
01-Apr-1970 
01-Jul-1970 
01-Oct-1970 
01-Jan-1971 
+0

코드를 실행하려고 시도했지만 오류가 발생했습니다. datenum을 사용한 오류 (줄 179) DATENUM에 실패했습니다. 원인 : dtstr2dtnummx를 사용하는 중 오류가 발생했습니다. 날짜 문자열을 날짜 ...로 변환하지 못했습니다. d = dataset ('XLSFile', 'filename.xls', 'ReadVarNames', true) 그러나 데이터 coloumn은 Excel 텍스트 형식으로 제공됩니다. 이 열을 날짜 형식으로 다시 변환하려면 어떻게해야합니까? 도와 줘서 고마워! – S1234

+0

@ S1234 : 위의 코드는 게시 한 데이터 샘플에서 올바르게 작동합니다. 이제 실제 파일을 보면서 문제가 무엇인지 추측하기가 매우 어렵습니다 ... 민감한 데이터가 포함되어 있지 않으면 파일을 온라인에 업로드하여 볼 수 있도록하십시오 (Dropbox 또는 다른 어떤 것으로 생각하십시오). 유사한 사이트) – Amro