pandasとデータでみるアイドルのファンはどれくらい他のメンバーのファンか。

#データ概要
アイドル好きな僕が、某生配信プラットフォームの放送を見まくった結果をまとめます。
ここに出てくる数値はあくまで参考値で、**僕の独断と偏見と勘が多分に含まれていること**と、**実データに対して多分なエラーが含まれていること**をここに記しておきます。
使うのは２０１８年９月の一か月分のデータを使用しています。

参考：[通信内容の解析方法](http://seesaawiki.jp/shokoro/d/showroom%C4%CC%BF%AE%C6%E2%CD%C6%A4%CE%B2%F2%C0%CF%CA%FD%CB%A1)

#やりたいこと
アイドルヲタク用語でいうところの単推しがどれくらい居るかを調べます。グループ（チーム）を跨いでるのは後日やるかもしれません。
参考：[単推し](https://numan.tokyo/words/GDppu) 

#解析方法

自分がまとめたDataFrameから某アイドルグループのメンバーの配信に現れたuserのリストを取得します。
もっと効率のいい書き方をご存知の方は是非とも教えてください。

```python
extracted_user=df[df["url_key"]=="48_F*J*W*R*_*Z*S*"]["user"].unique().tolist()
```

今回の解析では、課金額と無料ギフトのポイントを足したものを解析に使用します。つまりタワー含みます。
また、対象人物の所属するチーム間のみを考えてます。

```python
df_stu= df[df["team"]=="STU"][["url_key","user","totalpoint"]]
```

pythonでfor文を使ったら負け（[参考](http://hamukazu.com/2013/12/20/tips-on-numerical-computation-in-python-numpy-scipy/)）なので負けなプログラムを書いています。
頭をひねればもっと効率のいいプログラムを書けそうなのですが・・・
今回の解析では、回すべきfor文も大したことない回数なのでこれで行きます。
まじで何かいい方法を教えてください。

以下のプログラムで、対象のユーザーが、アイドル様の所属するグループ(team)のメンバーの放送に現れてどれだけのポイント対象となる行動をしたかの合計sum()を計算して、新たなDataFrame(dfrelation)を作成します。

```python
dfrelation = pd.DataFrame()

for iuser in extracted_user:
    idf_stu=df_stu[df_stu["user"] == (iuser)][["url_key","totalpoint"]].groupby(["url_key"]).sum()["totalpoint"].rename(str(iuser))
    #print(idf_stu)
    dfrelation = dfrelation.append(idf_stu)
display(dfrelation)
```
上のプログラムで縦軸(index)がuser, 横軸(column)が解析対象アイドル様が所属するグループのメンバーな巨大な表が作られます。


```python
#display(dfrelation.sum().sort_values(ascending=False))
import matplotlib.pyplot as plt
plt.ylabel("Point")
plt.bar(dfrelation.sum().sort_values(ascending=False).index,dfrelation.sum().sort_values(ascending=False))
```
![aaaaaaaaa.png](https://qiita-image-store.s3.amazonaws.com/0/180426/a6fb3111-6cb3-dbc7-0883-e9d46f0f9bee.png)
ちなみに、今回の解析対象アイドル様は、このグラフの上から二番目でした。つまり、浮気性な方が多くいることも示してますが、僕の予想としては、もっと下の方だと思っていました。


適当な英語の変数名が思いつかなかったので、推し率(osiritu)を計算します。
ユーザーが対象グループに投入したポイントの中で、今回の解析対象アイドル様が獲得されたポイントの割合%を計算します。（割愛(わりあい)かもしれません）

```python
osiritu = pd.DataFrame()

osiritu["*Z*S*"]=dfrelation["48_F*J*W*R*_*Z*S*"]
osiritu["TOTAL"]=dfrelation.sum(axis=1)
osiritu["percent"]= round(osiritu["AZUSA"]/osiritu["TOTAL"]*100,1)
```

計算された割合の度数分布表を表示します。

```python
import seaborn as sns
sns.distplot(osiritu["percent"],kde=False,axlabel="Percentage of AZUSA")
```

![bbbbbbb.png](https://qiita-image-store.s3.amazonaws.com/0/180426/dd73d1e0-1cc6-40aa-66d4-24904250bcfc.png)

このグラフをみると、95%以上の方が１００人以上います。おそらく、１００人の単推しな方がいるようです。（あとで解析しますが、この数値は問題しかありません）
また、２０～８０％の中間域の方が非常に少なく、5%以下の方がめっちゃ多いです。これは、放送開始時の”あいさつ”だけとか、間違えて星押したとか（とはいえ対象者の放送は見に来ている）の方が非常に多いのはこの配信プラットフォームの仕様なので仕方がないのかなぁとは思います。

この１００％の方が、どれくらい、解析対象アイドル様のグループに、ポイントとなる行為をしたか見てみます。100%の割愛の人で、対象アイドル様を含む合計ポイントが20位上の人の人数を確かめます。

```python
display(osiritu[(osiritu["percent"]==100) & (osiritu["TOTAL"] > 20)].shape)
#(54, 3)
```
100人以上から、５０人に減りました。
この減った５０人は、間違いなく、解析対象アイドル様の配信に来て、コメントやアイテム等の活動をしています。ただし一ヶ月間で２０ポイントもいきません。しかも、対象アイドル様が所属するグループの他のメンバーでは一切の活動がありません。
まるで、僕のような静かなファンなのでしょうか？

#まとめ
手段と目的は基本的に逆転していて、Python, Jupyter notebook, pandas 統計 を使いたいがために無理やり目的をつくっています。
今回は、pandasの使い方を紹介しました。
誰かの参考になれば。


####消えた５０人とアイドル様のファンとは？
今回取り上げた解析対象アイドル様は、超有名人かというとそうではありません（僕が事前に行った独断と偏見の解析の結果）。
しかし、単推しな方が多そうだなぁとは思っていました（握手会で見た感じ）
解析結果も僕の予想を裏付けるものです。

僕のように、コメントも課金アイテムも使わないけど、この配信プラットフォームを訪れて画面の前でニヤニヤしながら見ている人も居るでしょう。

この消えた５０人の中で、解析対象アイドル様のファンなんだけどシャイなのだけど、たまたまミスってアイテムを投げた人がいるかもしれません。そんな方が実は石油王の可能性もあります。