過保護のカホコを視聴するのが毎週楽しみで見ています。主人公カホコの成長が毎回微笑ましく、少し泣ける内容になってると感じます。できれば自分が好きなドラマは高視聴率であって欲しいものの、実際どうなんだろう?ということで、今回はドラマの視聴率推移をグラフ化してみます。
やりたいこと
- 2017年7〜9月期のドラマ+「逃げ恥」の視聴率をDataFrame化
- matplotlibでグラフ化
用意するもの
Jupyter notebook
pandas
matplotlib
出来上がったもの
1. 2017年7〜9月期のドラマ+「逃げ恥」の視聴率をDataFrame化
まず利用させていただいたページは下記二つ
https://artv.info/ar1707.html
https://artv.info/ar1610.html
こうしたTableデータからDataFrameを作るのは簡単。まずTableをコピーし、pandas.read_clipboard()するだけ。下の動画を参照してもらうとわかる通り、早い。スクレイピングは必要ないです。
あとは単純、7〜9月期のドラマ視聴率一覧DataFrameと逃げ恥DataFrameを結合して、csvに保存。
1 2 3 4 5 6 7 8 9 10 11 12 |
import pandas as pd tvrate = pd.read_clipboard() old_tvrate = pd.read_clipboard() old_tvrate = old_tvrate[old_tvrate['タイトル'] == '逃げるは恥だが役に立つ'] del old_tvrate['11'] tvrate_nigehaji = tvrate.append(old_tvrate) tvrate_nigehaji.reset_index().head() tvrate_nigehaji.to_csv('tvrate.csv') |
2. matplotlibでグラフ化
まずは必要なライブラリをインポートして、日本語フォントをセット。また今回のDataFrameに必要なさそうな項目を削ってしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 |
%matplotlib inline import matplotlib.pyplot as plt import numpy as np import seaborn as sns import pandas as pd import csv plt.rcParams['font.family'] = 'IPAPGothic' plotdf = pd.read_csv('tvrate.csv') plotdf = plotdf.iloc[:,3:14] |
ここからまだ放送されてない回が「-」になっているなと考えて、とりあえずあとあとfloatに変換しないといけないので、このタイミングで「0.0」へと変換した。
1 2 3 4 |
for i in plotdf.columns: plotdf[i] = plotdf[i].replace('-', '0.0') plotdf.head() |
タイトル | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | コード・ブルー 3rd | 16.3 | 15.6 | 14.0 | 13.8 | 13.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
1 | 僕たちがやりました | 7.9 | 6.5 | 6.6 | 5.8 | 5.4 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
2 | カンナさーん! | 12.0 | 12.6 | 10.1 | 9.3 | 10.2 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
3 | 過保護のカホコ | 11.6 | 10.8 | 12.0 | 11.1 | 12.1 | 10.9 | 0.0 | 0.0 | 0.0 | 0.0 |
4 | 遺留捜査 | 13.1 | 8.8 | 10.9 | 10.8 | 10.1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
5 | 黒革の手帖 | 11.7 | 12.3 | 10.9 | 10.7 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
6 | セシルのもくろみ | 5.1 | 4.5 | 4.8 | 4.4 | 3.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
7 | 脳にスマホが埋められた! | 3.7 | 3.8 | 4.2 | 3.0 | 3.7 | 2.9 | 0.0 | 0.0 | 0.0 | 0.0 |
8 | ハロー張りネズミ | 10.3 | 7.6 | 6.6 | 4.8 | 6.7 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
9 | あいの結婚相談所 | 5.1 | 3.6 | 3.3 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
10 | ウチの夫は仕事ができない | 11.2 | 9.1 | 8.5 | 9.4 | 8.0 | 8.7 | 0.0 | 0.0 | 0.0 | 0.0 |
11 | ごめん、愛してる | 9.8 | 10.0 | 9.5 | 9.2 | 9.4 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
12 | 警視庁いきもの係 | 8.9 | 7.2 | 6.0 | 5.7 | 6.6 | 5.3 | 0.0 | 0.0 | 0.0 | 0.0 |
13 | 愛してたって、秘密はある。 | 8.2 | 8.7 | 9.2 | 8.0 | 8.5 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
14 | 逃げるは恥だが役に立つ | 10.2 | 12.1 | 12.5 | 13.0 | 13.3 | 13.6 | 13.6 | 16.1 | 16.9 | 17.1 |
これでよしとします。ここから先はmatplotlibの操作。よくサンプルで作ってるのがsin、cosのグラフです。波打っているように見えるグラフ。
1 2 3 4 5 6 |
import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 5, 0.1); y = np.sin(x) plt.plot(x, y) |
こんな感じよく、みなさん作ってます。matplotlib.pyplot.plot()にxとyを渡してあげるだけで簡単な線グラフができあがります。そのときxとyはnumpy arrayやlistであることが必須。
今回はDataFrameのcolumnsとDataFrameのi行をそれぞれ取り出して、リスト化する関数(=plottv())を作りました。
1 2 3 4 5 6 7 8 9 10 |
def plottv(i): xrange = [] yrange = [] for s, d in zip(list(plotdf.columns)[1:],list(plotdf.iloc[i,:])[1:]): xrange.append(float(s)) yrange.append(float(d)) plt.plot(xrange, yrange, label = plotdf.iloc[i,0]) |
plot.plotのパラメータに角折れ線グラフにつく凡例用のドラマタイトルをlabelで渡しています。あとはplottv()をforで回して各ドラマのグラフを追加していきます。また最後にxlabel(=x軸の名前)ylabel(=y軸の名前)legend(凡例をグラフに追加)を追記して、plt.show()。下記のグラフが出来上がりました。
1 2 3 4 5 6 7 8 |
for p in range(15): plottv(p) plt.title('2017年7〜9月期のドラマ及び「逃げ恥」の視聴率推移') plt.xlabel("各話") plt.ylabel("視聴率") plt.legend() plt.show() |
頑張れカホコ
逃げ恥とカホコは星野源が主題歌を歌っていて、何とかしてカホコも右肩上がりに視聴率を伸ばしていって欲しいものの。6話は若干視聴率下がりました。逃げ恥は7話以降ぐんっと視聴率を伸ばしているので、カホコも次が勝負。厳しいかなぁ・・・。
ZoomやChatworkでファイル共有している方へ
リモートワークが一般的になってきた今「誰が」「どこで」「何を」ファイル共有しているのかしっかりと把握する必要があります。easyDBを利用すればセキュリティ上で安全なファイル共有をクラウド上で行えるだけでなく、ファイルのバージョン管理等も簡単にできます。
>>>リモートワーク時代の安全なファイル共有「easyDB」はこちら