こんにちは、えびかずきです。
今回はTwitterAPIを使ってどのプログラミング言語が人気は調べてみました!
こんな人におすすめ:
・特定の条件に当てはまるTwitterユーザーを調べたい
・python-twitterライブラリでTwitterAPIを使いたい
・最近の人気言語を知りたい
結論ですが、2021/1/12にTwitterで以下のように報告した通り、
Rubyがもっとも人気という結果でした。
開発環境
OS MacOS Big Sur 11.1
Python 3.7.3
外部ライブラリ:
python-twitter 3.5
pandas 1.2.0
ソースコードはGitHubリポジトリにありますので、自由に使ってください。https://github.com/ebikazuki/TwitterAnalysis
調査方法
調査範囲:
Python, Ruby, JavaScript, C言語, VBA, Perl, Go言語
方法:
2021/1/12の24時間のうちに、特定の言語名を含むツイートをしたユニークユーザー数を調べる。
Pythonプログラム
Pythonプログラムとしては、以下のような要件で設計しました。
プログラム要件:
1.情報収集にTwitterAPIを使う
2.引数に言語名と期間を与えて、その言語名を含むツイートをしたユーザー名を取得する
3.日本語でツイートした情報のみ取得する
4.結果をcsv形式で出力する
ユーザー数を調べるだけであれば、本当はもっと簡単にできるのですが、どんなユーザーがつぶやいているのかも含めて調査したかったのでこのような要件でプログラムを作成しました。
ソースコードは以下の通り。
# twitter_search.py
import os
import sys
import time
import csv
import twitter
import datetime as dt
import pandas as pd
args = sys.argv
# API情報をセット
t = twitter.Api(consumer_key=os.environ['CONSUMER_KEY'],
consumer_secret=os.environ['CONSUMER_SECRET'],
access_token_key=os.environ['ACCESS_TOKEN_KEY'],
access_token_secret=os.environ['ACCESS_TOKEN_SECRET']
)
def GetUserList(word, days=1, mpr=10):
"""
python-twitterで特定のワードを呟いたユーザーを取得してcsv出力する関数
第一引数:ワード
第二引数:遡る日数(max:7)
第三引数:1リクエスト当たりの取得時間(min)
"""
days = int(days)
mpr = int(mpr)
# Pandas.dfの準備
columns = ['since','until','user']
df = pd.DataFrame(columns=columns)
# GetSearchで期間指定するための準備
until = dt.datetime.now()
since = until - dt.timedelta(minutes = mpr)
# いつまでさかぼるかを設定
end_point = dt.datetime.now() - dt.timedelta(days = days)
# GetSearchでデータを取得
while since >= end_point :
all_info = t.GetSearch(term = word + ' lang:ja'
+ ' since:' + str(since).replace(" ","_").split(".")[0]
+ '_JST' + ' until:'
+ str(until).replace(" ","_").split(".")[0]
+ '_JST',count=100)
# 1リクエスト取得データが100に到達してしまった場合は警告文を表示する
if len(all_info) == 100:
print("since:" + str(since).replace(" ","_").split(".")[0]
+" API制限オーバー:mprをもっと小さくしてください ")
# dfにデータを書き込む
for user_info in all_info:
df = df.append({'since': str(since).replace(" ","_").split(".")[0]
, 'until': str(until).replace(" ","_").split(".")[0]
, 'user': user_info.user.screen_name},ignore_index=True)
# 制限回避のために5秒まつ
time.sleep(5)
# リクエストが1回終わったら進捗状況を表示する
print(' since:' + str(since).replace(" ","_").split(".")[0]+"---OK!")
# 取得期間の更新
until -= dt.timedelta(minutes = mpr)
since = until - dt.timedelta(minutes = mpr)
#csvを保存する
filename = "ユーザーリスト_" + word + ".csv"
df.drop_duplicates(subset=['user']).to_csv(filename, encoding="utf-8-sig")
if __name__ == "__main__":
args.pop(0)
GetUserList(*args)
ソースコードの説明ですが、
まずはじめに、TwitterAPIのアカウント認証を読み込んでいます。
ここでは環境変数として登録した情報を読み込んでいます。もちろん直接ここにアカウント情報を入力してもプログラムは動きますが、セキュリティの観点から極力環境変数で隠した方が賢明です。
続いて、GetUserList関数を定義しています。
これは、あるワードと期間を引数として受け取って、そのワードをつぶやいたユーザー名をcsv形式で出力する関数です。
ユーザー情報の取得はpython-twitterライブラリのGetSearchメソッドでおこないます。
上記コードのとおり、「term:」に検索するワードを入れ、「lang:」は日本語に設定、「since:」と「until:」で期間を設定して情報を取得できます。
取得した情報は一旦PandasのDataFrameにまとめて、それをto_csvメソッドでcsvにして出力しています。
調査結果
結果は以下のようになりました。
今回調べた言語の中では、RubyとPythonが僅差で1位、2位の結果でした。
続いてJavaScript、C言語、VBA、Perl、Go言語となりました。
私の大好きなPythonが僅差で1位を取れなかったことが少し悔しいですが、上位に関してはだいだいイメージ通りの結果かなと思いました。
一方で最下位のGoは、実際もうちょっとユーザー数が多いんじゃないかと思います。
というのも今回は検索するワードを言語以外の重複を避けるために「Go言語」としましたが、「Go」でツイートしたユーザーも多数いるはず、という事です。
この他にも本当はC++とかJavaとかPHPとかも調査したかったのですが、C++に関しては”++”の部分がTwitter検索でどうもうまくいかず、Javaに関しては、JavaScriptと重複してしまうという理由で、今回の調査範囲からは泣く泣く外しました。
さらにPHPに関しては、PHP出版とはPHP文庫とかプログラミングとは関係ないツイートが多数混ざってしまったので正確な調査ができず、調査範囲から外したという事情がありました。。
こういった検索が難しい言語も含めてランキングを作れたらかなり面白いのですが、それはまた機会があればという事でご勘弁ください。
まとめ
今回は、TwitterAPIを使ってプログラミング言語の人気ランキングを調査してみました。
結果として1位はRuby、2位はPythonとなりました。
TwitterAPIを使えば、この記事で紹介したもの以外にも様々な分析調査ができます。
ぜひみなさんも試してみてください。
コメントを書く