🎉
PythonでTableau用にTwitter APIのデータを整形する
取得
Twitter APIの登録には申請が必要→https://developer.twitter.com/ja
APIを用いてユーザーのタイムラインを取得する
下記コードにて実施。
同階層にconfig.pyを作成し、そこに環境変数を記述して、2つ目のスクリプトでインポート。これで、config.pyを.gitignoreに買いとけば、APIキーなどがGithubにアップロードされることを防げます。
config.py
# これらは、Twitter APIを操作する上で必要。Developerダッシュボードで作成できます。
CONSUMER_KEY=""
CONSUMER_SECRET=""
ACCESS_TOKEN=""
ACCESS_TOKEN_SECRET=""
run.py
import json
import config
import csv
from requests_oauthlib import OAuth1Session
def my_timeline():
url = "https://api.twitter.com/1.1/statuses/user_timeline.json"
params ={'screen_name': 'hirasawa','count' : 200}# JoeBiden
header = ['id','User Name','User ID','Follows','Followers','User Location','content','time']
req = twitter.get(url, params = params)
if req.status_code == 200:
with open('my_timeline.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(header)
timeline = json.loads(req.text)
for tweet in timeline:
tmp = []
tmp.append(tweet['id'])
tmp.append(tweet['user']['name'])
tmp.append(tweet['user']['screen_name'])
tmp.append(tweet['user']['friends_count'])
tmp.append(tweet['user']['followers_count'])
tmp.append(tweet['user']['location'])
tmp.append(tweet['text'])
tmp.append(tweet['created_at'])
writer.writerow(tmp)
else:
print("ERROR: %d" % req.status_code)
if __name__ == '__main__':
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
my_timeline()
Tableau試行録
Twitter APIから帰ってくる日付のフォーマットは
EEE MMM dd HH:mm:ss X yyyy
ですが、これだとTableauで扱うときに詰まりました。
生データのままだと
文字列になってしまい、グラフのソート時などに困ります。
Tableauの機能で日付に変換したい
するとnullになってしまう
Tableauの計算フィールドでフォーマット指定してもダメっぽい
Tableauの計算フィールドでDATEPARSEを使って認識させようとしてもダメでした。
DATEPARSE('EEE MMM dd HH:mm:ss X yyyy',Content['Created_at'])
フォーマットの詳細をみても、間違って無さそうなのに、、
Pythonで解決
tmp.appennd(tweet['created_at'])の行を、下記に書き換える
date = datetime.strptime(tweet['created_at'],'%a %b %d %H:%M:%S %z %Y')
tmp.append(f"{date.year}-{date.month}-{date.day} {date.hour}:{date.minute}:{date.second}")
Pythonのdatetimeのパーサ記号は以下を参考に
これで無事、NULLにならずに日付と認識されたので、文字列のままではできなかった年→四半期→月→日→時→分→秒までできるようになりました。
Discussion