くらげのすいそう

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

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

はじめに

この記事では幹事として、ある程度の大きさの飲み会を複数回こなさなければいけない人に、 PythonGoogle 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も使っているしいずれソースあげてみます

ちゃんと達成できるように来年の抱負を立ててみた

なんでこの記事を書いたのか

年の瀬に始めたから、どうしてもこの話題です。 今まで「いや、どうせ頓挫するし」っていう理由でしっかりした抱負を立てたことがありませんでした。

ただ、

  • 学生生活も終わりに近づいてきたこと
  • 今年とにかく目につくことを色々やってみたら自分のためにならない部分も多かった

ので、そろそろちゃんと計画を立てようと決意をしました。

とはいえ立てるに当たって、来年の抱負というやつが頓挫する大きな理由が

  • とりあえず掲げたはいいけど実際何か出来る形まで落とし込めていない
  • 計画の短期の見直し・評価が入っていない

ことにあると思うので、今大学の研究室で研究している、 企業戦略のフレームワークを、自分に対して利用しながら、 2017年度の抱負をできそうな形で立ててみようと思います。

背景として

今回はGQM+Strategyという以下のフレームワークを使います。 情報処理推進機構のサイトをとりあえず引っ張ってきていますが、もしかしたら英語で調べたほうがいいかも知れません。

sec.ipa.go.jp

あとは手前味噌。何かの時に自分でまとめた資料。

GQM+S.pdf - Google ドライブ

とってもザックリまとめると、

  • GQM(Goal-Question-Metrics)っていう品質測定のモデルを企業戦略に拡張
  • 目標と戦略を結びつけてどの戦略がどの目標に貢献するのか明らかにする。
  • 目標はメトリクスで定量化される。目標を達成しているのか評価する。

というものです。モデルを使ってやることは愚直に「何かやって、評価して、フィードバック」の繰り返しで、 あくまで整理・可視化が目的ですね。

手順は?

一応今回は以下の手順を採用しました。大切なのはモデルを正しく作ることではなく、 作ったモデルを活用することだと思うのであまり固いことを言わずにざっくりと。

  1. 最上位ゴールを決める
  2. 最上位ゴールや自分の状況から幾つか仮定・事実を導く
  3. ゴールを元に戦略を導く
  4. ゴールを定量化するためのメトリクス(測定値)を導く
  5. 上記を戦略が十分実行可能になるまで繰り返す

最上位ゴールとは一番達成したい目標。企業だったら「収益の増大」とかでしょうか。 仮定・事実というのは戦略を導く上での根拠のことをGQM+Sではこう言います。

ちなみに仮定・事実の違いは確からしさがあるかどうかです。 例えば「宿題を終わらせる」という目標に対し、「徹夜でやる」という戦略を立てたとします。 この戦略を立てた根拠には

  • 「夜のほうが集中できる」: 主観的で根拠に乏しい
  • 「実際にできる時間が増える」:客観的で自然の摂理あるいはデータに基づく

というのが考えられます。この時前者を「仮定」、後者を「事実」として区別して戦略を導きます。

構築してみた。

今回のトップゴールは以下とします。

  • 今年自分がやって一番楽しかったデータ分析をもう少しやってみる
  • 就職活動もあることだし、自分の将来を見つめる
  • 研究・バイトなど今主に属しているコミュニティで成果を出す

ひとまずこれで作ってみた結果だけ出してみます。 当座春休みぐらいまでの目標を多めにして、具体的で達成できそうな目標にしてみました。

実際これだと最上位目標がどれだけ達成できるかわからないので、実際にやってみて、評価・戦略の立て直しを繰り返していきたいと思います。

f:id:etizenjellyfish415:20161230215150p:plain

最後にまとめ

  • 今年はちゃんと目標を立ててみた
  • ついでに自分の研究はこんなことっていうのも書いてみた
  • 評価・改定についてはまた今度ちゃんとレポートしたい

またそのうちやってみた感想をかいてみます。