%% 【R2023b】ピボットテーブルの進化
% こんにちは，道家です．運動会の時期ですね．最近は春に運動会をする所も増えているようですが，うちの幼稚園・小学校は今週末と来週末です．今年は幼稚園最後の運動会となるので，少し感慨深いです．
% さて，先月 R2023b がリリースされ，X でも #R2023b についてのポストがたくさん目に付きます．皆さんのお気に入り機能はどれですか？まだでしたら，是非リリースノートに目を通してみてください．
% R2023a がリリースされた時にピボットテーブルについての記事を書きました．今回のリリースでは，ピボットテーブル機能が更にアップデートされ使いやすくなりました．この記事ではその新機能を深掘りします．
% まず前回と同様，データを読み込みます．

data = readtable("patients.xls", TextType="string")

%% ライブタスク
% 最初の新機能はライブタスク．これは大きいです．@michio_MWJさんも言われてますが，ピボットテーブルは結果を見ながら試行錯誤設するものなので，このようなライブタスクはとても役立ちますね．
%
% ピボットテーブルに関しては，このライブタスクが一番主となる新機能であることには間違いありませんが，実は他にもいくつか取り上げたい機能があります．
%% データのフィルター
% まずは，pivot の機能ではありませんが，上の動画でもありますようにライブタスク内でデータのフィルターができることです．ピボットする前に，欠損値を取り除いたり，ある条件にあった値だけを切り出したり，前処理としては重要なステップです．フィルターは，「条件を満たす配列要素の検索」にあるような標準的な構文でできてしまいますが，これがライブタスク内で直接できるというのはありがたいですね．
%% 行ラベル
% 次に，ピボットの行変数をもとに行ラベルを作成してくれる機能です（RowLabelPlacement パラメーター）．こちらの例では，行のピボット変数を "Gender" （Female|Male）と "Smoker" （true|false）に設定しています．それぞれ２つのカテゴリーからなっているため，組み合わせは Female_false，Female_true，Male_false，Male_true の４通りとなります．

pivotedData = pivot(data, Rows=["Gender","Smoker"], ...
    Columns=["Location","SelfAssessedHealthStatus"], DataVariable="Systolic", Method="mean", ...
    RowLabelPlacement="rownames")

% 機能的には華やかなものではありませんが，分かり易いラベルがあることによってデータを指定しやすくなります．例えば，男性の喫煙者のデータを Male_true というラベルで取り出すことができます．

MaleSmoker = pivotedData("Male_true",:)

% R2023a では，行のピボット変数はそれぞれテーブルの変数として表示されます．

pivotedData2 = pivot(data, Rows=["Gender","Smoker"], ...
    Columns=["Location","SelfAssessedHealthStatus"], DataVariable="Systolic", Method="mean")

% この場合，男性の喫煙者のデータを取り出すにはこのような構文になります．

MaleSmoker2 = pivotedData2(pivotedData2.Gender == "Male" & pivotedData2.Smoker == true,:)

%% 入れ子テーブルの表示
% 最後に，（こちらも pivot 機能とは関係ありませんが）入れ子のテーブルが見やすくなりました．例えば，今回のように複数の列変数でピボットした場合，入れ子のテーブルが作成されます．

CountryGeneralHospital = pivotedData(:,"County General Hospital")

% 以前ですと，このように入れ子テーブルは省略して表示されます．テーブルの機能としては変わりませんが，内容が一目で確認できるのは便利です．
%
%% お気に入り機能は？
% 表データを分析することが多いので，個人的にはピボット機能がどんどん良くなってきていて嬉しいかぎりです．
% 皆さんの R2023b お気に入り機能を教えてください．こちらにコメントしていただいてもいいですし，#R2023b でポストしていただいても結構です．