corrected GPA to GP
This commit is contained in:
+8
-8
@@ -5,7 +5,7 @@
|
|||||||
* 概要
|
* 概要
|
||||||
|
|
||||||
Google Forms で実施した3年生の研究室配属希望調査について、結果画面から
|
Google Forms で実施した3年生の研究室配属希望調査について、結果画面から
|
||||||
コピーしたテキストを解析し、研究室ごとの希望者数と GPA の統計量を集計する
|
コピーしたテキストを解析し、研究室ごとの希望者数と GP の統計量を集計する
|
||||||
Python スクリプトです。
|
Python スクリプトです。
|
||||||
|
|
||||||
Google Forms の管理者権限がなく CSV を直接取得できない場合でも、結果画面の
|
Google Forms の管理者権限がなく CSV を直接取得できない場合でも、結果画面の
|
||||||
@@ -17,7 +17,7 @@ Google Forms の管理者権限がなく CSV を直接取得できない場合
|
|||||||
- 各研究室の回答値を抽出
|
- 各研究室の回答値を抽出
|
||||||
- 在校生と編入生を分類
|
- 在校生と編入生を分類
|
||||||
- 研究室ごとの希望者数を集計
|
- 研究室ごとの希望者数を集計
|
||||||
- 在校生 GPA の平均値と標準偏差を計算
|
- 在校生 GP の平均値と標準偏差を計算
|
||||||
- 必要に応じて元データと集計結果を Excel に保存
|
- 必要に応じて元データと集計結果を Excel に保存
|
||||||
|
|
||||||
* 必要な環境
|
* 必要な環境
|
||||||
@@ -195,7 +195,7 @@ Google Forms のグラフ表示からコピーした際に、表の前に連結
|
|||||||
#+begin_example
|
#+begin_example
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
回答者数: 98
|
回答者数: 98
|
||||||
研究室 在校生 編入生 GPA mean GPA std
|
研究室 在校生 編入生 GP mean GP std
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
1 7 0 345.1 50.7
|
1 7 0 345.1 50.7
|
||||||
2 5 1 303.4 63.0
|
2 5 1 303.4 63.0
|
||||||
@@ -203,7 +203,7 @@ Google Forms のグラフ表示からコピーした際に、表の前に連結
|
|||||||
6 7 0 354.0 32.9
|
6 7 0 354.0 32.9
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
=GPA std= は標本標準偏差です。対象が1人の場合は =-= と表示します。
|
=GP std= は標本標準偏差です。対象が1人の場合は =-= と表示します。
|
||||||
|
|
||||||
* 在校生と編入生の判定
|
* 在校生と編入生の判定
|
||||||
|
|
||||||
@@ -213,7 +213,7 @@ Google Forms のグラフ表示からコピーした際に、表の前に連結
|
|||||||
df_lab["値"] > 10
|
df_lab["値"] > 10
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
を満たす回答を在校生の GPA データとして扱います。
|
を満たす回答を在校生の GP データとして扱います。
|
||||||
|
|
||||||
したがって、
|
したがって、
|
||||||
|
|
||||||
@@ -225,9 +225,9 @@ df_lab["値"] > 10
|
|||||||
現在のスクリプトでは、文字列 =編入生= を内部的に =0= として保存するため、
|
現在のスクリプトでは、文字列 =編入生= を内部的に =0= として保存するため、
|
||||||
この条件で編入生として分類されます。
|
この条件で編入生として分類されます。
|
||||||
|
|
||||||
* GPA の統計量
|
* GP の統計量
|
||||||
|
|
||||||
研究室ごとに在校生のみを抽出し、GPA の平均値と標準偏差を計算します。
|
研究室ごとに在校生のみを抽出し、GP の平均値と標準偏差を計算します。
|
||||||
|
|
||||||
平均値:
|
平均値:
|
||||||
|
|
||||||
@@ -277,7 +277,7 @@ Excel ファイルには以下のシートを作成します。
|
|||||||
- 入力テキストは Google Forms の表示形式に依存します。
|
- 入力テキストは Google Forms の表示形式に依存します。
|
||||||
- Google Forms のコピー形式が変わった場合、正規表現の修正が必要になる可能性があります。
|
- Google Forms のコピー形式が変わった場合、正規表現の修正が必要になる可能性があります。
|
||||||
- 編入生の判定は「値が10以下」という運用上の仮定に基づきます。
|
- 編入生の判定は「値が10以下」という運用上の仮定に基づきます。
|
||||||
- GPA が実際に10以下となるデータ形式では判定条件を変更してください。
|
- GP が実際に10以下となるデータ形式では判定条件を変更してください。
|
||||||
- 回答値の誤入力は自動修正しません。
|
- 回答値の誤入力は自動修正しません。
|
||||||
- 回答数と抽出数が一致しない場合は警告を表示します。
|
- 回答数と抽出数が一致しない場合は警告を表示します。
|
||||||
- 回答数が0件の研究室は出力しません。
|
- 回答数が0件の研究室は出力しません。
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ def z2a(s):
|
|||||||
|
|
||||||
def extract_values_from_body(body):
|
def extract_values_from_body(body):
|
||||||
"""
|
"""
|
||||||
研究室ごとの回答本文から GPA 値を取り出す。
|
研究室ごとの回答本文から GP 値を取り出す。
|
||||||
|
|
||||||
- 「値 カウント」表がある場合は表を優先
|
- 「値 カウント」表がある場合は表を優先
|
||||||
- 表がない場合は 1 行 1 回答として読む
|
- 表がない場合は 1 行 1 回答として読む
|
||||||
- 「編入生」は GPA としては読まない
|
- 「編入生」は GP としては読まない
|
||||||
- 「365(修正済)」のような値にも対応
|
- 「365(修正済)」のような値にも対応
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ def parse_google_form_results(text):
|
|||||||
|
|
||||||
|
|
||||||
def summarize_by_lab(df):
|
def summarize_by_lab(df):
|
||||||
"""研究室ごとの在校生数・編入生数・GPA平均・標準偏差を計算する。"""
|
"""研究室ごとの在校生数・編入生数・GP平均・標準偏差を計算する。"""
|
||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
|
|
||||||
@@ -170,8 +170,8 @@ def summarize_by_lab(df):
|
|||||||
"研究室": lab_no,
|
"研究室": lab_no,
|
||||||
"在校生": df_regular.shape[0],
|
"在校生": df_regular.shape[0],
|
||||||
"編入生": df_lab.shape[0] - df_regular.shape[0],
|
"編入生": df_lab.shape[0] - df_regular.shape[0],
|
||||||
"GPA mean": df_regular["値"].mean(),
|
"GP mean": df_regular["値"].mean(),
|
||||||
"GPA std": df_regular["値"].std(),
|
"GP std": df_regular["値"].std(),
|
||||||
})
|
})
|
||||||
|
|
||||||
return pd.DataFrame(rows).set_index("研究室")
|
return pd.DataFrame(rows).set_index("研究室")
|
||||||
@@ -184,14 +184,14 @@ def print_summary(df, df_r):
|
|||||||
f"{'研究室':>6} "
|
f"{'研究室':>6} "
|
||||||
f"{'在校生':>6} "
|
f"{'在校生':>6} "
|
||||||
f"{'編入生':>6} "
|
f"{'編入生':>6} "
|
||||||
f"{'GPA mean':>10} "
|
f"{'GP mean':>10} "
|
||||||
f"{'GPA std':>10}"
|
f"{'GP std':>10}"
|
||||||
)
|
)
|
||||||
print("-" * 52)
|
print("-" * 52)
|
||||||
|
|
||||||
for n, row in df_r.iterrows():
|
for n, row in df_r.iterrows():
|
||||||
mean = "-" if pd.isna(row["GPA mean"]) else f"{row['GPA mean']:.1f}"
|
mean = "-" if pd.isna(row["GP mean"]) else f"{row['GP mean']:.1f}"
|
||||||
std = "-" if pd.isna(row["GPA std"]) else f"{row['GPA std']:.1f}"
|
std = "-" if pd.isna(row["GP std"]) else f"{row['GP std']:.1f}"
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"{n:>6} "
|
f"{n:>6} "
|
||||||
@@ -204,7 +204,7 @@ def print_summary(df, df_r):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="Google Forms のコピペ結果から研究室別 GPA を集計する"
|
description="Google Forms のコピペ結果から研究室別GPを集計する"
|
||||||
)
|
)
|
||||||
parser.add_argument("googleform_str", help="Google Forms からコピーしたテキストファイル")
|
parser.add_argument("googleform_str", help="Google Forms からコピーしたテキストファイル")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|||||||
Reference in New Issue
Block a user