この記事はTokyo City University Advent Calendar 2021の20日目の記事です。
前回の記事は、BOBさんの、社会メディア学科にすげー教授がやってきた!+おまけ
でした!!!!
電気科しか教授知らんのでめちゃくちゃ面白かった!!!バーキン最近行ってないのでいきたい
みなさんこんにちは。2年ぶりに参戦します。電気電子通信工学科3年のたかと申します。B3になって研究室に配属されて、教授っちに詰められたりはんだ付けに追われたり忙しくも楽しい日々を過ごしております。
さて、私は2年前もなんやかんやで技術つよつよの先輩の仲間入りをしたい!!という思いから、ショートカットキーすら知らないITリテラシーゼロの状態から色んな人に助けを借りながらなんやかんや頑張って背伸びをして技術記事っぽい何かを書いた気がします。
というわけで今回も大体同じようなことをやります。まあ2年前のことなんて誰も覚えてないしええやろ(技術的に何も成長してない)
さて突然ですが、みなさん、今年一番のニュースといえばなんでしょうか。
もちろん
衆議院選挙!!!!!!!!!
ですよね!!!!!!!!(違う)
さてさてみなさん、政治家ってどうやって選びますか。
勉強にウマ娘に忙しいみなさんは、きっと政治家のマニフェストなんていちいち読んでられないでしょう。ニュースも最近は色んなメディアが色んな記事を乱立させていて何を信じていいかよくわからない。メロスには政治がわからぬ(投票には行こうね♡)(僕は忘れてて投票終了30分前に行きました)
ならば。
######ツイッターを分析するのが一番では?????????
というわけで今回はツイッターからテキストデータを適当に引っ張ってきて、適当に解析してみたという記事になります。解説記事というよりかは、昨今流行りのデータサイエンスってこんなことできるんだな〜ほえ〜みたいな紹介記事になります。n番煎じだとかそーゆーのはさておき、早速行ってみましょう。
#Twitter APIを使えるようにしよう!!#
まず、twitterのテキストデータを持ってくるにはtwitter社に申請して許可をいただかないといけません。
申請といっても大したことはしません。ワタシアブナイヒトジャナイヨ、という旨を書くだけです。
なんか英文を書いたりとか色々面倒な作業ですが、下記の記事の通りやれば20分くらいで終わります。
参考にさせていただきました
https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/
#秘密鍵的な何かをなんだかんだする!!#
twitterのアカウントでログインし、アクセストークンとかそこらへんを取得します。
ごめんなさいここらへんの話が全くわからないので、解説は省略します。
import tweepy
import datetime
import pandas as pd
import re
# TweepyAPI KEY
CONSUMER_KEY = "**********************"
CONSUMER_SECRET = "*********************************"
ACCESS_TOKEN = "***************************************"
ACCESS_TOKEN_SECRET = "**************************"
# tweepyの設定
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
参考にさせていただきました
https://qiita.com/bakira/items/00743d10ec42993f85eb
#Pythonで分析
さてここまできたらあとは好き勝手分析するだけです。単語の頻度を調べるもよし、時系列でツイート頻度とかをグラフにして比較するもよし。データフレーム作ってそこで色々いじれます。
というわけでとりあえず最新ツイートを50件だけ取ってきてデータフレームにします。
今回使わせていただくアカウントは政治家ツイッタラーとしておそらく日本一有名なあの人です。
#id指定したユーザのタイムラインのツイートをdataframeに格納
columns_name=["TW_TIME_JPN","TW_TEXT","FAV","RT"]
tweet_id = "@konotarogomame"
tweet_data = []
for tweet in tweepy.Cursor(api.user_timeline,screen_name = tweet_id,exclude_replies = False).items(50):#50ツイート分のデータを取得
if not "RT @" in tweet.text[0:4]:
text = re.sub("http.*$","",tweet.text)
text = text.replace("https","").replace("http","")
tweet_data.append([tweet.created_at+datetime.timedelta(hours=9),text.replace('\n',''),tweet.favorite_count,tweet.retweet_count])
df = pd.DataFrame(tweet_data,columns=columns_name)
df.head()
結果
いい感じに取れましたね。引用RTすると自動的に取れてしまう元ツイのurlとか、replace使って省いてます。コードが汚いのはゆるして
最新ツイート順に並んでますけど、一応いいね数とRT数も取ってるので、そこから一定のバズったツイートだけ集めたりもできます。でもこの人常に1000いいね行ってるんですね。すごい。
ちなみに他アカウントをRTしたやつは外してます。引用RTは入ってる。たぶん(ここらへんも色々設定できた)
さてこっから色々分析手法はあるのですが、僕はそんなに詳しくないのでとりあえず今回はwordcloudというやつでで可視化していこうと思います。
wordcloudはテキストデータを一枚の画像で表すやつです。
import pandas as pd
import re
import MeCab
import matplotlib.pyplot as plt
from wordcloud import WordCloud
konotaro_tweetdata = df.TW_TEXT
mecab = MeCab.Tagger("-Ochasen")
words=[]
for text in konotaro_tweetdata:
node = mecab.parseToNode(text)
while node:
word_type = node.feature.split(",")[0]
#取得する単語は、"名詞", "動詞", "形容詞", "副詞"
if word_type in ["名詞", "動詞", "形容詞", "副詞"]:
words.append(node.surface)
node = node.next
txt = " ".join(words)
stop_words = ["さん","する","ところ","なっ","やつ"]
FONT_PATH = "../python_tenkinoko/data/ipaexg.ttf"
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")
結果
めっちゃ政治家って感じの結果ですね。あと食べるってワードが出てるあたり色々飯の画像あげてそうですね。
とまあこんな感じでTwitter APIとPythonでテキストマイニングやってみた話でした!
Python流行ってるけどなにやったらいいかわからん人はここらへんからやると敷居低くて個人的にはおすすめです。
明日は、ケーさんの、 初めてのAzure or WindowsUpdateで困ったあなたへ
です。
よりによってつよつよの人が次の日...ゆるして..あと就活お疲れ様でございます。
以上!!!!