Twitter APIとPandasを使ってオススメ推し力士を見つけてみた

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">＜大相撲名古屋場所＞ 「<a href="https://twitter.com/hashtag/%E6%8E%A8%E3%81%97%E5%8A%9B%E5%A3%AB?src=hash&amp;ref_src=twsrc%5Etfw">#推し力士</a>」キャンペーン。ご自身のInstagramもしくはTwitterに「推し力士の写真」と「<a href="https://twitter.com/hashtag/%E6%8E%A8%E3%81%97%E5%8A%9B%E5%A3%AB?src=hash&amp;ref_src=twsrc%5Etfw">#推し力士</a> + <a href="https://twitter.com/hashtag/%E6%8E%A8%E3%81%97%E5%8A%9B%E5%A3%AB%E3%81%AE%E5%90%8D%E5%89%8D?src=hash&amp;ref_src=twsrc%5Etfw">#推し力士の名前</a>（例：<a href="https://twitter.com/hashtag/%E7%99%BD%E9%B5%AC?src=hash&amp;ref_src=twsrc%5Etfw">#白鵬</a>）」をつけて投稿すると抽選で後日「直筆サイン入り手形」プレゼント！<a href="https://t.co/ZbFQW2wP7Y">https://t.co/ZbFQW2wP7Y</a>  <a href="https://twitter.com/hashtag/sumo?src=hash&amp;ref_src=twsrc%5Etfw">#sumo</a> <a href="https://twitter.com/hashtag/%E7%9B%B8%E6%92%B2?src=hash&amp;ref_src=twsrc%5Etfw">#相撲</a> <a href="https://t.co/0Qe1c1BKS0">pic.twitter.com/0Qe1c1BKS0</a></p>&mdash; 日本相撲協会公式 (@sumokyokai) <a href="https://twitter.com/sumokyokai/status/1015168482780966913?ref_src=twsrc%5Etfw">2018年7月6日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



# はじめに

ここ数年、大相撲が人気です。
しかし中には、顔や体付きがみんな同じで見分けがつかない…、また白鵬が優勝でしょ…、などの理由から、大相撲ブームにいまいち乗れていない人もいるのではないでしょうか。
[浦風親方が仰るよう](http://snug.city.nagoya.jp/features/002/)に、そんな方は「推し力士」を見つけることが大事だと思います。

「推し」の見つけ方は人それぞれだと思いますが、今回はデータ分析により「推し」を見つけてみます。

Twitter APIで各力士がどれだけ場所中につぶやかれたかを調べ、[前回](https://qiita.com/a0082273/items/1d800f260a82a8dcafb4)数値化した各力士の強さと比較することで、
強いのにあまり注目されていない「オススメ推し力士」を見つけることが出来ました。



# ツイートの取得

Twitter APIを使って、2018年7月場所の初日から千秋楽までにつぶやかれた、幕内力士名が含まれるツイートを取得しました。
（2018年7月場所は、横綱の白鵬・鶴竜・稀勢の里、新大関の栃ノ心が休場し、関脇の御嶽海が初優勝を飾った場所でした。詳しい結果は[このページ](https://sports.yahoo.co.jp/sumo/torikumi/hoshitori/?bashoId=201807)が分かりやすいです。）

[この記事](http://ailaby.com/twitter_api/)を元に、

```python
from pykakasi import kakasi
```

と、

```python
def makeNewCol(tweet):
    date_time = (tweet["created_at"])
    id = (tweet["user"]["screen_name"])
    name = (tweet["user"]["name"])
    profile = (tweet["user"]["description"])
    n_following = (tweet["user"]["friends_count"])
    n_followed = (tweet["user"]["followers_count"])
    n_tweets = (tweet["user"]["statuses_count"])
    addres = (tweet["user"]["location"])
    n_favorited = (tweet["favorite_count"])
    text = (tweet["text"])

    new_col = pd.Series([date_time, id, name, profile, n_following,
                         n_followed, n_tweets, addres, n_favorited, text],
                        index=["time", "id", "name", "profile", "n_following",
                               "n_followed", "n_tweets", "adress", "n_favorited","text"])

```

を追加し、

```python
if __name__ == '__main__':
kakasi = kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
conv = kakasi.getConverter()

keyword_list = [
                '鶴竜', '白鵬', '稀勢の里', '日馬富士',
                '豪栄道', '高安', '栃ノ心',
                '御嶽海', '玉鷲', '松鳳山',
                '正代', '琴奨菊', '千代の国', '阿炎', '貴景勝', '魁聖',
                '大翔丸', '嘉風', '千代大龍', '宝富士', '大栄翔',
                '千代翔馬', '旭大星', '妙義龍', '豊山', '千代丸',
                '錦木', '碧山', '阿武咲', '佐田の海', '荒鷲', '栃煌山',
                '朝乃山', '琴恵光', '隠岐の海', '石浦', '竜電',
                '北勝富士', '明生', '服部桜',
 ]

for keyword in keyword_list:
    keyword_romaji = conv.do(keyword)
    since = '2018-07-15'
    until = '2018-07-16'
    getter = TweetsGetter.bySearch(keyword+' since:'+since+' until:'+until)

    df = pd.DataFrame(columns=["time", "id", "name", "profile", "n_following",
                               "n_followed", "n_tweets", "adress", "n_favorited","text"])
    for tweet in getter.collect(total = 20000):
        new_col = makeNewCol(tweet)
        df.append(new_col, ignore_index=True)

    df.to_csv('output/'+keyword_romaji+since+'.csv')
```

この様に変更して、ツイートを取得しました。
下は、御嶽海というワードが含まれるツイートを15日分まとめて、フォロワー数の多い順に並べたものです。

![ 2018-08-20 18.38.23.png](https://qiita-image-store.s3.amazonaws.com/0/224315/f6158da6-ebcf-a184-2129-c00fabd8f615.png)


この例ではハム速のツイートが入ってしまっていますが、「bot」「ニュース」「公式アカウント」などがユーザー名やプロフィールに含まれるものは除き、できるだけ個人アカウントのツイートだけを対象にしています。
また、荒鷲というワードを含むツイートの中から、百獣戦隊ガオレンジャーの「孤高の荒鷲！ガオイエロー！」というように、相撲に関係ないツイートを取り除く面倒な作業をしました。
しかし、遠藤、勢、千代丸、石浦に関しては、相撲に関係ないツイートが多く、取り除くのが難しかった（やってられなくなった）ため、分析対象から外しました。

Twitter APIのgeocodeオプションを使って、愛知県体育館の中から投稿されたツイートを、力士名を含むものに限定せずに全て取得してみましたが、4ツイートしか取得出来ない日があるなど、惨憺たる結果でした。
[この記事](https://qiita.com/kenmatsu4/items/114f3cff815aa5037535)では位置情報ありのツイートは全体の1.1%、[この記事](https://www.slideshare.net/yuszk/sns-46106804)では0.3%だったらしいです。




# ツイート分析

Pandasを使ってツイートを分析しました。

まず、15日間の各力士名を含むツイート数の推移を見てみます。
一番左が初日、右が千秋楽です。

![ 2018-08-20 20.06.56.png](https://qiita-image-store.s3.amazonaws.com/0/224315/b42aa5f2-6626-39fe-df22-8c8c9eec5688.png)


御嶽海の優勝が決まった14日目が外れ値になっています。
御嶽海と休場力士を除いてみます。

![ 2018-08-20 20.07.37.png](https://qiita-image-store.s3.amazonaws.com/0/224315/3b57bac9-6b7d-944f-c18a-d684691fd384.png)


箱ひげ図も見てみます。

![ 2018-08-20 20.08.06.png](https://qiita-image-store.s3.amazonaws.com/0/224315/4210066a-d3ff-2504-2496-b173abf6f1b2.png)

金星をあげる等の特別な取組があった日は、ツイート数が普段の数倍にもなっているのが分かります。

普段の注目度（中央値）がいくら低くても、一回でも大きく注目されたこと（外れ値）がある力士は「推し」づらいです。
ミーハーだと思われては困ります。
15日間のツイート数の平均値と、[前回](https://qiita.com/a0082273/items/1d800f260a82a8dcafb4)数値化した強さを、スケールを揃えるために標準化して比べるのが「推し力士」を見つけるのにいいように思います。
グラフにしてみます。

![ 2018-08-20 20.09.22.png](https://qiita-image-store.s3.amazonaws.com/0/224315/fc45eb4c-07b9-e8ad-9cef-37f268ef65d3.png)


図の中央やや右辺りの北勝富士、阿武咲、千代大龍は強いのに、あまり注目されていない力士であることが分かります。
データ分析から分かった「オススメ推し力士」3人組です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/224315/c63c2c5d-4dd3-b2a1-29a3-d5ee04f3b1e3.jpeg" width=25%><img src="https://qiita-image-store.s3.amazonaws.com/0/224315/334f1fe1-9456-61c3-db22-e27060471a3e.jpeg" width=25%><img src="https://qiita-image-store.s3.amazonaws.com/0/224315/572f59c5-2cda-b374-fc8b-017fbde9e633.jpeg" width=25%>
（左：北勝富士、中央：阿武咲、右：千代大龍　[日本相撲協会公式サイト](http://www.sumo.or.jp/ResultRikishiData/search/)より引用）


もっと大穴的な…、という方にはグラフ右端の妙義龍を「推し力士」にすることをオススメします。
この場所9勝6敗という好成績を収めながらも、幕内力士の中で最もツイート数が少ない力士です。

![myougiryu.jpg](https://qiita-image-store.s3.amazonaws.com/0/224315/6ce0410e-3745-c8b9-2a66-cf1bf955c55e.jpeg)
（妙義龍　[日本相撲協会公式サイト](http://www.sumo.or.jp/ResultRikishiData/search/)より引用）


同じくらいの強さであり、ツイート数も多くない力士と比べても、断然ツイート数が少ないことが分かります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/224315/0b69f4a7-3edf-bba1-c781-795a4288e832.png" width=35%>

妙義龍に心惹かれてきました。
会員になれば手形などがもらえる[妙義龍倶楽部](http://www.myogiryu-sumo.com/)という後援会もあるようです。




# まとめ

北勝富士、阿武咲、千代大龍が「オススメ推し力士」。
妙義龍が「大穴オススメ推し力士」。

コードは全て[github](https://github.com/a0082273/sumo_twitter)にあります。プログラミング、相撲、ともに初心者なのでご教授いただけたらうれしいです。