このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
この例では、ワークスペース変数からの table の作成、table データの操作、および後で使用するために table をファイルに書き込む方法について説明します。table
は、異種混合データやメタデータ プロパティ (変数名、行名、説明、変数の単位など) を 1 つのコンテナーにまとめるためのデータ型です。
テーブルは、テキスト ファイルまたはスプレッドシートに列として格納されることが多い列方向のデータや表形式のデータに適しています。テーブル内の各変数は、データ型が異なってもかまいませんが、行数は同じでなければなりません。ただし、テーブル内の変数は列ベクトルに制限されません。たとえば、テーブル変数には、行数が他のテーブル変数と同じであるかぎり、複数列の行列を含めることができます。テーブルは、通常、行がそれぞれの観測値を表し、列がそれぞれの測定変数を表す実験データを格納するために使用されます。
テーブルは、関連するデータ変数を収集して整理したり、データを表示および要約したりする場合に便利なコンテナーです。たとえば、変数を抽出して計算を実行し、その結果を新しいテーブル変数に追加するという便利な使い方ができます。計算が終了したら、テーブルをファイルに書き込んで、結果を保存します。
ワークスペース変数からテーブルを作成し、それを表示します。あるいは、インポート ツールまたは関数readtable
を使用して、スプレッドシートまたはテキスト ファイルから table を作成します。これらの関数を使用してファイルからデータをインポートすると、各列がテーブル変数になります。
100 人の患者のサンプル データを patients
MAT ファイルからワークスペース変数に読み込みます。
load patients
whos
Name Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 11412 cell Height 100x1 800 double LastName 100x1 11616 cell Location 100x1 14208 cell SelfAssessedHealthStatus 100x1 11540 cell Smoker 100x1 100 logical Systolic 100x1 800 double Weight 100x1 800 double
患者データを含む列方向の変数をテーブルに入力します。テーブル変数には名前でアクセスできます。また、テーブル変数を名前で代入することができます。ワークスペース変数からテーブル変数を代入する場合は、そのテーブル変数に別の名前を割り当てることができます。
table を作成し、それに 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
からすべての列を読み取ることで、table を作成します。
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
を使用すると、さらに列方向の table 変数を割り当てることができます。ここで、T
は table で、varname
は希望する変数名です。乱数である識別子を作成します。その後、それらを table 変数に代入し、table 変数に 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
を使用して table 一覧を作成することで、各変数のデータ型、説明、単位およびその他の記述統計を表示します。
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 行を含む、より小さい table を新たに作成し、それを表示します。小かっこ内の数値インデックスを使用して、行と変数を指定できます。この方法は、サブ配列を作成するために数値配列へのインデックス付けと同様です。Tnew
は 5 行 5 列の table です。
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
のすべての行と、2 番目から最後までの変数を含む、より小さい table を作成します。キーワード end
を使用して、table の最後の変数または最後の行を示します。Tnew
は 5 行 4 列の table です。
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
に行名を追加し、table にインデックスを追加します。ワークスペース変数 LastName
を T
の RowNames
プロパティに代入して、行名を追加します。
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
は、2 行 5 列の table です。
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
は 1 行 2 列の table です。
Tnew = T('Johnson',{'Height','Weight'})
Tnew=1×2 table
Height Weight
______ ______
Johnson 69 163
table 変数には、T.Height
のようなドット構文または T(:,'Height')
のような名前付きインデックスのいずれかによってアクセスできます。
table 変数の内容にアクセスし、MATLAB® 関数を使用して、それらに対して計算を実行できます。ボディマス指数 (BMI
) を既存の table 変数内のデータに基づいて計算し、それを新しい変数として追加します。BMI
と、喫煙者または非喫煙者を示す患者のステータスとの関係をプロットします。血圧測定値をテーブルに追加し、血圧と BMI の関係をプロットします。
table 変数 Weight
と Height
を使用して、BMI
を計算します。計算用に Weight
と Height
を抽出する一方で、Weight
、Height
および BMI
を患者の他のデータとともに table 内に保持できるので便利です。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
table 変数から取得した論理値を使用して 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
ワークスペース変数 Systolic
と Diastolic
から、患者の血圧測定値を追加します。行ごとに同じ患者の 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
変数 BloodPressure
を作成し、100 行 2 列の table 変数で血圧測定値を格納します。
T.BloodPressure = [T.Systolic T.Diastolic];
Systolic
と Diastolic
は冗長なため、table から削除します。
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
を第 1 列にするため、table 変数を位置で並べ替えます。
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
が最後になるように table 変数を並べ替えるには、次のようにします。
table の VariableNames
プロパティで 'Gender'
を検索します。
'Gender'
を、変数名の cell 配列の最後に移動します。
名前の cell 配列を使用してテーブル変数を並べ替えます。
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
のデータを新しい table に読み取ることができます。
サブテーブルを作成し、サブテーブルを別のファイルに書き込みます。喫煙者である患者のデータを含む行を削除します。次に、変数 Smoker
を削除します。nonsmokers
には、非喫煙者である患者のデータのみが含まれます。
nonsmokers = T; toDelete = (nonsmokers.Smoker == true); nonsmokers(toDelete,:) = []; nonsmokers.Smoker = [];
nonsmokers
をファイルに書き込みます。
writetable(nonsmokers,'nonsmokersBMI.txt');
array2table
| cell2table
| readtable
| sortrows
| struct2table
| summary
| table
| writetable
| インポート ツール