2017年1月20日 星期五

使用試算表內的陣列函數來製作分組次數分配表

用 frequency() 陣列函數來製作分組次數分配表 假設你手邊有某個班級 20 位同學總共 8 次小考/作業/實作成績, 你想要製作 次數分配 (Frequency Distribution) 圖表。 本文先只處理表格的部分; 另文再談製圖。 最近為了這個需求, 第一次學會在試算表 (libreoffice 或 openoffice 的 calc, 或是 excel 也適用) 裡面使用 陣列函數 (array function)

請參考 範例檔。 我們想要以 20 分為一個區段來統計每次的成績分佈。

  1. 在 A24:A27 輸入 20、 40、 60、 80。
  2. 選取 B24:B28 (對, 比 A24:A27 多出一格)。
  3. 輸入算式: =frequency(B3:B22, $A24:$A27) 。 意思是: 把 B3:B22 裡面的資料, 按照 $A24:$A27 (注意兩個錢號! 因為等一下要向右複製) 的區間來分組統計各種成績出現的次數。
  4. 按下 ctrl-shift-ENTER, B24 統計出 "20 分或以下的人數", B25 統計出 "40 分或以下的人數",... B27 統計出 "80 分 (不含) 以上的人數"。 (所以比 A24:A27 多一格。) 注意運算式外面自動多出一對大括弧 {}, 表示這五個儲存格共用一個陣列函數。 以後要修改運算式, 也都必須集體行動: (1) 同時選取這五格 (2) 改完後按 ctrl-shift-ENTER 而不是 ENTER。

再來向右複製。 你不能直接向右拉。 必須先選取 B24:B28、 按 ctrl-c、 點選 C24、 按 ctrl-v、 點選 D24、 按 ctrl-v、 ...。

如果原始資料當中有文字, 它會被忽略不計; 但如果原始資料中有計算錯誤, 則會導致整組結果計算錯誤。 例如我故意把範例中的 H21 改成 =1/0, 結果 H24:H28 就全部壞掉了。

假設我要進一步把結果翻轉 90 度 (transpose; 行列對調)。 根據 這個問答, 可以用 「特別方式貼上 paste special」 來達成。 但是因為我們的 B24:I28 內含陣列運算式, 所以不能直接複製。

  1. 選取 B24:I28、 按 ctrl-c。
  2. 點選 B30, paste special、 只貼數值 (不要貼公式)。
  3. 選取 B30:I34、 按 ctrl-c。
  4. 點選 B36, paste special, 再點選對話框最右上角 transpose 行列互換的圖示。

原先位於 B24:I28 的 5x8 陣列, 現在變成了位於 B36:F43 的 8x5 陣列。

好吧, 我承認, 這兩件事用試算表做好像真的比用 perl 做簡單一點。 不過下一步 從試算表產生柱柱圖(三次元長條圖) 可就是 perl + gnuplot 完勝囉。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。