ツイート一覧を取得しよう
所要時間:20分
次に、ツイッターIDを入れると、そのIDのツイートを取得できるようにコードを実装していきましょう。
pandasのインストール
データを表形式で扱うために、pandasというライブラリを利用します。
まずは、ライブラリをインストールします。
pip install pandas
インストールしたら、twitter.pyで、ファイルをインポートしましょう。
ツイートの取得
さて、さっそくツイートを取得する関数を実装します。
ツイッターID(screen_name)を入れると、Pandasのデータフレーム形式でツイート一覧が取得できるような関数を実装します。
最終的には、以下のようなコードになります。
def get_tweets_df(user_id):
columns = [
"tweet_id",
"created_at",
"text",
"fav",
"retweets"
]
tweets_df = pd.DataFrame(columns=columns) #1
for tweet in tweepy.Cursor(api.user_timeline,screen_name = user_id, exclude_replies = True).items(): #2
try:
if not "RT @" in tweet.text: #3
se = pd.Series([ #4
tweet.id,
tweet.created_at,
tweet.text.replace('\n',''),
tweet.favorite_count,
tweet.retweet_count
]
,columns
)
tweets_df = tweets_df.append(se,ignore_index=True) #5
except Exception as e:
print (e)
tweets_df["created_at"] = pd.to_datetime(tweets_df["created_at"]) #6
return tweets_df
関数の定義
まず、関数の定義を行います。
def get_tweets_df(screen_name):
return True
テーブルの定義
次に、Pandasで列を定義します。
取得するデータは、以下のようになります。
列名 | 概要 | 例 |
tweet_id | ツイートのID | 2840859504 |
created_at | ツイート作成日 | 2019-02-01 |
text | ツイート内容 | スタバなう |
fav | いいね数 | 10 |
retweets | リツイート数 | 10 |
まず、配列に列名を指定し、pandasのデータフレームメソッドでデータフレームを作成します。
def get_tweets_df(screen_name):
columns = [ #列名を定義
"tweet_id",
"created_at",
"text",
"fav",
"retweets"
]
tweets_df = pd.DataFrame(columns=columns) #データフレームの作成
return True
ツイッター検索
Twitter APIから、ユーザータイムラインを検索します。取得したツイートをfor文で回して、一つ一つ取り出していきます。
def get_tweets_df(screen_name):
columns = [
"tweet_id",
"created_at",
"text",
"fav",
"retweets"
]
tweets_df = pd.DataFrame(columns=columns)
for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items(): #ツイッター検索
return True
取得したデータを行(Series)に追加して、データフレームに代入
以下の部分で、取得したツイートの値をSeriesに追加し、さらにデータフレームにSeriesを追加します。
def get_tweets_df(screen_name):
columns = [
"tweet_id",
"created_at",
"text",
"fav",
"retweets"
]
tweets_df = pd.DataFrame(columns=columns)
for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items():
try:
if not "RT @" in tweet.text: #リツイートは覗く
se = pd.Series([ #APIから取得した値を列名に入れる
tweet.id,
tweet.created_at,
tweet.text.replace('\n',''), #改行を削除する
tweet.favorite_count,
tweet.retweet_count
]
,columns #列名を指定
)
tweets_df = tweets_df.append(se,ignore_index=True) #データフレームに行を追加
except Exception as e:
print (e)
return True
日付をdatetime型に変換し、データフレームをリターン
取得したツイートの日時を、datetime型に変換します。
これを行わないと、のちほどデータの集計ができません。
さっそく書いていきます。
def get_tweets_df(screen_name):
columns = [
"tweet_id",
"created_at",
"text",
"fav",
"retweets"
]
tweets_df = pd.DataFrame(columns=columns)
for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items():
try:
if not "RT @" in tweet.text:
se = pd.Series([
tweet.id,
tweet.created_at,
tweet.text.replace('\n',''),
tweet.favorite_count,
tweet.retweet_count
]
,columns
)
tweets_df = tweets_df.append(se,ignore_index=True)
except Exception as e:
print (e)
tweets_df["created_at"] = pd.to_datetime(tweets_df["created_at"]) # datetime型に変換
return tweets_df #データフレームをreturnする
動作するか確認
実際に動くかどうか、以下のようにコードを書いてみましょう。
def get_tweets_df(screen_name):
columns = [
"tweet_id",
"created_at",
"text",
"fav",
"retweets"
]
tweets_df = pd.DataFrame(columns=columns)
for tweet in tweepy.Cursor(api.user_timeline,screen_name = screen_name, exclude_replies = True).items():
try:
if not "RT @" in tweet.text:
se = pd.Series([
tweet.id,
tweet.created_at,
tweet.text.replace('\n',''),
tweet.favorite_count,
tweet.retweet_count
]
,columns
)
tweets_df = tweets_df.append(se,ignore_index=True)
except Exception as e:
print (e)
tweets_df["created_at"] = pd.to_datetime(tweets_df["created_at"]) # datetime型に変換
return tweets_df #データフレームをreturnする
print (get_tweets_df("manajob_jp"))
実行すると、ユーザーの過去ツイートが取得できるはずです。
次に、これらのツイートのデータを集計して、
- 日付ごとにいいね数とリツイート数を合計する
- リツイート数が多いもの順からソートする
といった関数を実装していきましょう。