이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

테이블 사용의 이점

단일 컨테이너에 혼합형 데이터를 간편하게 저장하기

table 데이터형을 사용하여 변수 이름, 행 이름, 설명, 변수 단위와 같은 혼합형 데이터 속성과 메타데이터 속성을 단일 컨테이너에 수집할 수 있습니다. 테이블은 텍스트 파일 또는 스프레드시트에서 주로 열로 저장되는 열 방향 데이터 또는 테이블 형식 데이터에 적합합니다. 예를 들어, 행에 여러 관측값을 나타내고 열에 여러 측정된 변수를 나타내는 방식으로 테이블을 사용하여 실험 데이터를 저장할 수 있습니다.

테이블은 열 방향 변수와 행으로 구성됩니다. 테이블에 포함된 변수 각각은 데이터형과 크기가 서로 다를 수 있습니다. 그러나 각 변수의 행 개수는 동일해야 합니다.

예를 들어, 샘플 환자 데이터를 불러와 보겠습니다.

load patients

그런 다음, 작업 공간 변수 SystolicDiastolic을 단일 BloodPressure 변수로 결합한 후 작업 공간 변수 Gender를 문자형 벡터로 구성된 셀형 배열에서 categorical형 배열로 변환합니다.

BloodPressure = [Systolic Diastolic];
Gender = categorical(Gender);

whos('Gender','Age','Smoker','BloodPressure')
  Name                 Size            Bytes  Class          Attributes

  Age                100x1               800  double                   
  BloodPressure      100x2              1600  double                   
  Gender             100x1               346  categorical              
  Smoker             100x1               100  logical                  

변수 Age, BloodPressure, Gender, Smoker는 다양한 데이터형을 사용하며, 행의 개수가 모두 동일하므로(100) 하나의 테이블에 저장할 수 있습니다.

이제, 변수에서 테이블을 생성하고 처음 5개 행을 표시합니다.

T = table(Gender,Age,Smoker,BloodPressure);
T(1:5,:)
ans=5×4 table
    Gender    Age    Smoker    BloodPressure
    ______    ___    ______    _____________

    Male      38     true       124     93  
    Male      43     false      109     77  
    Female    38     false      125     83  
    Female    40     false      117     75  
    Female    49     false      122     80  

이 테이블은 맨 위에 변수 이름이 위치하는 테이블 형식으로 표시됩니다.

테이블에 포함된 변수 각각은 단일 데이터형입니다. 새 행을 테이블에 추가하는 경우 MATLAB®은 새 데이터와 이에 대응되는 테이블 변수 사이의 데이터형을 일관되게 유지합니다. 예를 들어, 새 환자에 대해 첫 번째 열에 환자의 성별 대신 연령을 포함하는 정보를 추가하려고 T(end+1,:) = {37,{'Female'},true,[130 84]}와 같은 표현식을 사용하면 다음과 같은 오류가 발생합니다.

Invalid RHS for assignment to a categorical array.

오류가 발생하는 이유는 MATLAB®이 categorical형 배열 Gender에 숫자형 데이터 37을 할당할 수 없기 때문입니다.

구조체와 테이블을 비교하기 위해 테이블 T와 동일한 구조체형 배열 StructArray를 가정해 보겠습니다.

StructArray = table2struct(T)
StructArray = 100x1 struct array with fields:
    Gender
    Age
    Smoker
    BloodPressure

구조체형 배열은 명명된 필드를 사용하여 레코드를 구성합니다. 필드의 값은 각각 다른 데이터형 또는 크기를 가질 수 있습니다. 이제, StructArray의 첫 번째 요소에 대한 명명된 필드를 표시합니다.

StructArray(1)
ans = struct with fields:
           Gender: Male
              Age: 38
           Smoker: 1
    BloodPressure: [124 93]

구조체형 배열의 필드는 테이블의 변수와 비슷합니다. 그러나, 테이블과 달리 하나의 필드 내에서 동질성이 유지되도록 강제할 수 없습니다. 예를 들어, S.Gender의 값이 일부는 categorical형 배열 요소 Male 또는 Female이고, 다른 일부는 문자형 벡터 'Male' 또는 'Female'이고, 또 다른 일부는 정수 0 또는 1일 수 있습니다.

이제 각 필드가 테이블의 한 개 변수에 해당하는, 4개의 필드로 구성된 스칼라 구조체에 동일한 데이터가 저장되어 있다고 가정해 보겠습니다.

ScalarStruct = struct(...
    'Gender',{Gender},...
    'Age',Age,...
    'Smoker',Smoker,...
    'BloodPressure',BloodPressure)
ScalarStruct = struct with fields:
           Gender: [100x1 categorical]
              Age: [100x1 double]
           Smoker: [100x1 logical]
    BloodPressure: [100x2 double]

테이블과 달리, 데이터가 사각형이 되도록 강제할 수 없습니다. 예를 들어, 필드 ScalarStruct.Age의 길이는 다른 필드와 다를 수 있습니다.

테이블을 사용하여 (구조체형 배열처럼) 사각형 구조체를 유지하고 (스칼라 구조체의 필드처럼) 변수의 동질성을 강제할 수 있습니다. 셀형 배열은 명명된 필드는 없지만 구조체형 배열 및 스칼라 구조체와 동일한 많은 단점을 가지고 있습니다. 각 변수에 사각형의 동종 데이터가 있는 경우 테이블을 사용해 보십시오. 그러면 숫자 인덱싱 또는 이름 인덱싱 방법을 사용할 수 있으며 테이블 속성을 사용하여 메타데이터를 저장할 수 있습니다.

숫자 인덱싱(Numeric Indexing)이나 이름 인덱싱(Named Indexing)으로 데이터에 액세스하기

괄호, 중괄호, 점 인덱싱 중 하나를 사용하여 테이블의 요소를 참조할 수 있습니다. 괄호를 사용하여 테이블에서 데이터 서브셋을 선택하고 테이블 컨테이너를 유지할 수 있습니다. 중괄호와 점 인덱싱을 사용하여 테이블에서 데이터를 추출할 수 있습니다. 각각의 테이블 인덱싱 메서드 내에, 이름이나 숫자 인덱스를 사용하여 액세스할 행 또는 변수를 지정할 수 있습니다.

위의 샘플 테이블을 살펴보겠습니다. 테이블 T의 각 행은 개별 환자를 나타냅니다. 작업 공간 변수 LastName에는 100개 행에 대한 고유 식별자가 포함되어 있습니다. RowNames 속성을 LastName으로 설정하여 행 이름을 테이블에 추가하고, 업데이트된 테이블에서 처음 5개 행을 표시합니다.

T.Properties.RowNames = LastName;
T(1:5,:)
ans=5×4 table
                Gender    Age    Smoker    BloodPressure
                ______    ___    ______    _____________

    Smith       Male      38     true       124     93  
    Johnson     Male      43     false      109     77  
    Williams    Female    38     false      125     83  
    Jones       Female    40     false      117     75  
    Brown       Female    49     false      122     80  

행 이름과 변수 이름을 사용하면 데이터에 레이블을 지정하는 것은 물론, 테이블의 데이터에도 액세스할 수 있습니다. 예를 들어, 이름 인덱싱을 사용하여 Williams라는 환자와 Brown이라는 환자의 연령과 혈압을 표시합니다.

T({'Williams','Brown'},{'Age','BloodPressure'})
ans=2×2 table
                Age    BloodPressure
                ___    _____________

    Williams    38      125     83  
    Brown       49      122     80  

이제, 숫자 인덱싱을 사용하여 해당하는 하위 테이블을 반환합니다. 두 번째 변수와 네 번째 변수에서 세 번째 행과 다섯 번째 행을 반환합니다.

T(3:2:5,2:2:4)
ans=2×2 table
                Age    BloodPressure
                ___    _____________

    Williams    38      125     83  
    Brown       49      122     80  

셀형 배열 또는 구조체형의 경우, 이름 인덱싱 또는 숫자 인덱싱을 이처럼 유연하게 사용할 수 없습니다.

  • 셀형 배열에서는 strcmp를 사용하여 원하는 명명된 데이터를 찾아야 합니다. 그래야만 배열의 요소를 참조할 수 있습니다.

  • 스칼라 구조체 또는 구조체형 배열의 경우 번호로 필드를 참조할 수 없습니다. 또한, 스칼라 구조체의 경우 변수의 서브셋이나 관측값의 서브셋을 손쉽게 선택할 수 없습니다. 구조체형 배열의 경우, 관측값의 서브셋을 선택할 수 있지만, 변수의 서브셋은 선택할 수 없습니다.

  • 테이블에서는 이름 인덱스 또는 숫자 인덱스를 기준으로 데이터에 액세스할 수 있습니다. 또한 변수의 서브셋과 행의 서브셋을 손쉽게 선택할 수 있습니다.

테이블 인덱싱에 대한 자세한 내용은 테이블 데이터에 액세스하기 항목을 참조하십시오.

테이블 속성을 사용하여 메타데이터 저장하기

테이블에는 데이터를 저장하는 것은 물론 변수 이름, 행 이름, 설명, 변수 단위와 같은 메타데이터를 저장할 수 있는 속성이 있습니다. T.Properties.PropName을 사용하여 속성에 액세스할 수 있습니다. 여기서 T는 테이블의 이름이고 PropName은 테이블 속성 중 하나입니다.

예를 들어, Age에 대한 테이블 설명, 변수 설명, 변수 단위를 추가해 보겠습니다.

T.Properties.Description = 'Simulated Patient Data';

T.Properties.VariableDescriptions = ...
    {'Male or Female' ...
    '' ...
    'true or false' ...
    'Systolic/Diastolic'};

T.Properties.VariableUnits{'Age'} = 'Yrs';

VariableDescriptions에 대한 셀형 배열 내의 빈 문자형 벡터는 각각 해당하는 변수에 설명이 없음을 나타냅니다. 자세한 내용은 table의 속성 설명을 참조하십시오.

테이블 요약을 출력하려면 summary 함수를 사용하십시오.

summary(T)
Description:  Simulated Patient Data

Variables:

    Gender: 100x1 categorical

        Properties:
            Description:  Male or Female
        Values:

            Female       53   
            Male         47   

    Age: 100x1 double

        Properties:
            Units:  Yrs
        Values:

            Min        25  
            Median     39  
            Max        50  

    Smoker: 100x1 logical

        Properties:
            Description:  true or false
        Values:

            True        34   
            False       66   

    BloodPressure: 100x2 double

        Properties:
            Description:  Systolic/Diastolic
        Values:
                      BloodPressure_1    BloodPressure_2
                      _______________    _______________

            Min             109                 68      
            Median          122               81.5      
            Max             138                 99      

구조체와 셀형 배열에는 메타데이터를 저장할 수 있는 속성이 없습니다.

참고 항목

|

관련 항목