先日の投稿で数字を並び替える方法を紹介しました.
これを利用して並び替えが前提の統計量などを計算するレシピを作ります.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS15.0.1
スポンサーリンク
既存のものも含める
いくつかの統計量は「統計を計算」アクションから簡単に計算できます.
それ以外はこちらで工夫しなければなりません.
レシピ
まず評価したい数のデータを用意します.
今回は「テキスト」アクションに直書きです.
続いて「リスト」アクションに各種統計量の項目を並べます.
今回は思いついた順に
- 最小値
- 最大値
- 平均値
- 中央値
- 四分位数
- 最頻値
- 分散
- 標準偏差
- 歪度
- 尖度
- 中点値
- 範囲
の12項目です.
各々を単独で計算したかったのですが全体の処理に時間がかかってしまうため一部は他を流用することにします.
統計値のリストを「リストから選択」で複数選択します.
続いてデータを書き込んだ「テキスト」アクションを改行で分割したものを変数listで置きます.
この時点でlistはきちんと昇順で並んでいるとは限らないため, ソートする必要があります.
その前にいくつかの情報は先に取得しておきます.
まずはlistの行数, つまりデータの標本数です.
すべての情報は変数valueに追加することにします.
続いてlistの整数部の最大桁digitsを求めます.
対象のデータが整数とは限らないため, listの最大値Maximumに対して「計算式」アクションを用いて
floor(log([Maximum])+1)
で最大桁数を求めます.
前回の投稿に倣い, 各データを0埋めします.
整数でないことを想定し, 最大桁で右から最大桁文字取り出すのでなく, 先頭から
[0埋めで使った0の文字数]-digits+floor(log([繰り返し項目])+1)
の分だけ文字を取り除くことになります(第3項は繰り返し項目の整数部桁数).
こうして0埋めして整数部を揃えたデータリストに対して「ファイルにフィルタを適用」で名前に対して昇順に並び替えます.
結果を変数sortedで置きます(「ファイル」の種類を数字にしておくことを忘れずに).
今後はこのソート済みのデータsortedを使って色んな統計量を計算することになります.
また後の処理の簡約化のために, この時点で平均値を求めておきます.
ここからは具体的な統計量を求めていきます.
まずは最小値です.
最小値は「統計を計算」アクションに対応しているためこれを使います.
「テキスト」アクションで体裁を整え, 変数valueに追加します(この処理は今後も共有なので以降の説明は省略します).
最大値も同様です.
中央値も「統計を計算」アクションを使います.
平均値も「統計を計算」アクションに対応していますし, そもそも上で計算済みなのでそれを使います.
最頻値(モード)も「統計を計算」アクションにあります.
中央値以外の四分位数は「統計を計算」アクションにないため, 何らかの方法で計算しなければなりません.
四分位数の定義は複数あり, それを抜きにしても何らかの形で場合分けは避けれられません.
今回は上の記事の定義D, WikipediaやExcelで用いられる定義を採用します.
計算のしやすさのためにデータ数を4で割ったときの商k, そして同じく4で割った余りのrを計算しておきます.
まずはr=0, つまりデータ数が4の倍数のときです.
このときの第一四分位数は今回の定義では
で得られます.
なのでsortedのデータのうちk番目とk+1番目が分かれば計算可能ですね.
同じく第三四分位数は
です.
この調子でr=1,2,3についても処理していきます.
続いてr=1の場合です.
このとき第一四分位数はです.
同じく第三四分位数はです.
次はr=2の場合です.
このときになります.
同じくです.
最後にr=3の場合です.
このときとなります.
今更ですが隣同士ですからこうして「リストから項目を取得」で2つ拾ってきて平均を取ればアクションが一つ少なくなります.
となります.
四分位数はこれで全部ですね.
最後に四分位範囲も計算してvalueに追加します.
これで四分位数関連は終わりです.
続いては分散です.
ショートカットでは「統計を計算」に標準偏差があり, 分散はこの2乗であることから求めます.
標準偏差は「統計を計算」アクションにあるのでこれを使います.
次は歪度です.
歪度は
で定義され(μは平均、σは標準偏差), データが正規分布からどれだけ歪んでいるかを表す統計量です.
nとσは単独固定値なので最後に計算します.
次は尖度です.
歪度が3乗だったのに比べこちらはそのまま4乗に変わります.
次は中点値です.
データのうち最小値と最大値の算術平均をとります.
最後は範囲(モード)です.
「統計を計算」アクションになるのでそのまま使います.
最後に変数valueを表示して終わります.
実行
あとは実行して確かめるだけです.
問題なければこのようになります.
〆
色々詰め込んだせいで, 今回の例のようなデータ数300でも結構な時間かかります.
目的に応じて項目を減らした方が良いですね.