LoginSignup
3
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-20

はじめに

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

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

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

ツイートの取得

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

この記事を元に、

from pykakasi import kakasi

と、

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"])

を追加し、

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

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

Twitter APIのgeocodeオプションを使って、愛知県体育館の中から投稿されたツイートを、力士名を含むものに限定せずに全て取得してみましたが、4ツイートしか取得出来ない日があるなど、惨憺たる結果でした。
この記事では位置情報ありのツイートは全体の1.1%、この記事では0.3%だったらしいです。

ツイート分析

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

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

 2018-08-20 20.06.56.png

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

 2018-08-20 20.07.37.png

箱ひげ図も見てみます。

 2018-08-20 20.08.06.png

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

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

 2018-08-20 20.09.22.png

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


(左:北勝富士、中央:阿武咲、右:千代大龍 日本相撲協会公式サイトより引用)

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

myougiryu.jpg
(妙義龍 日本相撲協会公式サイトより引用)

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

妙義龍に心惹かれてきました。
会員になれば手形などがもらえる妙義龍倶楽部という後援会もあるようです。

まとめ

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

コードは全てgithubにあります。プログラミング、相撲、ともに初心者なのでご教授いただけたらうれしいです。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6