Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

테이블 사용의 이점

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

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

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

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

load patients

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

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

whos("Age","Smoker","BloodPressure","SelfAssessedHealthStatus")
  Name                            Size            Bytes  Class          Attributes

  Age                           100x1               800  double                   
  BloodPressure                 100x2              1600  double                   
  SelfAssessedHealthStatus      100x1               560  categorical              
  Smoker                        100x1               100  logical                  

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

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

T = table(Age,Smoker,BloodPressure,SelfAssessedHealthStatus)
T=100×4 table
    Age    Smoker    BloodPressure    SelfAssessedHealthStatus
    ___    ______    _____________    ________________________

    38     true       124     93             Excellent        
    43     false      109     77             Fair             
    38     false      125     83             Good             
    40     false      117     75             Fair             
    49     false      122     80             Good             
    46     false      121     70             Good             
    33     true       130     88             Good             
    40     false      115     82             Good             
    28     false      115     78             Excellent        
    31     false      118     86             Excellent        
    45     false      114     77             Excellent        
    42     false      115     68             Poor             
    25     false      127     74             Poor             
    39     true       130     95             Excellent        
    36     false      114     79             Good             
    48     true       130     92             Good             
      ⋮

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

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

Right hand side of an assignment to a categorical array must be a categorical or text representing a category name.

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

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

StructArray = table2struct(T)
StructArray=100×1 struct array with fields:
    Age
    Smoker
    BloodPressure
    SelfAssessedHealthStatus

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

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

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

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

ScalarStruct = struct(...
    "Age",Age,...
    "Smoker",Smoker,...
    "BloodPressure",BloodPressure,...
    "SelfAssessedHealthStatus",SelfAssessedHealthStatus)
ScalarStruct = struct with fields:
                         Age: [100x1 double]
                      Smoker: [100x1 logical]
               BloodPressure: [100x2 double]
    SelfAssessedHealthStatus: [100x1 categorical]

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

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

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

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

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

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

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

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

T(["Williams","Brown"],["Age","BloodPressure"])
ans=2×2 table
                Age    BloodPressure
                ___    _____________

    Williams    38      125     83  
    Brown       49      122     80  

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

T([3 5],[1 3])
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 = ...
    ["" ...
     "true or false" ...
     "Systolic/Diastolic" ...
     "Status Reported by Patient"];

T.Properties.VariableUnits("Age") = "Yrs";

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

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

summary(T)
Description:  Simulated Patient Data

Variables:

    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:
                      Column 1    Column 2
                      ________    ________

            Min         109           68  
            Median      122         81.5  
            Max         138           99  

    SelfAssessedHealthStatus: 100x1 categorical

        Properties:
            Description:  Status Reported by Patient
        Values:

            Excellent       34   
            Fair            15   
            Good            40   
            Poor            11   

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

참고 항목

|

관련 항목