*記事に掲載されているコードは2023年1月現在問題なく起動します。(検証済み)
こんにちは Nocky(のっきー)です!
普段はIT企業でBIz兼マーケティング担当として働いています。業務でプログラミングに触れなければならない状況に落入り、そこからプログラミングを始め、現在はプログラミングをマーケティングに活用しようと日々、学んでいます!!
自分のように【文系、非エンジニア、初心者】の方でもプログラミングを活用していきたいと思っている方は多いのではないでしょうか?
この記事では私のような【文系、非エンジニア、初心者】の方にもわかるように(昔の自分でも分かるように)噛み砕いて書いています!
ここから本題です!
今回の記事ではTwitter APIを使ってツイートを取得する方法をご紹介します!
ツイートを取得するためには事前にTwitter APIの申請を行い、APIにアクセスするためのKeyを取得する必要があります!
Twitter APIの申請については下記の記事をご参照ください!
自分で言うのもなんですが、結構わかりやすくまとめられていると思います!
APIを使って取得する情報
この記事で取得する情報は「ツイート情報」と「ユーザー情報」です。
これらの情報を取得していきます。 結構な情報量を取得することが可能です!
ツイートを取得するPythonのコード
ツイートを取得するためのPythonの全体コードは下記になります。
コピペして、APIにアクセスするためのキー(4つ)、検索するキーワード、検索数などをご自身で調整してください。(2022年2月 情報更新しました。)
# ライブラリのインポート
import tweepy
from datetime import datetime,timezone
import pytz
import pandas as pd
# Twitterの認証
# 取得したキーを格納
API_KEY = "***********************"
API_SECRET = "***********************"
ACCESS_TOKEN = "***********************"
ACCESS_TOKEN_SECRET = "***********************"
# Tweepy設定
# TwitterAPI認証
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
# アクセストークン設定
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# ”wait_on_rate_limit = True” 利用制限にひっかかた時に必要時間待機する
api = tweepy.API(auth ,wait_on_rate_limit = True)
# 検索条件の設定
search_word = 'マーケティング'
item_number = 50
#検索条件を元にツイートを抽出
tweets = tweepy.Cursor(api.search_tweets,q=search_word,lang='ja').items(item_number)
#関数: UTCをJSTに変換する
def change_time_JST(u_time):
#イギリスのtimezoneを設定するために再定義する
utc_time = datetime(u_time.year, u_time.month,u_time.day, \
u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc)
#タイムゾーンを日本時刻に変換
jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo"))
# 文字列で返す
str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S")
return str_time
#抽出したデータから必要な情報を取り出す
#取得したツイートを一つずつ取り出して必要な情報をtweet_dataに格納する
tw_data = []
for tweet in tweets:
#ツイート時刻とユーザのアカウント作成時刻を日本時刻にする
tweet_time = change_time_JST(tweet.created_at)
create_account_time = change_time_JST(tweet.user.created_at)
#tweet_dataの配列に取得したい情報を入れていく
tw_data.append([
tweet.id,
tweet_time,
tweet.text,
tweet.favorite_count,
tweet.retweet_count,
tweet.user.id,
tweet.user.screen_name,
tweet.user.name,
tweet.user.description,
tweet.user.friends_count,
tweet.user.followers_count,
create_account_time,
tweet.user.following,
tweet.user.profile_image_url,
tweet.user.profile_background_image_url,
tweet.user.url
])
#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
'ツイートID',
'ツイート時刻',
'ツイート本文',
'いいね数',
'リツイート数',
'ID',
'ユーザー名',
'アカウント名',
'自己紹介文',
'フォロー数',
'フォロワー数',
'アカウント作成日時',
'自分のフォロー状況',
'アイコン画像URL',
'ヘッダー画像URL',
'WEBサイト'
]
#tw_dataのリストをpandasのDataFrameに変換
df = pd.DataFrame(tw_data,columns=labels)
#CSVファイルに出力する
#CSVファイルの名前を決める
file_name='tw_data.csv'
#CSVファイルを出力する
df.to_csv(file_name,encoding='utf-8-sig',index=False)
Pythonのコード構成は以下のようになっています。
- ライブラリのインポート
- Twitter APIのアクセス認証
- 検索条件の設定&ツイートの取得
- 時間を日本時間に変更
- ツイート情報の抽出
- pandasのDataFrameに変換
- CSVファイルに出力
Pythonのコードの説明
ここからは各項目ごとに詳しくコードを見ていきます。
ライブラリのインポート
import tweepy
from datetime import datetime,timezone
import pytz
import pandas as pd
Twitterのツート取得で必須のライブラリが「tweepy」です。 このライブラリを使うことで、ツイート情報を数行のコードで取得できます。
ライブラリのインストールがまだの方はターミナルで「pip install tweepy」と入力してインストールしておいてください。
Google Colaboratoryで実行される方は「!pip install tweepy」でインストールできます。
※Google Colaboratoryのノートで ライブラリをインストールする際は文の初めに「!」を入力すれば問題ないです。
他のライブラリの以下の目的でインポートしています。インストールされてないようでしたら、上記と同じやり方でインストールしてください。
- datetime => 時刻を扱う
- pytz => タイムゾーンの変更を行う
- pandas => 取得データを加工する
Twitter APIへのアクセス認証
# Twitterの認証
# 取得したキーを格納
API_KEY = "***********************"
API_SECRET = "***********************"
ACCESS_TOKEN = "***********************"
ACCESS_TOKEN_SECRET = "***********************"
# Tweepy設定
auth = tweepy.OAuthHandler(API_KEY, API_SECRET) # Twitter API認証
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) # アクセストークン設定
# ”wait_on_rate_limit = True” 利用制限にひっかかた時に必要時間待機する
api = tweepy.API(auth ,wait_on_rate_limit = True)
この部分ではTwitter APIへのアクセス認証を行います
この工程で誰がAPIにアクセスしようとしているのか、アクセスする権限があるのかTwitter側でチェックしています。
「********」の部分に、事前に取得したキーを入力してください。
※””で挟むことをお忘れたなく! 初学者の方が見落としがちな点です。(経験談です。)
これでTwitter APIを使う準備ができました!
検索条件の設定&ツイート取得
# 検索条件の設定
search_word = "マーケティング"
item_number = 50
#検索条件を元にツイートを抽出
tweets = tweepy.Cursor(api.search_tweets,q=search_word,lang='ja').items(item_number)
たまに「search_tweets」がエラーになる場合があります。その際は下記で実行してみください
tweets = tweepy.Cursor(api.search,q=search_word,lang='ja').items(item_number)
※Google colaboratoryだと「api.search」でないと実行できなかったりします。私だけかもですが。。
この数行でツイートを取得ができます!
検索条件として以下の2つを入力してください。
検索条件で取り出されたツイートは「tweets」という変数に代入されています。
ツイートを取得にはいくつか制限があります。
制限についてはこちらの公式ドキュメントを参照ください。
時間を日本時間に変更
def change_time_JST(u_time):
#イギリスのtimezoneを設定するために再定義する
utc_time = datetime(u_time.year, u_time.month,u_time.day, \
u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc)
#タイムゾーンを日本時刻に変換
jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo"))
# 文字列で返す
str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S")
return str_time
ツイートの投稿日時とアカウントの作成日時がイギリス時間で抽出されるため、この部分ではツイートの時間情報を日本時間表記にするための関数も組んでいます。
欲しい情報を抽出
tw_data = []
for tweet in tweets:
#ツイート時刻とユーザのアカウント作成時刻を日本時刻にする
tweet_time = change_time_JST(tweet.created_at)
create_account_time = change_time_JST(tweet.user.created_at)
#tweet_dataの配列に取得したい情報を入れていく
tw_data.append([
tweet.id,
tweet_time,
tweet.text,
tweet.favorite_count,
tweet.retweet_count,
tweet.user.id,
tweet.user.screen_name,
tweet.user.name,
tweet.user.description,
tweet.user.friends_count,
tweet.user.followers_count,
create_account_time,
tweet.user.following,
tweet.user.profile_image_url,
tweet.user.profile_background_image_url,
tweet.user.url
])
この部分では、
検索条件で取り出されたツイートが代入されている「tweets」という変数から必要な情報を取り出していきます。
変数「tweets」には複数ツイートの情報が入っているので、これをfor文で一つ、一つ取り出して「tweet」という変数に情報を割り当てている作業をしています。
変数「tweet」からの情報の取り出し方は、主に2通りです。
tweet.text => ツイート内容を取得
tweet.favorite_count => ツイートのいいね数を取得
tweet.user.name => ユーザーのアカウント名を取得
tweet.user.description => ユーザーの自己紹介文を取得
上記のように情報が取得可能です。
めっちゃ簡単です。
取り出した情報を「tw_data」という名前の配列に入れていきます。
tweet_time = change_time_JST(tweet.created_at)
create_account_time = change_time_JST(tweet.user.created_at)
先ほど、紹介した、日本時間にする関数をこの2行で使い、ツイート時刻とアカウント作成日時を日本時間に変更しています。
pandasのDataFrameに変換
#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
'ツイートID',
'ツイート時刻',
'ツイート本文',
'いいね数',
'リツイート数',
'ID',
'ユーザー名',
'アカウント名',
'自己紹介文',
'フォロー数',
'フォロワー数',
'アカウント作成日時',
'自分のフォロー状況',
'アイコン画像URL',
'ヘッダー画像URL',
'WEBサイト'
]
「tw_data」はPythonの「リスト」形式です。
このリスト形式では非常に情報の見にくいので、pandasの「DataFrame」という形式に変えていきます。
Excelの「表」のように可視化できます。
また、DataFrameに変換することで、データの統合や欠損値の確認が楽になります。
df = pd.DataFrame(tw_data,columns=labels)
この一行でリストからDataFrameへの変換が可能です。
「columns = labels」この部分で1行目のカラム名の定義を挿入することができます。
csvファイルに出力
#CSVファイルの名前を決める
file_name='tw_data.csv'
CSVのファイル名を定義します。
#CSVファイルを出力する
df.to_csv(file_name,encoding='utf-8-sig',index=False)
最後の一行でツイートの情報が保存されているこDataFrameのデータをCSVに変換させてます。
CSVは実行しているPythonファイルがある場所に保存されます。
to_csv()の括弧の中 の意味はそれぞれ以下の通りです。
- file_name => ファイル名
- encoding=‘utf-8_sig => 日本語の文字化けを防ぐ
- index = False => CSVファイルの1列目にインデックスを入れない
PCの機種によって文字化けしてしまうことがあるようです。その場合は「encoding= ‘Shift jis’」や「encoding= ‘utf-8’」などを試してみてください!
終わり
いかがでしたでしょうか!
全体のコードを見ると何がなんだかわからないことも項目ごとに分けることで、コードの意味がなんとなくわかるようになりますよね! 私も書きながら、復習になりました!
この記事が皆さんのツイート分析に役立てば、 嬉しいです。
地域トレンドを取得する方法についても記事でまとめているので、興味のある方は是非!
TwitterのAPI以外にもAPIを活用して、色々なことができます!
他のAPIの活用を学ぶなら、下記のUdemyの講座などもおすすめです!
おまけ:検索オプション一覧
# 検索条件の設定
search_word = "マーケティング"
ツイート分析におすすめな検索オプションを紹介します。
search_word = “キーワード”の部分に+の条件をつけることができます。
使いこなせば、自分の欲しいツイートデータをpythonのコードを書き換えることなく、取得することができます。是非、活用してみてください!
検索キーワード | 説明 |
キーワード -除外するキーワード | -の後に続くキーワードを除外して検索 |
キーワード min_faves:100 | いいねの数が100以上のツイートだけ |
キーワード min_retweets:100 | 100リツイート以上のツイートを検索 |
from:ユーザーネーム | 特定のユーザーのツイートを検索 |
キーワード1 OR キーワード2 | ブログもしくはブロガーのキーワードを検索 |
“キーワード” | ” “で囲われた文字列に完全一致するツイートを検索 |
おすすめ記事
Pythonを学べるおすすめのUdemy講座について下記の記事で紹介しています!
是非、参考になさってみてください!