「にわかプログラマー、Twitterで”安倍晋三”に挑む?!」〜その①データ取得編〜
みなさんどんな毎日を過ごしているでしょうか?
私は最近家の近所で自転車に轢き殺されそうになりました()
こんにちは、こんばんは。紅茶です。
今回は前回のnoteで告知していた通り
「にわかプログラマー、Twitterで”安倍晋三”に挑む?!〜その①データ取得編〜」と題して
私がTwitter解析を行ったのに際してぶつかった『初心者殺しの壁』について解説していこうと思います。
何を隠そうこの私、Twitter解析が「人生初プログラミングで行った事」なんです!そして私を自然言語処理の世界に導いてくれた存在といっても過言ではありませんね。やっぱり、Twitterって偉大ですね()
前置きはさておき、そろそろ始めたいと思います!
1 準備
まずはTweetを収集するために準備を行う過程ですね。Twitter分析ですからTwitter上の情報を持ってきて分析するわけですが、そのためには分析対象のデータが必要ですね。
Twitter分析の対象データとしてまず有力なのはこの辺りでしょうか...
・Tweet本体(テキスト)
・Tweetした時間
メインになるのはこの2つだと思うので、最初はこの2データを使って行う分析をしましょう。
(慣れてきたらRT周りのデータも扱えるようになると思います)
肝心のどうやってTwitterのデータを収集するのかという話ですが、それはTwitter APIと呼ばれるものを使います!(APIの説明はこちら)
一応堅い説明を載せておきます。
アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)とは、広義の意味ではソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。
-- Wikipediaより引用
私を含め、なんだそれって方は
「Twitter APIを使うとTwitterとプログラムを結びつけてデータの収集ができる!」
とでも思っておきましょう。
そろそろコード出してくれって頃合いだと思うので
先に進みますが、ここで
『初心者の初心者による初心者のためのアドバイス』を一つ
「最初から動けるコードがかけるわけはない
コピペだ。さぁ、コピペをしよう」
です。笑
全く威張れることではないのですが、私はコピペ推奨派です。
見知らぬ土地で地図がないと目的地に最短で到着するのが難しいのと同じように、最初から進む道がわからなければ何にもならないです。
ならば、とりあえずコードを動かしてから
「ここはなんでこうやって動くんだろう」とか考えていったほうが身につく気がします!(現に私はそうやって勉強してましたし、今もそうしています)
それにどうせ後々自分のやりたいことに沿って進むうちに、コピペできる材料は無くなりますしね()
さて、話を戻すとTwitterのAPIを使うためには
『「キー」と呼ばれる4つの認証のための文字列』が必要なんです。
以下の4つです。
・CONSUMER_KEY
・CONSUMER_SECRET
・ACCESS_TOKEN
・ACCESS_TOKEN_SECRET
こちらを取得するにはTwitter Developer アカウントを取得する必要があります。
こちらのリンクを参考に取得してください!
2 ツイートの収集
さていよいよコードを書いて本格的にツイート収集をしていきます。
コードの全体がこちらです。
解説は後述するので、まずは以下のコードを実行してみて下さい!
// import module
from requests_oauthlib import OAuth1Session
import json
// API keys
CK = <先ほど入手したCONSUMER_KEY>
CS = <先ほど入手したCONSUMER_SECRET>
AT = <先ほど入手したACCESS_TOKEN>
ATS = <先ほど入手したACCESS_TOKEN_SECRET>
twitter = OAuth1Session(CK, CS, AT, ATS)
// post request
url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
params = {'screen_name': "AbeShinzo", 'count':5}
res = twitter.get(url, params = params)
// read result
timelines = json.loads(res.text)
for line in timelines:
print(line['user']['name']+'::'+line['text'])
print(line['created_at'])
print("************************************")
どうでしょうか?
以下のような結果が返ってきていたら成功です!
<解説>
抑えたい箇所はコード中の以下2パートです。
・ // post request
・ // read result
①「post request」
<ポイント>
・変数「url」
・変数「params」
<変数「url」>
Twitter の API は urlリクエスト を送り、操作します。
その url は今回の場合だと「https://api.twitter.com/1.1/statuses/user_timeline.json」になります。
こちらを変数「url」へ格納しています。
<変数「params」>
また、変数「params」では dict型 でAPIリクエストの設定を行っています。
リクエストによって異なった設定項目があります。
例えば、今回のユーザーのツイートを取得するリクエストにおいては
「count」:取得するツイート数の設定 (int型)
「screen_name」:ターゲットユーザー (例:「@abc」の「abc」)
「include_rts」:RTを含めるか否か (bool型)
などと言ったオプションが選択可能です。
Twitter API では操作目的に応じて別のurlリクエストを送信します。
こちらのサイトではTwitter APIを使用し行えることと、それぞれのリクエストの設定項目をまとめてくださっているので参考にすると良いかもしれません!
②「read result」
<ポイント>
・変数「timeline」への変換
・変数「timeline」からのデータの取得
<変数「timeline」への変換>
ポイントはこの1行です!
timelines = json.loads(res.text)
requestsライブラリを用いてTwitter APIを叩き、受け取った変数「res」を「.text」 を用いてテキストに変換します。その後、「json.loads()」を使いdict型の配列(list)を生成しています。
ここで再び
『初心者の初心者による初心者のためのアドバイス』を一つ
『コード中の複雑な箇所は
毎処理毎処理とりあえず「print」をしよう』
動きを理解するためには変形過程を見るのが大事だと思っているので
ここで一度「res」「res.text」「json.loads(res.text)」「timeline」をprintして中身を見てみると理解が深まると思います!
<変数「timeline」からのデータの取得>
先ほどの変形の通り、変数「timeline」はdict型の配列(list)になっています。ここでは配列の1要素が1ツイートに該当しています。
そのため for文 を用いて dict型 の key にアクセスをして value を取得しています。
ここでの key は先ほど共有したこちらのサイトの「レスポンスボティ(JSON)」を参考に指定できると思います。
例として、今回のコードでは「Twittterアカウント名」「Tweet内容」「Tweetされた時間」を取得しています。
for line in timelines:
print(line['user']['name']+'::'+line['text'])
print(line['created_at'])
print("************************************")
<key指定例>
line['user']['name']:ユーザー名
line['text']:ツイート内容
line['created_at']:ツイートした時間
他にも....
line['retweet_count']:RT数
line['user']['id']:ユーザーのID
line['user']['screen_name']:ユーザーのスクリーンネーム
3 まとめ
・全てはコピペから始めよう
・Twitter APIを使うためには4つの認証のための文字列が必要
・結果はdict型なのでkey指定でデータ取得
・変形が複雑な箇所は「print」連打
今回はTwitter APIを用いてリクエストを行い、結果を受け取ってその結果から必要なデータを取得するところまで行いました。
「その②」ではいよいよ取得したデータを用いて自然言語処理などといった解析を行なっていきたいと思います!
最後に、初心者の方で私の記事を読んでこの部分をもっと説明して欲しいというところがありましたらコメントで是非教えて下さい!
ツワモノからのコードの改良についてのコメントもお待ちしてます。笑
次回予告
「にわかプログラマー、Twitterで”安倍晋三”に挑む?!
〜その②データ解析編〜」
それではまた次の記事でー
参考文献
・Twitterアプリケーションの作成(Consumer key、Consumer secret、Access token、Access token secretの確認方法)
・GET statuses/user_timeline - ユーザータイムラインを取得する