이전 글에서는 Excel, NC 파일을 다루었고, 이번 글에서는 TXT, CSV를 다루고자 한다.
TXT, Dat, CSV를 읽어들이는 방법은 서로 매우 유사하다.
fnm = ‘filename.txt’;
fid = fopen(fnm,'r');
data = textscan(fid, '%d %f %s', 'HeaderLines', 1);
time = data{1}; % 중괄호 사용하기!
과제 1
DOWNLOAD
바다누리 : http://www.khoa.go.kr/oceangrid/gis/category/reference/distribution.do
(바다누리 사이트에는 회원가입 후 로그인을 해야 데이터를 다운받을 수 있다.)
조위, 수온, 염분을 시계열로 나타내세요.
Hint
1. textscan 함수 – HeaderLine
위 코드에서 ‘1’이라는 값을 가지는 HeaderLine 옵션은 txt의 내용 중에서, 특정 줄 수만큼 데이터로 읽어 들이지 않겠다는 뜻이다.
즉, 위 코드에서는 Raw data 초반의 1줄을 읽지 않고, 그 다음 줄부터 데이터로 읽어 들이겠다는 뜻이다.
이해를 돕기 위해 아래의 Raw data를 보자.
여기서 우리가 읽어 들이고자 하는 데이터가 본격적으로 시작되는 줄은 10번째 줄이다.
그 이전에 9개의 줄은 MATLAB에서 읽어 들일 필요가 없다.
이때 Hearderline 옵션을 9로 설정하면 맨 처음 9개의 줄은 읽어 들이지 않는다.
그리고 %s, %f, %d 등의 데이터형 중에서 무엇을 써야 할 지는, Raw data를 직접 보고 각 열의 데이터가 어떤 데이터형인지 직접 일일이 확인하고 결정해야 한다.
예를 들어, Raw data가 이렇게 되어 있을 때, ‘동해’는 문자열 string이므로 첫번째 열의 자리에는 %s를 사용한다.
‘105’는 정수이므로 %d 혹은 %f 를 사용한다.
‘105-00’은 정수나 실수로 읽어 들일 수 없으므로 %s 를 사용한다.
날짜를 표현한 ‘2020-02-13’ 또한 같은 이유에서 %s 를 사용한다.
그 이후에 사용하지 않는 정보들은 %* [^\n] 으로 생략한다.
2. Datetime 처리
Raw data를 읽어 들이면 시간 데이터가 연/월/일 값과 시/분/초 값이 서로 다른 cell에 저장되어 있다.
이 두 값을 어떻게 결합해서 하나의 datetime 형 배열로 만들 수 있을까?
이는 strcat, string, datetime 함수를 사용하면 간단하게 할 수 있다!
(직접 쉽게 찾아볼 수 있는 부분이니 이건 직접 찾아보면서 구글링 실력을 길러보자.)
과제 2
DOWNLOAD
바다누리 : http://www.khoa.go.kr/oceangrid/koofs/kor/observation/obs_real.do
(바다누리 사이트에는 회원가입 후 로그인을 해야 데이터를 다운받을 수 있다.)
해당 관측소에서 제공하는 데이터 중, 원하는 데이터 선택해서 CSV 로 다운로드 받기!
예시 결과물 그림은 다음과 같다.
Hint
1. textscan 함수 – Delimiter
아래의 코드에서 Delimiter라는 옵션은 무엇일까?
예를 들어 Raw data가 다음과 같이 주어진다고 하자.
각 열들은 쉼표(,) 로 구분되어 있다.
즉 Delimiter는 데이터를 읽어 들일 때, 어떤 기호를 기점으로 행을 구분하여 읽어야 하는지를 정해주는 것이다.
참고로 Delimiter 옵션을 따로 설정해두지 않으면, Default값은 ‘띄워 쓰기’이다.
'초급-MATLAB 해양자료처리' 카테고리의 다른 글
MATLAB - Scatter vs Pcolor (0) | 2023.09.16 |
---|---|
MATLAB - NC 파일 읽기 - 해양 산성화 (0) | 2023.09.16 |
MATLAB - Excel 파일 읽기 : 해양 산성화 (0) | 2023.09.16 |
MATLAB - Plotting (0) | 2023.09.16 |
MATLAB - 제어문 (1) | 2023.09.16 |