Octave Atelier

코드와 해설을 함께 읽는 학습 문서

Code Detail

read_custom_csv

Visualization + Data I/O 중심의 Octave 학습 예제

ex-recv/02/02_ksg/read_custom_csv.m

목록으로

코드를 복사해 Octave에서 바로 실행할 수 있습니다.

카테고리

Submission Archive

submission

코드 길이

58

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load

함수 시그니처

function data = read_custom_csv(filename)

전체 코드

58 lines

################################################################################
% CSV 파일을 읽고, 데이터를 자동으로 적절한 형식(숫자, 날짜, 문자열)으로 변환하는 함수
% 2025-03-26 / 김상곤
################################################################################

% INPUT
%% filename : CSV 파일 이름 (문자열)

% OUTPUT
%% data : 구조체 형식으로 저장된 CSV 데이터
%%        - 숫자는 double 형식으로 변환
%%        - 날짜(YYYY-MM-DD 형식)는 datenum 형식으로 변환
%%        - 나머지는 문자열로 저장


function data = read_custom_csv(filename)

    fid = fopen(filename, 'r');
    if fid == -1
        error('파일을 열 수 없습니다: %s', filename);
    end

    % 첫 번째 줄(헤더) 읽기
    header_line = fgetl(fid);
    headers = strsplit(header_line, ',');

    % 전체 데이터를 문자열로 읽기
    raw_data = textscan(fid, repmat('%s', 1, numel(headers)), 'Delimiter', ',', 'HeaderLines', 0);
    fclose(fid);

    % 데이터 변환
    data = struct();
    for i = 1:numel(headers)
        col_data = raw_data{i};

        % 숫자로 변환 가능하면 변환
        numeric_vals = str2double(col_data);
        if all(~isnan(numeric_vals))
            data.(headers{i}) = numeric_vals;
            continue;
        end

        % 날짜 형식 변환 (YYYY-MM-DD 형식 감지)
        try
            date_vals = datenum(col_data, 'yyyy-mm-dd');
            if all(date_vals > 0)
                data.(headers{i}) = date_vals;
                continue;
            end
        catch
            % 날짜 변환 실패 시 무시하고 문자열로 저장
        end

        % 기본적으로 문자열로 저장
        data.(headers{i}) = col_data;
    end
end

코드 해설

목적

  • Visualization + Data I/O 중심의 Octave 학습 예제

입력

  • 파라미터: filename

출력

  • 반환값: data

실행 흐름

  1. CSV 파일을 읽고, 데이터를 자동으로 적절한 형식(숫자, 날짜, 문자열)으로 변환하는 함수
  2. % data : 구조체 형식으로 저장된 CSV 데이터
  3. 전체 데이터를 문자열로 읽기
  4. 데이터 변환

핵심 함수

  • all
  • numel
  • datenum
  • error
  • fclose
  • fgetl
  • fopen
  • isnan

실습 과제

  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
  • 핵심 함수 all의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
  • "CSV 파일을 읽고, 데이터를 자동으로 적절한 형식(숫자, 날짜, 문자열)으로 변환하는 함수 -> % data : 구조체 형식으로 저장된 CSV 데이터" 흐름을 함수 단위로 분리해 리팩터링해보세요.

같은 카테고리 코드

이전 코드 partitioning_data 다음 코드 statistic_value