エルの楽園

Twitterで垂れ流すには見苦しい長文を置きます。 あ、はてな女子です。

国会議員のTweet40万件分析して支持すべき政治家を探してみた

新型コロナ禍が我が国の政治の深刻な問題をあぶり出しています。一市民としては支持する政治家を本腰入れて検討しなければいけません。

個人的な問題意識は主に「労働」と「財政」にありますので、これらの問題に積極的に取り組んでくれる方がいいです。今回のコロナ禍でこの2つは本当に切実な問題になりました。反対に「脱原発」とか「改憲」はやめてほしいかな……「財政再建」とかも当然ムリ!あ、もちろん国政の話です。

そんな訳でデータの力で問題意識の合う現職国会議員を探してみました。使うのはみんな大好きPython3 on Google colab(Jupyter notebook)です。技術的な話を飛ばして結論だけ見たい方はこちらからどうぞ。

やったこと

まずはTwitterをやっているすべての現職国会議員のTweetを一人当たり最新1000件ほど取得します。現職国会議員のアカウント一覧は国会議員いちらんリスト@standbycitizens様よりお借りしました。

##党員一覧を衆参それぞれに取得
def get_member_list(id):
  members = []
  for member in tweepy.Cursor(api.list_members, list_id=id).items():
    members.append(member.screen_name)
  return members

jimin_lower = get_member_list(1062685419437871104)
jimin_upper = get_member_list(1062298938223411200)
koumei_upper = get_member_list(1062306783929131010)
rikken_upper = get_member_list(1062311126208151552)
##...以下続く

Twitterをやっておられない方もおられるので、全アカウント数は522個でした。国会議員は衆参合わせて710名なので、約74%の議員がTwitterをやっていることになります。このリストから各党ごとの人数も算出しておきます。

#党員一人あたりTweetを1000件取得しCSVに格納
def get_tweets(screen_name, party, house):
  for m in screen_name:
    for tweet in tweepy.Cursor(api.user_timeline,screen_name = m,exclude_replies = False, wait_on_rate_limit = True).items(1000):
      tweets = [m, party, house, tweet.id,tweet.created_at+datetime.timedelta(hours=9),tweet.text.replace('\n','')]
      with open('tweets.csv', 'a') as f:
        writer = csv.writer(f)
        writer.writerow(tweets)

get_tweets(shamin, 'shamin', 'upper')

1000件も投稿していない方や鍵垢の方もおられるので、実際の件数は408,854件でした。

words_labor = ['ブラック企業', '労働', '賃金', '雇用', '解雇', '待遇', '失業', '派遣切り', '雇い止め']
words_finance = ['財政出動', '給付', '交付金', '減税', 'デフレ']
words_ng = ['改憲', '九条', '脱原発', '財政再建']

関心事リストとNGリストを単語レベルで作成します。単語リストはやはりこうした問題に関心をお持ちの @koshian 様にお手伝い頂きました。できるだけ推進派・賛成派が引っ掛かり、反対派は引っ掛からないような言葉を選んでいます。機械学習自然言語解析とかはせず原始的な方法で。

df = pd.read_csv('tweets.csv')

def get_tweets_by_topic(w_list):
  df_new = pd.DataFrame()
  for w in w_list:
    add = df[df['tweet'].str.contains(w, na = False)]
    df_new = pd.concat([df_new, add])
  return df_new

CSVに保存したデータをDataFrameで読み込み、リストに設定した各単語が含まれているtweetを抽出。

結果

まずは政党ごとの「労働」問題についてのtweet総数(のべ)です。立憲民主党が最も多く、次に自民党です。

party_names_labor = df_labor['party'].value_counts()
print(party_names_labor)
--
rikken         3763
jimin          3468
koumei         1720
kyosan         1266
independent     576
ishin           371
kokumin         361
shamin          210
Name: party, dtype: int64

議員一人当たりの件数に直すと毛色が変わってきます。圧倒的なのが社民党の約70件、次いで共産党の50.6件です。左派政党の面目躍如ですね。自民党は最下位でした。

jimin          14.1
rikken         27.7
koumei         35.8
kyosan         50.6
kokumin        27.8
ishin          16.1
shamin         70.0
independent    20.6
dtype: float64

それでは個人だと労働問題について誰が一番発言しているでしょうか?上位10名を確認します。

person_names = df_labor['name'].value_counts()
person_names.head(10)
--
yamanoikazunori    262
ishibashi2010      174
hanyuda_takashi    156
pru_moriya         150
miyamototooru      136
wako0501           135
kishimakiko_j      132
genkihoriuchi      131
hatanokimie        123
Senator_ISHIDA     113
Name: name, dtype: int64

圧倒的に多いのが立憲民主党山井和則氏です。延べとはいえ1000件中1/4以上が労働関連のtweetです。

twitter.com

その次が同じく立憲民主党石橋みちひろ氏、そして自民党羽生田たかし氏と続きます。政党というより、個人間で大きなばらつきがあるようです。

では次に「財政」問題に関心の高い政党を確認しましょう。

df_finance = get_tweets_by_topic(words_finance)
party_names_finance = df_finance['party'].value_counts()
print(party_names_finance)
--
rikken         2543
jimin          2493
koumei         2134
kyosan          924
independent     588
kokumin         390
ishin           286
shamin           41
Name: party, dtype: int64

こちらは全体的に「労働」問題に比べて件数が少ないです。そして一番はやはり立憲民主党ですね。

jimin          10.1
rikken         18.7
koumei         44.5
kyosan         37.0
kokumin        30.0
ishin          12.4
shamin         13.7
independent    21.0
dtype: float64

一人当たりに直すとやはり見える景色が変わってきます。なんと一位は公明党の約44.5件です。次いで共産党の37件、国民民主党の30件と続きます。社民党は維新並みに少なく、財政に弱いというイメージが裏付けられた感じです。そして最下位はやはり自民党なんですが、自民党の方は普段何を話しておられるのでしょうか??

そして個人だと

person_names = df_finance['name'].value_counts()
person_names.head(10)
--
yamanoikazunori    192
tamakiyuichiro     136
ueno_hiroshi       131
akutsu0626         126
andouhiroshi       120
hisatake_sugi      111
sayaka_sasaki      106
kitagawa_kazuo      95
yasue_nobuo         92
310kakizawa         90
Name: name, dtype: int64

ここでも一位は立憲民主党山井和則氏でした。2位は国民民主党玉木雄一郎氏ですね。玉木氏は財政についてたくさん発言されているという印象がありましたが、実はそのはるか上がおり、3位の自民党上野宏史氏とあまり変わりません。やはり政党というより個人間のばらつきが大きい感じです。なお、玉木雄一郎氏は労働問題については32件投稿されています。

では、NGなトピックについて一番発言している政党の確認です。

df_ng = get_tweets_by_topic(words_ng)
party_names_ng = df_ng['party'].value_counts()
print(party_names_ng)
--
rikken         350
kyosan         276
jimin          135
kokumin         62
shamin          50
ishin           49
independent     39
koumei          38
Name: party, dtype: int64

ぐっと件数は下がったものの、こちらでも立憲民主党がトップでした。どうも立憲民主党は良くも悪くもわたしの関心があるトピックについて語ることが多いようです。ただ、どの党も思ったよりNGな事柄について話していないようなので安心しました。

件数が少ないので、一人当たりの変換はしません。個人の検証に移ります。

person_ng = df_ng['name'].value_counts()
person_ng.head(10)
--
ShioriYamao        49
tadatomoyoshida    34
yunoki_m           34
pioneertaku84      34
TAMURATAKAAKI      31
ryon_t             22
kondo_shoichi      22
kurabayashia       21
ShiokawaTetsuya    21
kokutakeiji        20
Name: name, dtype: int64

なんと、トップの国民民主党山尾志桜里氏が国民民主党全件62件のうち49件を稼いでいる!!なるほどですね……

さてここまで来て、わたしが推すべき政党は共産党、政治家は立憲民主党山井和則氏だということがわかりました。財政と労働、どちらの問題についても積極的なご関心をお持ちのようです。しかし、うーーん共産党は覚悟してたが立憲民主党か……一応、山井氏がNG発言をされていないかどうかを確認します。

person_ng['yamanoikazunori']
--
KeyError: 'yamanoikazunori'

素晴らしい、一件もありません!!

本当に山井氏を推していいかどうか最終確認のために公式サイトを見ます。

yamanoi.net
政策を拝見する限り、賃上げや子どもの貧困問題に積極的に取り組んでおられるようです。そこは素晴らしいですね。ただ立憲民主党の政策として事業仕分けや公共事業削減に積極的な点についてはどうお考えなのか気になります。立憲民主党ではなく共産党に移って頂いたら安心できるのかな……

今後の課題

単語でのマッチを見るだけでは主張を解析するのに不十分でしょうから、機械学習での自然言語処理などを使って内容に踏み込んだ主張の解析を行いたいと思います。とはいえそういうことは全然わからないので有識者のご指導ご鞭撻を仰ぎたいところです。chainerとかやればいいのかな……ドキドキ。