くらげのすいそう

おもったことだけかいていく

幹事のたしなみとしてのGoogle FormとPython

はじめに

この記事では幹事として、ある程度の大きさの飲み会を複数回こなさなければいけない人に、 PythonとGoogle Formを使っての予定の集計を進める記事です。 既存のツールである調整さんなどは短期の予定を聞く分には重宝しますが、

  • 長期の予定となると毎回打ち込むのめんどい
  • 自由記述などは一緒に聞きにくい
  • 単純なカウントにとどまり、グラフなど視覚的な方法ではできない

今回は

  • 自由な入力を可能にするGoogle Form
  • グラフやその他ライブラリの豊富なPython

で集計する方法を書いてみたいと思います。

幹事のたしなみ

その1. Google Formで予定を聞く

Google Formで予定を聞きます。 Formは以下の要件を満たすようにします。

  • このあとの処理を考えて、1,2,3..といったカンマ区切りで日付を入力する
  • 入力する人のことを考えて、日付の範囲での入力も可能にする(例えば1,3,4-10)

フォームで見るとこんな感じです。上記を満たすため、正規表現で入力を制限しています。 f:id:etizenjellyfish415:20170203204049p:plain

正規表現は (([0-9]{1,2}(-[0-9]{1,2})?),)*([0-9]{1,2}(-[0-9]{1,2})?) を利用しています。

これはパターン: ([0-9]{1,2}(-[0-9]{1,2})?)を

  • カンマで区切った文字列であってほしい
  • 1回は含む文字列であってほしい

というルールで、このパターンというのは、

  • 0から9の数字を1個か2個
  • オプションでハイフンをつけた後に数字が入ったパターンもOK (これは範囲の入力に対応)

としています。

その2. Pythonで集計する

PythonのPandasライブラリで集計します。その際集計用のコードはフォルダに入れて、gitで管理すると便利です。以下手順です。

  • 集計用フォルダで新たにブランチを切る
  • Google FormからCSV形式で結果をダウンロード
  • フォルダにデータを入れる
  • 集計する

集計の時は、例えば1日から10日の予定を聞きたくて、 先ほどの1,3,5-8を回答として得られた場合にこれを、

[1,0,1,0,1,1,1,1,0,0]

として、集計をします。

とりあえず結果だけですが、1日から31日だったらこんな感じのデータに変えます。

(名前は伏せてあります) f:id:etizenjellyfish415:20170203195038p:plain

PythonのPandasは集計関数とグラフの関数があるので、ここからこんな集計ができます。 横軸は日付、縦軸は人数です。

f:id:etizenjellyfish415:20170203195250p:plain

これでいつが人が来るのかわかるという寸法です。

結果と展望

  • (一応)再利用できる形で集計ができるようになったつもり
  • 使える人なら…楽…?
  • ゴミだけどjupyter notebookã‚‚Gitも使っているしいずれソースあげてみます