マット内のデータをExcelファイルにエクスポートするMATLAB



Matlab Export Data Mat Excel File



元の書類: https://www.yuque.com/lart/tools/cnedve

記事のディレクトリ

動機

一部のプロジェクトのテストコードはまだmatlabを使用していますが、Excel処理データの利便性と手動入力への嫌悪感から、matファイルに保存された計算データをxlsまたはxlsxファイルにエクスポートする方法を検討しました。



周囲

Ubuntu 18.04、MATLABR2018a。

方法

まず第一に、matlabのヘルプドキュメントは非常に詳細で包括的であると言わなければなりません。特に最近のバージョンでは、中国語のドキュメントがますます完全になり、何もすることがない場合はドキュメントを確認するのに非常に役立ちます。



まず、データを分析します。私の実際の使用から、実際には文字列と数値の2種類のデータがあります。統合と書き込みを一度に容易にするために、matlabのセル配列を使用して表形式のデータ全体を作成できます。

セル配列は、セルと呼ばれるインデックス付きのデータコンテナを含むデータ型であり、各セルには任意の種類のデータを含めることができます。セル配列には通常、 異なる長さの文字ベクトルのリスト 、または ストリングデジタル の組み合わせ、または さまざまなサイズの数値配列

置くことによって 括弧で囲まれたインデックス()セルセット 。使用する 中括弧{}セルの内容にアクセスするためのインデックス



データを行ごとに作成することで、最終的に、モデル名、モデル結果、さまざまなインジケーターの名前が含まれる、必要なすべてのデータを含むセル配列を取得できます。この配列をxlsまたはxlsxファイルに書き込むだけです。

検索できますexcel関連性のあるコンテンツ。

image.png

使用をお勧めしますwritetable関数。

この関数の使用法を理解するために、私たちは直接見ていきます 彼のドキュメント(これはR2019aのドキュメントです。ブラウザで直接受信できるため、基本的な内容は変更されていません) 彼が置いたことが理解できます テーブルデータ ファイルに書き込みます。

writetable指定された拡張子に従ってファイル形式を決定します。拡張子は、次のいずれかの形式である必要があります。

  • .txt.datまたは.csv(区切り文字付きのテキストファイルに適用可能)
  • .xls.xlsmまたは.xlsx(Excelスプレッドシートファイルに適用可能)
  • .xlsb(Windows ExcelがインストールされているシステムでサポートされているExcelスプレッドシートファイルに適用可能)

また、現在のデータはセル配列であり、直接書き込むことはできません。次のエラーが表示されます。

Undefined function 'write' for input arguments of type 'cell'. Error in writetable (line 124) write(a,filename,varargin{:})

したがって、セル配列をテーブルデータに変換する必要があります。ページ上 https://ww2.mathworks.cn/help/matlab/tables.html ご覧のとおり、テーブルデータを作成するためのセル配列の使用、つまり関数の使用など、テーブルデータに対するさまざまな操作があります。 cell2table

テーブルデータは列に基づいていることが理解できるため、列ごとに対応する名前が指定されます。指定しない場合、デフォルトの形式で作成されます。 Nameなので、実際にはデータの最初の行を列データと見なすことができるので、与えられた例を参照できますConvert column headings to variable namesこのセクションのコード。

セル配列をテーブルに変換してから、セル配列の最初の行をテーブルの変数名として含めます。

最初の行に列見出しの識別に使用される文字ベクトルが含まれるセル配列を作成します。

サンプルコードは次のとおりです。

Patients = {'Gender' 'Age' 'Height' 'Weight' 'Smoker'... 'M' 38 71 176 true... 'M' 43 69 163 false... 'M' 38 64 131 false... 'F' 38 64 131 false... 'F' 40 67 133 false... 'F' 49 64 119 false} C = Patients(2:end,:) T = cell2table(C) T.Properties.VariableNames = Patients(1,:)

つまり、最初に通常の方法でデータを変換します。ここでは最初の行が除外され、最後にテーブルの属性を変更して最初の行が元のデータに置き換えられます。これから、実際にテーブルに書き込むことができるデータを取得できます。

コード

data_name = 'DUT-OMRON' output_folder = './Results/' mat_path = [output_folder, data_name, '/'] fprintf('Dataset Name: %s ', data_name) fprintf('Output Folder Name: %s ', output_folder) fprintf('Mat File Path: %s ', mat_path) if(isfolder(mat_path) && ~isempty(mat_path)) mat_list = dir(mat_path) mat_list = mat_list(3:end, 1) else fprintf('%s should be a folder that has some files ', mat_path) end num_model = length(mat_list) output_data = cell(num_model + 1, 7) output_data(1, :) = {'Model', 'MaxF', 'MeanF', 'WFm', 'Emeasure', 'Smeasure', 'MAE'} for i = 1 : num_model mat_data = load([mat_path, mat_list(i).name]) model_name = strsplit(mat_list(i).name, '.') output_data(i + 1, :) = { ... model_name{1}, ... mat_data.MaxFmeasure, ... mat_data.mean_Fmeasure(3), ... mat_data.wFmeasure, ... mat_data.Emeasure, ... mat_data.S_measure, ... mat_data.MAE } end output_data_model = output_data(2:end, :) output_table = cell2table(output_data_model) output_table.Properties.VariableNames = output_data(1, :) filename = [output_folder, 'record.xls'] % Here use the corresponding data_name as the name for different sheets writetable(output_table, filename, 'Sheet', data_name, 'Range', 'A1')

参照リンク