すのふら

日々の備忘録

ラジカツスターズ!のコーナーのメンバー別正解数を図で確認する

f:id:snofra:20170415025404p:plain

pythonの勉強も兼ねて、『私達、AIKATSU☆STARS!です!!スターズ!!!』で誰が1回の放送で安定して回答しているのかを見てみる。

『私達、AIKATSU☆STARS!です!!スターズ!!!』というコーナーは、ひとつに質問に対して回答を合わせるという趣旨のもの。


条件

  • 『私達、AIKATSU☆STARS!です!!スターズ!!!』の正解数は、前回の情報を元に抽出。(49回目まで)
  • コーナー自体やっていない場合(初回など)は計算から除外


図にするとよりわかりやすい「るか」と「みほ」

細かいことを言う前に結果。

f:id:snofra:20170604012230p:plain

この図はカーネル密度推定で算出。まあ気にしなくていいっす。
とにかくこの図で各メンバーが1回のコーナーで何回正解できているんだ?ってのを示してる。
このグラフで言うと、一番わかりやすいのが「るか」と「みほ」


圧倒的に答えられない「るか」と、確実に1回は正解する「みほ」

この図から見ても、るかは回答数が0でコーナーが終わるのがかなり多く、このコーナーの正当率を引き下げている要因と言っても仕方ないかと。

まあ、るかの回答は大分アレでしたし
将棋の駒一つ挙げろって言われてキングとか、ピザに乗っているものでピザソースとか、正解数0が多いのも納得ですわ。

逆にみほは回答数0が少なく、確実に1問は正解する傾向が強いけど、2問以上の爆発的な回答はしない傾向にあるよう。
正解数3~4の数が極端に少ない*1

爆発的な回答をするのは「せな」と「ななせ」になるよう。

せなは比較的安定して正解しているのと、ななせは回答数が2問目で落ち込んで、それを超えるとブーストして正解数が上がってくる。

ラジオでも正解数が増えるとどんどんいこうみたいなスタイルになるのが、ななせの特徴のように感じている(勝手に)ので、その結果が表れているのかなあ。


自分の備忘録

ここから細かい話。
統計とかの話なので興味あればレベル。自分の備忘録として。

今回、この図を出すにあたり、カーネル密度推定を使用したんだけど、それって何ぞやってところをメモ。

ウィキペディアにも書いているんだけど、まあ俺のようなアホにはちょっと何言ってんのかよくわからん。
カーネル密度推定 - Wikipedia

ざっくりいうと、ヒストグラムの棒グラフを滑らかにしたもの。

でもって、ヒストグラムについてはここを見てもらうと分かりやすい
ヒストグラムはある程度で区切ってその区切った範囲でどのくらい数があるのかなってこと。

今回で言うと、1回のコーナーで回答数が何回だったの?ってのを示したかった。
正直ヒストグラムでやる必要はないわな。0~4という区切るのにしても少なすぎるし。

カーネル密度推定がヒストグラムの棒グラフを滑らかにしたものなら、そもそもヒストグラムのままでもいいじゃんみたいな感じある。

だけど、ヒストグラムでやると棒が重なるので視覚的に難がある。
f:id:snofra:20170604013528p:plain

箱ひげ図はあまりなじみがないだろうし、このメンバーの感じだとちょっと説明しにくい。
f:id:snofra:20170604013710p:plain
正直この結果で何を書けばいいんだくらいのヤツ。

ということで、カーネル密度推定で表示してみようと思った次第。

ソースコード

さらにメモ用でソースコードを記載。jupyter notebookから書いているので、ほかので流用する場合はもうちょっと何かいる。

# もろもろ宣言
import pandas as pd
from pandas import Series
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
 
#csvファイルの読込。カラムは左からname/on_air/Question/Ans
df = pd.read_csv('C:/Users/xxxxx/yyyy.csv')
 
#取り込んだcsvファイルの中からAns列だけ取ってくる関数
def getdf(name):
   getAns =Series(df[df['name'] == name].Ans, name='Answer')
   return getAns
 
#各メンバーのコーナー1回での回答数を取得
RukaAnsSe=getdf('ruka')
MikiAnsSe=getdf('miki')
KanaAnsSe=getdf('kana')
MihoAnsSe=getdf('miho')
NanaseAnsSe=getdf('nanase')
SenaAnsSe=getdf('sena')
RieAnsSe=getdf('rie')
 
#カーネル密度推定を算出してグラフに書いて保存
plt.figure(figsize=(20, 10), dpi=100, linewidth = 100)
plt.xticks([0,1,2,3,4,5])
plt.tick_params(labelsize=18)
plt.xlabel('Answer', fontsize=18)
sns.distplot(RukaAnsSe,
      rug=True,
      hist=False,
      color = 'skyblue',
      kde_kws={'label':'Ruka'})
sns.distplot(MikiAnsSe,
      rug=True,
      hist=False,
      color = 'green',
      kde_kws={'label':'Miki'})
sns.distplot(MihoAnsSe,
      rug=True,
      hist=False,
      color = 'indigo',
      kde_kws={'label':'Miho'})
sns.distplot(KanaAnsSe,
      rug=True,
      hist=False,
      color = 'orange',
      kde_kws={'label':'Kana'})
sns.distplot(NanaseAnsSe,
      rug=True,
      hist=False,
      color = 'dodgerblue',
      kde_kws={'label':'Nanase'})
sns.distplot(SenaAnsSe,
      rug=True,
      hist=False,
      color = 'hotpink',
      kde_kws={'label':'Sena'})
sns.distplot(RieAnsSe,
      rug=True,
      hist=False,
      color = 'darkblue',
      kde_kws={'label':'Rie'})
plt.legend(fontsize=18)
plt.savefig('rajikatsu1.png')
 
 
#以下説明用
#ヒストグラムを作る
plt.figure(figsize=(20, 10), dpi=100, linewidth = 100)
plt.xticks([0,1,2,3,4,5])
#normedでヒストグラムを1になるように積分する(正規化処理を加える)
plt.hist(RukaAnsSe, bins=4, color='skyblue', normed=True, alpha=0.5, label='ruka')
plt.hist(MikiAnsSe, bins=4, color='green', normed=True, alpha=0.3, label='Miki')
plt.savefig('rajikatsu2.png')
 
#箱ひげ図
plt.figure(figsize=(20, 10), dpi=100, linewidth = 100)
sns.boxplot(data=[RukaAnsSe, MikiAnsSe, MihoAnsSe, KanaAnsSe, NanaseAnsSe, SenaAnsSe, RieAnsSe])
plt.xticks([0,1,2,3,4,5,6],['Ruka','Miki','Miho','Kana','Nanase','Sena','Rie'], fontsize=18)
plt.ylabel('Answer', fontsize=18)
plt.yticks([-1,0,1,2,3,4,5],['-1','0','1','2','3','4','5'], fontsize=18)
plt.savefig('rajikatsu3.png')

参考サイト

https://matplotlib.org/2.0.0/examples/color/named_colors.html
http://seesaawiki.jp/met-python/d/matplotlib#content_2_8
http://qiita.com/supersaiakujin/items/be4a78809e7278c065e6
http://qiita.com/Tatejimaru137/items/4ee6a73114d07d85bfd7

https://matplotlib.org/api/figure_api.html

*1:コーナー1回の総質問数が少ないからかと思ったけどそんなことない