MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

【R2023b】ピボットテーブルの進化

こんにちは,道家です.運動会の時期ですね.最近は春に運動会をする所も増えているようですが,うちの幼稚園・小学校は今週末と来週末です.今年は幼稚園最後の運動会となるので,少し感慨深いです.
さて,先月 R2023b がリリースされ,X でも #R2023b についてのポストがたくさん目に付きます.皆さんのお気に入り機能はどれですか?まだでしたら,是非リリースノートに目を通してみてください.
R2023a がリリースされた時にピボットテーブルについての記事を書きました.今回のリリースでは,ピボットテーブル機能が更にアップデートされ使いやすくなりました.この記事ではその新機能を深掘りします.
まず前回と同様,データを読み込みます.
data = readtable(“patients.xls”, TextType=“string”)
data = 100×10 table
  LastName Gender Age Location Height Weight Smoker Systolic Diastolic SelfAssessedHealthStatus
1 “Smith” “Male” 38 “County General Hospital” 71 176 1 124 93 “Excellent”
2 “Johnson” “Male” 43 “VA Hospital” 69 163 0 109 77 “Fair”
3 “Williams” “Female” 38 “St. Mary’s Medical Center” 64 131 0 125 83 “Good”
4 “Jones” “Female” 40 “VA Hospital” 67 133 0 117 75 “Fair”
5 “Brown” “Female” 49 “County General Hospital” 64 119 0 122 80 “Good”
6 “Davis” “Female” 46 “St. Mary’s Medical Center” 68 142 0 121 70 “Good”
7 “Miller” “Female” 33 “VA Hospital” 64 142 1 130 88 “Good”
8 “Wilson” “Male” 40 “VA Hospital” 68 180 0 115 82 “Good”
9 “Moore” “Male” 28 “St. Mary’s Medical Center” 68 183 0 115 78 “Excellent”
10 “Taylor” “Female” 31 “County General Hospital” 66 132 0 118 86 “Excellent”
11 “Anderson” “Female” 45 “County General Hospital” 68 128 0 114 77 “Excellent”
12 “Thomas” “Female” 42 “St. Mary’s Medical Center” 66 137 0 115 68 “Poor”
13 “Jackson” “Male” 25 “VA Hospital” 71 174 0 127 74 “Poor”
14 “White” “Male” 39 “VA Hospital” 72 202 1 130 95 “Excellent”

ライブタスク

最初の新機能はライブタスク.これは大きいです.@michio_MWJさんも言われてますが,ピボットテーブルは結果を見ながら試行錯誤設するものなので,このようなライブタスクはとても役立ちますね.
pivot_live_task.gif
ピボットテーブルに関しては,このライブタスクが一番主となる新機能であることには間違いありませんが,実は他にもいくつか取り上げたい機能があります.

データのフィルター

まずは,pivot の機能ではありませんが,上の動画でもありますようにライブタスク内でデータのフィルターができることです.ピボットする前に,欠損値を取り除いたり,ある条件にあった値だけを切り出したり,前処理としては重要なステップです.フィルターは,「条件を満たす配列要素の検索」にあるような標準的な構文でできてしまいますが,これがライブタスク内で直接できるというのはありがたいですね.

行ラベル

次に,ピボットの行変数をもとに行ラベルを作成してくれる機能です(RowLabelPlacement パラメーター).こちらの例では,行のピボット変数を “Gender” (Female|Male)と “Smoker” (true|false)に設定しています.それぞれ2つのカテゴリーからなっているため,組み合わせは Female_falseFemale_trueMale_falseMale_true の4通りとなります.
pivotedData = pivot(data, Rows=[“Gender”,“Smoker”],
Columns=[“Location”,“SelfAssessedHealthStatus”], DataVariable=“Systolic”, Method=“mean”,
RowLabelPlacement=“rownames”)
pivotedData = 4×3 table
  County General Hospital St. Mary’s Medical Center VA Hospital
Excellent Fair Good Poor Excellent Fair Good Poor Excellent Fair Good Poor
1 Female_false 118.8571 118.5000 121.7500 NaN 115 123.5000 120.7500 116 119.1250 118 116.5000 121
2 Female_true 138 128 128.5000 133.5000 125 NaN 130 NaN 134 122.5000 126.5000 NaN
3 Male_false 118 116.5000 122.6000 120 120.6667 NaN 120.5000 118 120.6667 109 116.3333 120
4 Male_true 129.6667 128 129.4000 129 124 NaN 131 NaN 132 124 130.5000 NaN
機能的には華やかなものではありませんが,分かり易いラベルがあることによってデータを指定しやすくなります.例えば,男性の喫煙者のデータを Male_true というラベルで取り出すことができます.
MaleSmoker = pivotedData(“Male_true”,:)
MaleSmoker = 1×3 table
  County General Hospital St. Mary’s Medical Center VA Hospital
Excellent Fair Good Poor Excellent Fair Good Poor Excellent Fair Good Poor
1 Male_true 129.6667 128 129.4000 129 124 NaN 131 NaN 132 124 130.5000 NaN
R2023a では,行のピボット変数はそれぞれテーブルの変数として表示されます.
pivotedData2 = pivot(data, Rows=[“Gender”,“Smoker”],
Columns=[“Location”,“SelfAssessedHealthStatus”], DataVariable=“Systolic”, Method=“mean”)
pivotedData2 = 4×5 table
  Gender Smoker County General Hospital St. Mary’s Medical Center VA Hospital
Excellent Fair Good Poor Excellent Fair Good Poor Excellent Fair Good Poor
1 “Female” 0 118.8571 118.5000 121.7500 NaN 115 123.5000 120.7500 116 119.1250 118 116.5000 121
2 “Female” 1 138 128 128.5000 133.5000 125 NaN 130 NaN 134 122.5000 126.5000 NaN
3 “Male” 0 118 116.5000 122.6000 120 120.6667 NaN 120.5000 118 120.6667 109 116.3333 120
4 “Male” 1 129.6667 128 129.4000 129 124 NaN 131 NaN 132 124 130.5000 NaN
この場合,男性の喫煙者のデータを取り出すにはこのような構文になります.
MaleSmoker2 = pivotedData2(pivotedData2.Gender == “Male” & pivotedData2.Smoker == true,:)
MaleSmoker2 = 1×5 table
  Gender Smoker County General Hospital St. Mary’s Medical Center VA Hospital
Excellent Fair Good Poor Excellent Fair Good Poor Excellent Fair Good Poor
1 “Male” 1 129.6667 128 129.4000 129 124 NaN 131 NaN 132 124 130.5000 NaN

入れ子テーブルの表示

最後に,(こちらも pivot 機能とは関係ありませんが)入れ子のテーブルが見やすくなりました.例えば,今回のように複数の列変数でピボットした場合,入れ子のテーブルが作成されます.
CountryGeneralHospital = pivotedData(:,“County General Hospital”)
CountryGeneralHospital = 4×1 table
  County General Hospital
Excellent Fair Good Poor
1 Female_false 118.8571 118.5000 121.7500 NaN
2 Female_true 138 128 128.5000 133.5000
3 Male_false 118 116.5000 122.6000 120
4 Male_true 129.6667 128 129.4000 129
以前ですと,このように入れ子テーブルは省略して表示されます.テーブルの機能としては変わりませんが,内容が一目で確認できるのは便利です.

お気に入り機能は?

表データを分析することが多いので,個人的にはピボット機能がどんどん良くなってきていて嬉しいかぎりです.
皆さんの R2023b お気に入り機能を教えてください.こちらにコメントしていただいてもいいですし,#R2023b でポストしていただいても結構です.

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.