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

테이블을 생성하고 사용하기

이 예제에서는 작업 공간 변수에서 테이블을 생성하고 테이블 데이터를 사용하고 나중에 사용할 수 있도록 테이블을 파일에 쓰는 방법을 보여줍니다. table은 이종 데이터 속성 및 메타데이터 속성(예: 변수 이름, 행 이름, 설명, 변수 단위 등)을 단일 컨테이너에 수집하는 데이터형입니다.

테이블은 텍스트 파일 또는 스프레드시트에서 주로 열로 저장되는 열 방향 데이터 또는 테이블 형식 데이터에 적합합니다. 테이블에 포함된 변수 각각은 데이터형이 서로 다를 수 있습니다. 그러나 행의 개수는 동일해야 합니다. 하지만 테이블에 포함된 변수는 열 벡터로만 한정되지 않습니다. 예를 들어, 테이블 변수는 여러 열로 구성된 행렬을 포함할 수 있습니다. 단, 다른 테이블 변수와 동일한 개수의 행을 가져야 합니다. 일반적으로 테이블은 행에 여러 관측값을 나타내고 열에 여러 측정된 변수를 나타내는 방식으로 실험 데이터를 저장하는 데 사용할 수 있습니다.

테이블은 관련 데이터 변수를 수집하고 구성하며 데이터를 보고 요약하는 데 사용할 수 있는 사용이 간편한 컨테이너입니다. 예를 들어, 변수를 추출하여 계산을 수행하고 그 결과를 새 테이블 변수로 간편하게 추가할 수 있습니다. 계산을 마치면 테이블을 파일에 써서 결과를 저장합니다.

테이블 생성 및 보기

작업 공간 변수에서 테이블을 생성하고 볼 수 있습니다. 또는 가져오기 툴 함수나 readtable 함수를 사용하여 스프레드시트나 텍스트 파일에서 테이블을 생성할 수 있습니다. 이러한 함수를 사용하여 파일에서 데이터를 가져오면 각 열이 테이블 변수가 됩니다.

patients MAT 파일에서 100명의 환자에 대한 표본 데이터를 작업 공간 변수로 불러옵니다.

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             12212  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             12416  cell                 
  Location                      100x1             15008  cell                 
  SelfAssessedHealthStatus      100x1             12340  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

환자 데이터를 포함하는 열 방향 변수로 테이블을 채웁니다. 이름을 사용해 테이블 변수를 액세스하고 할당할 수 있습니다. 작업 공간 변수에서 테이블 변수를 할당하는 경우 테이블 변수를 다른 이름으로 할당할 수 있습니다.

테이블을 생성하고 Gender, Smoker, Height, Weight 작업 공간 변수로 채웁니다. 처음 5개 행을 표시합니다.

T = table(Gender,Smoker,Height,Weight);
T(1:5,:)
ans=5×4 table
     Gender     Smoker    Height    Weight
    ________    ______    ______    ______

    'Male'      true        71       176  
    'Male'      false       69       163  
    'Female'    false       64       131  
    'Female'    false       67       133  
    'Female'    false       64       119  

다른 방법으로, readtable 함수를 사용하여 쉼표로 구분된 파일에서 환자 데이터를 읽어 들일 수 있습니다. readtable은 파일에 포함된 모든 열을 읽어 들입니다.

파일 patients.dat에서 모든 열을 읽어 들여 테이블을 생성합니다.

T2 = readtable('patients.dat');
T2(1:5,:)
ans=5×10 table
     LastName      Gender     Age             Location              Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    __________    ________    ___    ___________________________    ______    ______    ______    ________    _________    ________________________

    'Smith'       'Male'      38     'County General Hospital'        71       176        1         124          93              'Excellent'       
    'Johnson'     'Male'      43     'VA Hospital'                    69       163        0         109          77              'Fair'            
    'Williams'    'Female'    38     'St. Mary's Medical Center'      64       131        0         125          83              'Good'            
    'Jones'       'Female'    40     'VA Hospital'                    67       133        0         117          75              'Fair'            
    'Brown'       'Female'    49     'County General Hospital'        64       119        0         122          80              'Good'            

점 표기법 T.varname을 사용하여 여러 열 방향 테이블 변수를 할당할 수 있습니다. 여기서 T는 테이블이고 varname은 원하는 변수 이름입니다. 난수로 식별자를 생성합니다. 그런 다음, 식별자를 테이블 변수로 할당하고 테이블 변수 ID의 이름을 지정합니다. 테이블에 할당하는 모든 변수는 행의 개수가 같아야 합니다. T의 처음 5개 행을 표시합니다.

T.ID = randi(1e4,100,1);
T(1:5,:)
ans=5×5 table
     Gender     Smoker    Height    Weight     ID 
    ________    ______    ______    ______    ____

    'Male'      true        71       176      8148
    'Male'      false       69       163      9058
    'Female'    false       64       131      1270
    'Female'    false       67       133      9134
    'Female'    false       64       119      6324

테이블에 할당하는 모든 변수는 행의 개수가 같아야 합니다.

summary 함수를 사용하여 테이블 요약을 생성함으로써 각 변수에 대한 데이터형, 설명, 단위 및 기타 기술 통계량을 확인합니다.

summary(T)
Variables:

    Gender: 100x1 cell array of character vectors

    Smoker: 100x1 logical

        Values:

            True        34   
            False       66   

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Values:

            Min          111  
            Median     142.5  
            Max          202  

    ID: 100x1 double

        Values:

            Min          120
            Median    5485.5
            Max         9706

테이블의 크기를 반환합니다.

size(T)
ans = 1×2

   100     5

T에는 100개 행과 5개 변수가 있습니다.

T의 처음 5개 행을 포함하는 더 작은 크기의 새 테이블을 생성하고 표시합니다. 괄호 안에 숫자 인덱싱을 사용하여 행과 변수를 지정할 수 있습니다. 이 방법은 숫자형 배열의 요소를 참조하여 부분배열을 생성하는 방법과 유사합니다. Tnew는 5x5 테이블입니다.

Tnew = T(1:5,:)
Tnew=5×5 table
     Gender     Smoker    Height    Weight     ID 
    ________    ______    ______    ______    ____

    'Male'      true        71       176      8148
    'Male'      false       69       163      9058
    'Female'    false       64       131      1270
    'Female'    false       67       133      9134
    'Female'    false       64       119      6324

Tnew의 모든 행과 두 번째 변수부터 마지막 변수까지를 포함하는 더 작은 테이블을 생성합니다. end 키워드를 사용하여 마지막 변수나 테이블의 마지막 행을 표시하십시오. Tnew는 5x4 테이블입니다.

Tnew = Tnew(:,2:end)
Tnew=5×4 table
    Smoker    Height    Weight     ID 
    ______    ______    ______    ____

    true        71       176      8148
    false       69       163      9058
    false       64       131      1270
    false       67       133      9134
    false       64       119      6324

행과 변수 이름으로 데이터에 액세스하기

행 이름을 T에 추가하고 숫자형 인덱스 대신 행 이름과 변수 이름을 사용하여 테이블의 요소를 참조합니다. LastName 작업 공간 변수를 TRowNames 속성에 할당하여 행 이름을 추가합니다.

T.Properties.RowNames = LastName;

T의 처음 5개 행과 행 이름을 표시합니다.

T(1:5,:)
ans=5×5 table
                 Gender     Smoker    Height    Weight     ID 
                ________    ______    ______    ______    ____

    Smith       'Male'      true        71       176      8148
    Johnson     'Male'      false       69       163      9058
    Williams    'Female'    false       64       131      1270
    Jones       'Female'    false       67       133      9134
    Brown       'Female'    false       64       119      6324

T의 크기를 반환합니다. 테이블 크기를 계산할 때는 행 이름과 변수 이름이 포함되지 않으므로 크기는 변경되지 않습니다.

size(T)
ans = 1×2

   100     5

성이 'Smith' 또는 'Johnson'인 환자에 대한 데이터를 모두 선택합니다. 이 경우, 행 이름을 사용하는 것이 숫자형 인덱스를 사용하는 것보다 더 간단합니다. Tnew는 2x5 테이블입니다.

Tnew = T({'Smith','Johnson'},:)
Tnew=2×5 table
               Gender    Smoker    Height    Weight     ID 
               ______    ______    ______    ______    ____

    Smith      'Male'    true        71       176      8148
    Johnson    'Male'    false       69       163      9058

변수 이름으로 인덱싱하여 이름이 'Johnson'인 환자의 키와 체중을 선택합니다. Tnew는 1x2 테이블입니다.

Tnew = T('Johnson',{'Height','Weight'})
Tnew=1×2 table
               Height    Weight
               ______    ______

    Johnson      69       163  

T.Height와 같이 점 구문을 사용하거나 T(:,'Height')와 같이 이름 인덱싱을 사용하여 테이블 변수에 액세스할 수 있습니다.

계산 후 결과를 테이블 변수로 추가하기

MATLAB® 함수를 사용하여 테이블 변수의 내용에 액세스하고 이에 대한 계산을 수행할 수 있습니다. 기존 테이블 변수의 데이터를 기반으로 체질량 지수(BMI)를 계산하고 결과를 새 변수로 추가합니다. 흡연자 또는 비흡연자로서의 환자 상태와 BMI의 관계를 플로팅합니다. 혈압 측정값을 테이블에 추가하고 BMI와 혈압의 관계를 플로팅합니다.

테이블 변수 WeightHeight를 사용하여 BMI를 계산합니다. Weight, Height, BMI 및 기타 환자 데이터는 테이블에 둔 채, 계산을 위해 WeightHeight만을 편리하게 추출할 수 있습니다. T의 처음 5개 행을 표시합니다.

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

T(1:5,:)
ans=5×6 table
                 Gender     Smoker    Height    Weight     ID      BMI  
                ________    ______    ______    ______    ____    ______

    Smith       'Male'      true        71       176      8148    24.547
    Johnson     'Male'      false       69       163      9058    24.071
    Williams    'Female'    false       64       131      1270    22.486
    Jones       'Female'    false       67       133      9134    20.831
    Brown       'Female'    false       64       119      6324    20.426

BMI에 대한 변수 단위 속성과 변수 설명 속성을 채웁니다. 메타데이터를 테이블 변수에 추가하여 변수에 있는 데이터에 대한 추가적 설명을 넣을 수도 있습니다.

T.Properties.VariableUnits{'BMI'} = 'kg/m^2';
T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';

히스토그램을 생성하여 이 환자 그룹에서 흡연과 체질량 지수 사이에 관계가 있는지 여부를 확인합니다. 각 행에는 동일한 환자에 대한 BMI 값과 Smoker 값이 포함되어 있으므로 Smoker 테이블 변수에서 논리값을 사용하여 BMI의 요소를 참조할 수 있습니다.

tf = (T.Smoker == false);
h1 = histogram(T.BMI(tf),'BinMethod','integers');
hold on
tf = (T.Smoker == true);
h2 = histogram(T.BMI(tf),'BinMethod','integers');
xlabel('BMI (kg/m^2)');
ylabel('Number of Patients');
legend('Nonsmokers','Smokers');
title('BMI Distributions for Smokers and Nonsmokers');
hold off

작업 공간 변수 SystolicDiastolic을 통해 환자에 대한 혈압 측정값을 추가합니다. 각 행에는 동일한 환자에 대한 Systolic 값, Diastolic 값, BMI 값이 포함되어 있습니다.

T.Systolic = Systolic;
T.Diastolic = Diastolic;

히스토그램을 생성하여 높은 Diastolic 값과 높은 BMI 값 사이에 관계가 있는지 여부를 표시합니다.

tf = (T.BMI <= 25);
h1 = histogram(T.Diastolic(tf),'BinMethod','integers');
hold on
tf = (T.BMI > 25);
h2 = histogram(T.Diastolic(tf),'BinMethod','integers');
xlabel('Diastolic Reading (mm Hg)');
ylabel('Number of Patients');
legend('BMI <= 25','BMI > 25');
title('Diastolic Readings for Low and High BMI');
hold off

출력을 위해 테이블 변수와 행 재정렬하기

테이블을 출력하기 위해 준비하려면 이름을 기준으로 테이블 행을 재정렬하고 위치나 이름을 기준으로 테이블 변수를 재정렬하십시오. 최종적으로 정렬된 상태의 테이블을 표시하십시오.

환자가 사전순으로 나열되도록 행 이름을 기준으로 테이블을 정렬합니다.

T = sortrows(T,'RowNames');

T(1:5,:)
ans=5×8 table
                  Gender     Smoker    Height    Weight     ID      BMI      Systolic    Diastolic
                 ________    ______    ______    ______    ____    ______    ________    _________

    Adams        'Female'    false       66       137      8235    22.112      127          83    
    Alexander    'Male'      true        69       171      1300    25.252      128          99    
    Allen        'Female'    false       63       143      7432    25.331      113          80    
    Anderson     'Female'    false       68       128      1577    19.462      114          77    
    Bailey       'Female'    false       68       130      2239    19.766      113          81    

100x2 테이블 변수에 혈압 측정값을 담을 수 있도록 BloodPressure 변수를 생성하십시오.

T.BloodPressure = [T.Systolic T.Diastolic];

SystolicDiastolic이 중복되므로 테이블에서 삭제합니다.

T.Systolic = [];
T.Diastolic = [];

T(1:5,:)
ans=5×7 table
                  Gender     Smoker    Height    Weight     ID      BMI      BloodPressure
                 ________    ______    ______    ______    ____    ______    _____________

    Adams        'Female'    false       66       137      8235    22.112     127     83  
    Alexander    'Male'      true        69       171      1300    25.252     128     99  
    Allen        'Female'    false       63       143      7432    25.331     113     80  
    Anderson     'Female'    false       68       128      1577    19.462     114     77  
    Bailey       'Female'    false       68       130      2239    19.766     113     81  

ID가 첫 번째 열로 놓이도록 하려면 위치를 기준으로 테이블 변수를 재정렬하십시오.

T = T(:,[5 1:4 6 7]);

T(1:5,:)
ans=5×7 table
                  ID      Gender     Smoker    Height    Weight     BMI      BloodPressure
                 ____    ________    ______    ______    ______    ______    _____________

    Adams        8235    'Female'    false       66       137      22.112     127     83  
    Alexander    1300    'Male'      true        69       171      25.252     128     99  
    Allen        7432    'Female'    false       63       143      25.331     113     80  
    Anderson     1577    'Female'    false       68       128      19.462     114     77  
    Bailey       2239    'Female'    false       68       130      19.766     113     81  

이름을 기준으로 테이블 변수를 재정렬할 수도 있습니다. Gender가 마지막에 오도록 테이블 변수를 재정렬하려면 다음을 수행하십시오.

  1. 테이블의 VariableNames 속성에서 'Gender'를 찾습니다.

  2. 'Gender'를 변수 이름으로 구성된 셀형 배열의 끝으로 이동시킵니다.

  3. 이름으로 구성된 셀형 배열을 사용하여 테이블 변수를 재정렬합니다.

varnames = T.Properties.VariableNames;
others = ~strcmp('Gender',varnames);
varnames = [varnames(others) 'Gender'];
T = T(:,varnames);

재정렬된 테이블의 처음 5개 행을 표시합니다.

T(1:5,:)
ans=5×7 table
                  ID     Smoker    Height    Weight     BMI      BloodPressure     Gender 
                 ____    ______    ______    ______    ______    _____________    ________

    Adams        8235    false       66       137      22.112     127     83      'Female'
    Alexander    1300    true        69       171      25.252     128     99      'Male'  
    Allen        7432    false       63       143      25.331     113     80      'Female'
    Anderson     1577    false       68       128      19.462     114     77      'Female'
    Bailey       2239    false       68       130      19.766     113     81      'Female'

파일에 테이블 쓰기

전체 테이블을 파일에 쓰거나 하위 테이블을 생성하여 원본 테이블에서 선택한 부분을 별도의 파일에 쓸 수 있습니다.

writetable 함수를 사용하여 T를 파일에 씁니다.

writetable(T,'allPatientsBMI.txt');

readtable 함수를 사용하여 allPatientsBMI.txt의 데이터를 새 테이블로 읽어 들일 수 있습니다.

하위 테이블을 생성하고 별도의 파일에 씁니다. 흡연 환자의 데이터를 포함하는 행을 삭제합니다. 그런 다음 Smoker 변수를 제거합니다. nonsmokers에는 흡연자가 아닌 환자에 대한 데이터만 포함됩니다.

nonsmokers = T;
toDelete = (nonsmokers.Smoker == true);
nonsmokers(toDelete,:) = [];
nonsmokers.Smoker = [];

nonsmokers를 파일에 씁니다.

writetable(nonsmokers,'nonsmokersBMI.txt');

참고 항목

| | | | | | | |

관련 예제

세부 정보