186 lines
4.6 KiB
Org Mode
186 lines
4.6 KiB
Org Mode
#+TITLE: 研究室配属希望調査 解析スクリプト
|
|
#+AUTHOR: Takahiro Ohkubo
|
|
#+OPTIONS: toc:2 num:nil
|
|
|
|
* 概要
|
|
|
|
Google Forms で実施した3年生の研究室配属希望調査について、フォーム結果
|
|
画面からコピーしたテキストを解析し、研究室ごとの希望者数および GPA の
|
|
統計量を集計する Python スクリプトです。
|
|
|
|
Google Forms の管理者権限がなくCSVファイルを直接取得できない場合でも、
|
|
結果画面に表示されたテキストをコピーしてファイルに保存することで解析で
|
|
きます。
|
|
|
|
主な処理内容は以下のとおりです。
|
|
|
|
- Google Forms の結果テキストから研究室番号を抽出
|
|
- 各研究室の回答値を抽出
|
|
- 在校生と編入生を分類
|
|
- 研究室ごとの希望者数を集計
|
|
- 在校生 GPA の平均値を計算
|
|
- 在校生 GPA の標準偏差を計算
|
|
- 元データを Excel ファイルとして保存
|
|
|
|
* 必要な環境
|
|
|
|
Python 3 が必要です。
|
|
使用する Python パッケージは以下です。
|
|
- numpy
|
|
- pandas
|
|
- openpyxl
|
|
必要に応じて以下のようにインストールします。
|
|
|
|
#+begin_src sh
|
|
condat install numpy pandas openpyxl
|
|
#+end_src
|
|
|
|
* 入力データ
|
|
|
|
Google Forms のアンケート結果画面に表示されたテキストをコピーし、テキ
|
|
ストファイルとして保存します。
|
|
|
|
例えば、
|
|
#+begin_example
|
|
googleform.txt
|
|
#+end_example
|
|
|
|
というファイル名で保存します。入力データには、以下のような研究室ごとの
|
|
回答結果が含まれていることを想定しています。
|
|
|
|
#+begin_example
|
|
研究室10(極限環境材料科学研究室)
|
|
7 件の回答
|
|
380
|
|
288
|
|
300
|
|
375
|
|
280
|
|
310
|
|
359
|
|
#+end_example
|
|
|
|
また、Google Forms の表示形式によっては、
|
|
同じ値が複数回出現する場合に以下のような
|
|
「値 / カウント」形式になることがあります。
|
|
|
|
#+begin_example
|
|
値 カウント
|
|
300 2
|
|
350 2
|
|
370 1
|
|
380 1
|
|
385 1
|
|
400 1
|
|
401 1
|
|
#+end_example
|
|
|
|
この場合、カウント数に応じて値を展開します。例えば、
|
|
|
|
#+begin_example
|
|
300 2
|
|
350 2
|
|
#+end_example
|
|
|
|
は内部的に、
|
|
|
|
#+begin_example
|
|
300
|
|
300
|
|
350
|
|
350
|
|
#+end_example
|
|
|
|
として処理されます。
|
|
|
|
* 実行方法
|
|
#+begin_src sh
|
|
./analyze_lab_assignment_survey.py googleform.txt
|
|
#+end_src
|
|
|
|
* 出力
|
|
実行すると、研究室ごとの集計結果が標準出力に表示されます。
|
|
|
|
出力例:
|
|
|
|
#+begin_example
|
|
研究室 在校生 編入生 GPA mean GPA std
|
|
----------------------------------------------------
|
|
1 9 0 359.6 38.4
|
|
2 6 0 269.3 66.3
|
|
3 8 1 358.7 42.7
|
|
6 3 0 343.7 58.5
|
|
7 4 0 301.8 97.1
|
|
8 13 0 372.2 72.3
|
|
9 8 0 319.1 77.6
|
|
10 7 0 327.4 42.6
|
|
12 2 1 190.9 -
|
|
#+end_example
|
|
|
|
|
|
* 在校生と編入生の判定
|
|
|
|
このスクリプトでは、回答値について
|
|
|
|
#+begin_src python
|
|
df_["値"] > 10
|
|
#+end_src
|
|
|
|
を満たす回答を在校生の GPA データとして扱います。
|
|
|
|
したがって、
|
|
|
|
- 値 > 10 : 在校生の GPA
|
|
- 値 <= 10 : 編入生
|
|
|
|
として分類します。
|
|
|
|
* GPA の統計量
|
|
|
|
研究室ごとに、在校生のみを抽出して GPA の平均値と標準偏差を計算します。
|
|
|
|
平均値:
|
|
|
|
#+begin_src python
|
|
df__["値"].mean()
|
|
#+end_src
|
|
|
|
標準偏差:
|
|
|
|
#+begin_src python
|
|
df__["値"].std()
|
|
#+end_src
|
|
|
|
* 注意事項
|
|
|
|
- 入力テキストは Google Forms の表示形式に依存します。
|
|
- Google Forms 側の HTML やコピー形式が変更された場合、正規表現の修正が必要になる可能性があります。
|
|
- 編入生の判定は「値が10以下」という運用上の仮定に基づいています。
|
|
- GPA が実際に10以下となる別形式のデータを使用する場合は、判定条件を変更してください。
|
|
- 回答値の誤入力は自動修正しません。
|
|
- 研究室番号が存在しても回答数が0件の場合、その研究室は出力から除外されます。
|
|
|
|
* ファイル構成例
|
|
|
|
#+begin_example
|
|
.
|
|
├── README.org
|
|
├── analyze_lab_assignment_survey.py
|
|
└── googleform.txt
|
|
#+end_example
|
|
|
|
実行後:
|
|
|
|
#+begin_example
|
|
.
|
|
├── README.org
|
|
├── analyze_lab_assignment_survey.py
|
|
├── analyze_lab_assignment_survey.xlsx
|
|
└── googleform.txt
|
|
#+end_example
|
|
|
|
* ライセンス
|
|
|
|
研究室内または教育業務での利用を想定しています。
|
|
必要に応じてライセンス条件を追記してください。
|