forked from takahiro/analyze_lab_placement_survey
supports the output format for FY2026.
This commit is contained in:
+171
-49
@@ -4,49 +4,48 @@
|
||||
|
||||
* 概要
|
||||
|
||||
Google Forms で実施した3年生の研究室配属希望調査について、フォーム結果
|
||||
画面からコピーしたテキストを解析し、研究室ごとの希望者数および GPA の
|
||||
統計量を集計する Python スクリプトです。
|
||||
Google Forms で実施した3年生の研究室配属希望調査について、結果画面から
|
||||
コピーしたテキストを解析し、研究室ごとの希望者数と GPA の統計量を集計する
|
||||
Python スクリプトです。
|
||||
|
||||
Google Forms の管理者権限がなくCSVファイルを直接取得できない場合でも、
|
||||
結果画面に表示されたテキストをコピーしてファイルに保存することで解析で
|
||||
きます。
|
||||
Google Forms の管理者権限がなく CSV を直接取得できない場合でも、結果画面の
|
||||
テキストをコピーしてファイルに保存すれば解析できます。
|
||||
|
||||
主な処理内容は以下のとおりです。
|
||||
主な処理内容:
|
||||
|
||||
- Google Forms の結果テキストから研究室番号を抽出
|
||||
- 各研究室の回答値を抽出
|
||||
- 在校生と編入生を分類
|
||||
- 研究室ごとの希望者数を集計
|
||||
- 在校生 GPA の平均値を計算
|
||||
- 在校生 GPA の標準偏差を計算
|
||||
- 元データを Excel ファイルとして保存
|
||||
- 在校生 GPA の平均値と標準偏差を計算
|
||||
- 必要に応じて元データと集計結果を Excel に保存
|
||||
|
||||
* 必要な環境
|
||||
|
||||
Python 3 が必要です。
|
||||
使用する Python パッケージは以下です。
|
||||
Python 3 と以下のパッケージが必要です。
|
||||
|
||||
- numpy
|
||||
- pandas
|
||||
- openpyxl
|
||||
必要に応じて以下のようにインストールします。
|
||||
|
||||
Conda を使う場合:
|
||||
|
||||
#+begin_src sh
|
||||
condat install numpy pandas openpyxl
|
||||
conda install numpy pandas openpyxl
|
||||
#+end_src
|
||||
|
||||
* 入力データ
|
||||
|
||||
Google Forms のアンケート結果画面に表示されたテキストをコピーし、テキ
|
||||
ストファイルとして保存します。
|
||||
Google Forms の結果画面に表示されたテキストをコピーし、テキストファイル
|
||||
として保存します。
|
||||
|
||||
例:
|
||||
|
||||
例えば、
|
||||
#+begin_example
|
||||
googleform.txt
|
||||
#+end_example
|
||||
|
||||
というファイル名で保存します。入力データには、以下のような研究室ごとの
|
||||
回答結果が含まれていることを想定しています。
|
||||
研究室ごとの回答は、例えば以下の形式を想定しています。
|
||||
|
||||
#+begin_example
|
||||
研究室10(極限環境材料科学研究室)
|
||||
@@ -60,8 +59,78 @@ googleform.txt
|
||||
359
|
||||
#+end_example
|
||||
|
||||
また、Google Forms の表示形式によっては、
|
||||
同じ値が複数回出現する場合に以下のような
|
||||
Google Forms の表示によっては、回答数の前に =GP= が付く場合にも対応します。
|
||||
|
||||
#+begin_example
|
||||
研究室10
|
||||
GP7 件の回答
|
||||
236
|
||||
377.5
|
||||
292
|
||||
1.8
|
||||
385
|
||||
350
|
||||
#+end_example
|
||||
|
||||
* 回答値の形式
|
||||
|
||||
** 1行1回答の形式
|
||||
|
||||
通常は各回答値が1行ずつ並びます。
|
||||
|
||||
#+begin_example
|
||||
研究室1
|
||||
GP7 件の回答
|
||||
260
|
||||
181
|
||||
395
|
||||
340
|
||||
396
|
||||
380
|
||||
365
|
||||
#+end_example
|
||||
|
||||
小数値にも対応します。
|
||||
|
||||
#+begin_example
|
||||
348.3
|
||||
377.5
|
||||
403.51
|
||||
#+end_example
|
||||
|
||||
値の後ろに注記がある場合も、行頭の数値を読み取ります。
|
||||
|
||||
#+begin_example
|
||||
365(修正済)
|
||||
#+end_example
|
||||
|
||||
この場合は =365= として処理します。
|
||||
|
||||
** 編入生
|
||||
|
||||
回答が =編入生= の場合は、内部的に 0 として扱います。
|
||||
|
||||
#+begin_example
|
||||
研究室2
|
||||
GP6 件の回答
|
||||
編入生
|
||||
217
|
||||
248
|
||||
350
|
||||
342
|
||||
360
|
||||
#+end_example
|
||||
|
||||
この例では、
|
||||
|
||||
- 在校生: 5人
|
||||
- 編入生: 1人
|
||||
|
||||
として集計します。
|
||||
|
||||
** 値 / カウント形式
|
||||
|
||||
同じ値が複数回出現する場合、Google Forms の表示によっては
|
||||
「値 / カウント」形式になることがあります。
|
||||
|
||||
#+begin_example
|
||||
@@ -70,12 +139,11 @@ googleform.txt
|
||||
350 2
|
||||
370 1
|
||||
380 1
|
||||
385 1
|
||||
400 1
|
||||
401 1
|
||||
#+end_example
|
||||
|
||||
この場合、カウント数に応じて値を展開します。例えば、
|
||||
この場合、カウント数に応じて値を展開します。
|
||||
|
||||
例えば、
|
||||
|
||||
#+begin_example
|
||||
300 2
|
||||
@@ -93,69 +161,123 @@ googleform.txt
|
||||
|
||||
として処理されます。
|
||||
|
||||
Google Forms のグラフ表示からコピーした際に、表の前に連結した数字列が
|
||||
含まれることがあります。
|
||||
|
||||
#+begin_example
|
||||
19423023625427427734435036037001231 (8.3%)...
|
||||
値 カウント
|
||||
194 1
|
||||
230 1
|
||||
236 1
|
||||
254 1
|
||||
274 1
|
||||
277 1
|
||||
344 1
|
||||
350 1
|
||||
360 3
|
||||
370 1
|
||||
#+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 -
|
||||
回答者数: 98
|
||||
研究室 在校生 編入生 GPA mean GPA std
|
||||
----------------------------------------------------
|
||||
1 7 0 345.1 50.7
|
||||
2 5 1 303.4 63.0
|
||||
3 7 0 351.6 69.0
|
||||
6 7 0 354.0 32.9
|
||||
#+end_example
|
||||
|
||||
=GPA std= は標本標準偏差です。対象が1人の場合は =-= と表示します。
|
||||
|
||||
* 在校生と編入生の判定
|
||||
|
||||
このスクリプトでは、回答値について
|
||||
解析時には、回答値について
|
||||
|
||||
#+begin_src python
|
||||
df_["値"] > 10
|
||||
df_lab["値"] > 10
|
||||
#+end_src
|
||||
|
||||
を満たす回答を在校生の GPA データとして扱います。
|
||||
|
||||
したがって、
|
||||
|
||||
- 値 > 10 : 在校生の GPA
|
||||
- 値 > 10 : 在校生
|
||||
- 値 <= 10 : 編入生
|
||||
|
||||
として分類します。
|
||||
|
||||
現在のスクリプトでは、文字列 =編入生= を内部的に =0= として保存するため、
|
||||
この条件で編入生として分類されます。
|
||||
|
||||
* GPA の統計量
|
||||
|
||||
研究室ごとに、在校生のみを抽出して GPA の平均値と標準偏差を計算します。
|
||||
研究室ごとに在校生のみを抽出し、GPA の平均値と標準偏差を計算します。
|
||||
|
||||
平均値:
|
||||
平均値:
|
||||
|
||||
#+begin_src python
|
||||
df__["値"].mean()
|
||||
df_regular["値"].mean()
|
||||
#+end_src
|
||||
|
||||
標準偏差:
|
||||
標準偏差:
|
||||
|
||||
#+begin_src python
|
||||
df__["値"].std()
|
||||
df_regular["値"].std()
|
||||
#+end_src
|
||||
|
||||
=pandas.Series.std()= を使用するため、標準偏差は標本標準偏差
|
||||
(=ddof=1=)です。
|
||||
|
||||
* Excel 出力
|
||||
|
||||
=-o= または =--output= を指定すると、解析結果を Excel ファイルに保存します。
|
||||
|
||||
#+begin_src sh
|
||||
./analyze_lab_assignment_survey.py googleform.txt -o result.xlsx
|
||||
#+end_src
|
||||
|
||||
Excel ファイルには以下のシートを作成します。
|
||||
|
||||
- =raw= : 抽出した研究室番号と回答値
|
||||
- =summary= : 研究室ごとの集計結果
|
||||
|
||||
* 対応している入力形式
|
||||
|
||||
以下の形式に対応します。
|
||||
|
||||
- =研究室1= などの研究室番号
|
||||
- 全角数字を含む研究室番号
|
||||
- =7 件の回答=
|
||||
- =GP7 件の回答=
|
||||
- 整数値
|
||||
- 小数値
|
||||
- =365(修正済)= のような注記付き数値
|
||||
- =編入生=
|
||||
- 「値 / カウント」表
|
||||
- Google Forms のグラフ由来の連結数字列
|
||||
|
||||
* 注意事項
|
||||
|
||||
- 入力テキストは Google Forms の表示形式に依存します。
|
||||
- Google Forms 側の HTML やコピー形式が変更された場合、正規表現の修正が必要になる可能性があります。
|
||||
- 編入生の判定は「値が10以下」という運用上の仮定に基づいています。
|
||||
- GPA が実際に10以下となる別形式のデータを使用する場合は、判定条件を変更してください。
|
||||
- Google Forms のコピー形式が変わった場合、正規表現の修正が必要になる可能性があります。
|
||||
- 編入生の判定は「値が10以下」という運用上の仮定に基づきます。
|
||||
- GPA が実際に10以下となるデータ形式では判定条件を変更してください。
|
||||
- 回答値の誤入力は自動修正しません。
|
||||
- 研究室番号が存在しても回答数が0件の場合、その研究室は出力から除外されます。
|
||||
- 回答数と抽出数が一致しない場合は警告を表示します。
|
||||
- 回答数が0件の研究室は出力しません。
|
||||
|
||||
Reference in New Issue
Block a user