【Python】Wordcloudを使って東京の試合を一喜一憂する

Python

ついにJリーグが再開!

東京は第2節柏戦で1-0で勝利しましたが、第3節の川崎戦ではボコボコにやられてしまいました…。

そこで今回は再開の喜びと勝利の喜びが混じったつぶやきがあるであろう第2節時点と、完膚なきまでに叩きのめされてしまった第3節のつぶやきをWordcloudを使って比較してみます。

悔しさの余韻がめちゃめちゃ残っていますが、Pythonの勉強も兼ねてやってみます。

環境準備

今回はMecabという形態素解析できるツールをPython環境で使用できるようにします。

参考になる記事はこちらから。今回はつぶやき結果がメインなので環境のほうはサラッと流します。(すいません(;^_^A)

PythonとMeCabで形態素解析(on Windows) - Qiita
はじめに Windowsでの形態素解析環境の構築を手伝うことが多くなってきたので、 一連の流れをまとめて備忘録的に書き留めておくことにしました。 以下、Python上で形態素解析器MeCabを使って 形態素の一覧出力が出来るよ...

MecabでPython環境が整ったら、Twitterのつぶやきを収集→適当なテキストファイルに保存→形態素解析して多くつぶやかれているワードを抽出→可視化してみる、といった流れでやってみようと思います。

コード

つぶやき収集

今回はTwitterAPIは使わずにつぶやきを取り込みます。出力先はtweets.txt。setQuerySearchで探したいワード。setSince、setUntilで開始日終了日を設定します。

参考サイトはこちら

GetOldTweets-python 1週間以上前の過去ツイートを取得しちゃう#2 - Qiita
Inrtoduction はにおかさいです。 ツイッターで過去ツイートを分析したいと思ったのですが、過去のツイートを取得するすべをなかなか思いつきませんでした。日本語でググっても意図したものは発見せず。 そこで、Github...
# -*- coding: utf-8 -*-
import got3 as got
import json
import codecs
import sys

def print_tweets(tweets):
    print("取得件数:", len(tweets))
    f = codecs.ope n('tweets.txt', 'w', 'utf-8')
    for tweet in tweets: 
        f.write(str(tweet.date))
        f.write('\n')
            

# 期間を指定して取得
tweetCriteria = got.manager.TweetCriteria().setQuerySearch("#fctokyo").setSince("開始日付").setUntil("終了日付").setMaxTweets(5000)
tweets = got.manager.TweetManager.getTweets(tweetCriteria)
print("---------------------------------")
print("期間を指定して取得")
print_tweets(tweets)

wordcloudで解析

stop_wordsで「あれ」とか「それ」といったノイズ単語を除外していきます。読み込むファイルを聞かれるので、先程作成したtweets.txtを指定します。

参考サイトはこちら

Python Twitterからツイートを取得してテキスト分析(wordcloudで見える化) - Qiita
本投稿の内容 pythonでtwitterのつぶやきを取得してその内容を見える化します。 Twitterのツイートデータをtweepyを使用して取得してテキストに出力 MeCabを使用して形態素解析を行い、名詞、動詞、形容詞...
import MeCab
import matplotlib.pyplot as plt
import csv
from wordcloud import WordCloud

def analyze_tweet(dfile):

    fname = r"'"+ dfile + "'"
    fname = fname.replace ("'","")

    mecab = MeCab.Tagger("-Ochasen")

    words=[]

        with o pen (fname, 'r',encoding="utf-8") as f:
        reader = f.readline()

        while reader:
            node = mecab.parseToNode(reader)

            while node:
                word_type = node.feature.split(",")[0]

                if word_type in ["名詞", "動詞", "形容詞", "副詞"]:

                words.append(node.surface)

                node = node.next

            reader = f.readline()

    font_path = r"C:\WINDOWS\Fonts\HGRGE.TTC"

    txt = " ".join(words)

    stop_words = [ 'https','てる','co','the','of','Summit','試合','今日','選手','FC','Tokyo','fctokyo','東京','Japan','RT']

    wordcloud = WordCloud(background_color="black",font_path=font_path, stopwords=set(stop_words),
        width=800,height=600).generate(txt)

    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

if __name__ == '__main__':

    print ('====== Enter Tweet Data file =====')
    dfile = input('>  ')

    analyze_tweet(dfile)

結果比較

柏戦

リーグ再開を待ち望む声と、勝ったため、ポジティブ系の単語がよく出ています。ディエゴは前半負傷交代した為、心配するつぶやきが多かったのではないかと思います。

川崎戦

結果として前半と後半で内容がガラリと変わっていたことを指摘するつぶやきが多かったのかと思います。こうやって見ると思いの外ネガティブ系の単語は出ていない印象でした。

そしてやはりディエゴの存在はデカい…。

まとめ

サポーターそれぞれ想いはありますが、こうやって視覚化すると試合を見ていなくても、なんとなく試合状況を妄想できるので、面白いなぁと思いました。

コメント

Copied title and URL