どうも、Penmarkライターのみかんです!
「休講が多い授業ランキング作ってみた!」シリーズということで前回は前編の記事を出したのですが、いかがだったでしょうか?
この記事ではPythonを使って休講情報botから休講情報のツイートを引っ張り、CSVファイルを作成しましたね。
今回の記事ではそのCSVファイルを用いてランキングを作っていますが、そもそもCSVファイルとは何か、それからどんな条件のツイートを引っ張ってきたかなどは前編に詳しく書いているのでぜひチェックしてみてください!
目次
スプレッドシートで整理する手順
前編にある前提を思い出したところで、いよいよランキングを作成していきます。
CSVファイルを開く
まずはスプレッドシートにCSVファイルを開きます。今回は日吉のCSVファイルを使って手順を解説していくので開いてみましょう。
(表示時刻が違っているのは、後になって手直しを加えたからなので気にしないでください。この先もこうした時空の歪みがあります。)
上の画像を見てもらうと分かるように、A列にツイートの本文が入っています。
また1番下の行は3783だったので、ヘッダーを除いた3782個のツイートが取得されていたことが分かります。
前編ではツイート本文以外にもcreated_atやRT,favも入れていたかもしれないですが今回は全く使うことのない情報なので削除して大丈夫です。
被っているツイートをユニークにする
休講情報botは注意換気のツイートなど、一言一句変わらないような文章を毎日つぶやいています。
そういったツイートの重複はこの後の整理で邪魔になるのでここで一回排除しておきましょう。
前編でも何回か言及していますが、unique関数を使うことで重複を排除させることが可能です。
そうすると、この画像のように(と言っても伝わりづらいですが…)、抽出したツイートがユニークになっています。
例えば一番上の行の【ご注意】のツイートや、他キャンパスのアカウントの紹介のツイートなどは、ただCSVファイルを開いただけの時にはかなり邪魔でしたが、これで少しスッキリしたような印象です。
行数は3056となっているので、700個以上のツイートが排除されたことになります。
いらない情報を削る
最後のランキングでは、時限、科目名、担当者が同じであるものをまたunique関数でユニークにしてカウントするようにしていこうと思っています。
そのため、「日付」や「備考」の要素は無視したいのでこの項目を削除します。
それからついでに【曜日・時限】というような文言も邪魔なので、一緒に削除します。
ここではまず一つ一つのツイートを分解し、時限、科目名、担当者ごとにセルを作ってそれぞれの要素に入れます。
以上のように、スプレッドシートのfind関数とmid関数を用いてツイートを分解しました。
それぞれの関数についてはググりながら手元のスプレッドシートで試してみてください。
簡単にいうと、時限は【時限】と【科目名】という文字の間にある文字を、科目名は【科目名】と【担当者】の間の文字、担当者は【担当者】と【備考】の間にある文字を取得するようにしています。
エラーが出るのは、「2018年◯年◯月×日現在、本日の休講情報はありません」というようなツイートの中にはfind関数で探している「時限】」というようなテキストがなく、返せる値がないからです。
でもこれは最後の集計では無視するため、このまま放置していても問題ありません。
抽出した要素をまとめる
次は、先ほどバラして抽出した要素を再度一つに結合します。これで必要な情報だけが詰まった休講情報を入手することができました。
(セル結合を思わせるので結合したセルというヘッダーは変ですね…。普通に休講情報とかでよかった気がします)
A列、B列、C列の要素を結合するためにconcatenate関数を使いました。複数のセルの中身をくっつけてくれます。
ちなみに結合する要素が二つだけの時にはconcatを使うこともできますが、concatenateでもできるので、concatenateを覚えておけば大丈夫です。
休講回数をカウントする
ここではついに休講情報をカウントします。countif関数を使うと、指定した範囲の中から、指定したテキストが何個あるか返してくれます。
指定する範囲は「抽出した要素をまとめる」で使用したシート「hiyoshi4」のA列で、指定するテキストは休講情報にしたいので「hiyoshi4」のA列をユニークにした「hiyoshi5」のA列のテキストとします。以下の画像をご覧ください。
参照範囲を「hiyoshi4」のa2からa4000としたのは、純粋にhiyoshi4が何行あるのか数えるのがめんどくさかったからです。
ただこれは悪いことでは無くて、例えば参照先の範囲の行が増えることがある場合には、参照範囲をぴったり指定していると新しく行を追加したときにその参照範囲から漏れてしまいます。
そのためこのように多めに取っておいてバッファを作っておくという手法はよく使われています(「hiyoshi2」のunique関数の範囲は律儀にぴったり参照していましたがあまりよくなかったですね…)。
余った部分はカウントされないだけなので特に支障はありません。
また、「hiyoshi4!a:a」というようにすればa列全部を参照範囲にしてくれますし、「hiyoshi4!a2:a」というように指定すればA列の2行目から下全部を参照範囲としてくれるので便利です。
休講が多い順に並び替える
あとは休講回数順に授業を並び替えることで、いよいよランキングが完成します!
このように、sort関数を使うことで並び替えをしています。第1引数に参照範囲、第2引数に並び替えに使用する列、第3引数には降順を指定しました。
エラーとなっているセルのカウントがやたら多いのが気になりますが、どうせ使わないので無視しましょう。
上から休講の多い授業がずらっと並んでいます。上位ともなると1年間で7回も休講があるんですね!
今思うと、ランキングにするのだからrank関数を使ってちゃんと順位を表示させればよかったのですが、それは各々でやってみてください!
各キャンパスの休講ランキング!!
というわけでお待たせいたしました。いよいよ各キャンパスの休講が多い授業ランキングを発表していきます。
日吉キャンパス
矢上キャンパス
三田キャンパス
皆さんの履修している授業はあったでしょうか?
他大学の休講の状況が分からないので何とも言えないですが、慶應の教授となると各界で実績を残している方が多く、学会の発表などが多くなるのではと何となく思っています。
最後に
いかがでしょうか。
あの授業もっと休講多かったのに入っていないというようなこともあったかもしれませんが、その抜け漏れは私の実力不足です。
例えば、前期はⅠ,後期はⅡというように授業名が変わっている場合は同一の授業とみなされないので別個に集計されています。
そもそも半期しか開講しない授業もあるため1年間の休講回数を取って集計するという手法から誤っていたような気もしています。
そのため半期ごとに集計したり、休講回数ではなく休講の期待値を比較するようなやり方のほうが良かったかもしれませんが、もっといい方法があるという方は質問箱などから教えていただけると幸いです。
また前編の記事でも書きましたが、なぜ今回表計算ソフトでExcelではなくスプレッドシートを使ったのかと言えば、スプレッドシートのunique関数を使って整理したかったからです。
でもこの前twitterで、Excelがアップデートされて処理が高速になったりするほかunique関数も実装される予定だというツイートを見たので、今後はもしかしたらExcelの方がこの調査をしやすいということになるかもしれません。
その時々で適切なツールを使っていきましょう。あとunique使わなくても、ピボットすればExcelでもできたなと今思っています。
なお、休講は担当者の事情によりやむを得ず出されたものなので、前年多く休講があったからといって今年もそうなる訳ではないし、当然その授業が緩いことを示すものではありません。
このランキングを見ても見てなくても休講を期待して履修するのはやめ、たまに訪れる休講をちょこっと喜びましょう!
あとちょっとここで宣伝させてもらいますが、Penmarkでは来年度に切り替わるまでにアプリをリリースする予定です!
アプリ内でPenmarkのニュース記事を読めるのはもちろんのこと、慶應に特化した時間割の機能を実装して、自分の履修した授業に休講があれば通知を送れるようにします(予定)。
他にも大学生活に根ざした機能を追加していく予定ですし、このニュース記事のあり方も現在のように運営で記事を配信していくだけではなく、慶應生が抱えるもっと個別具体的な課題を解決していけるような仕組みづくりをしていきたいと考えていますので、今後ともPenmarkをご愛顧いただければ幸いです!
「最後に」にうだうだと詰め込み過ぎてしまいましたが、ここまでお読みいただきありがとうございました!