参院選2022候補者アンケートの検索用スプシの共有とそのデータ分析

参院選挙も近い。国民の大切な権利である国政選挙での投票権をちゃんと活かすために、自分の考えに近い候補者を探したい。

各候補者の考えの違いは、NHKが実施した[参院選2022の候補者アンケートデータ](https://www.nhk.or.jp/senkyo/database/sangiin/survey/)から、大雑把にわかりそうである。大変ありがたい。さらに、その目的のために、NHKがすでに[ボートマッチ](https://www.nhk.or.jp/senkyo/database/sangiin/survey/votematch/)という特設Webサイトを用意している。そのサイトでは、自分自身が候補者と同じアンケートを回答し、その結果と各候補者の一致度が表示される。一致度の計算式も明確に公開されており、大変素晴らしい試みだと思う。

しかし、実際に使って自分の考えに近い候補者を選ぼうとすると、以下の点が気になった。

1. 比例区では、まず政党を選びその政党内での候補者比較しか一度に見られない
1. 同じ回答か否か（一致）で判断するため、例えば自分が「賛成」と回答した設問では候補者の回答が「どちらかといえば賛成」「どちらかといえば反対」「反対」の区別がされない。直感的には「賛成」との間では、「どちらかといえば賛成」は近く、「反対」は遠いはず
1. 回答を選ぶ前にまず質問のテーマを選ぶが、各テーマの中にどの質問があるかわからずテーマが選びにくい

比例区では政党での投票が一般的だったり、一致度の計算式をシンプルにするためだったり、回答を煩雑にしすぎないための工夫だったりと、こうであるべき理由も推察できるが、自分には少し合わなかったのでカスタマイズしようと思った。

今回、作成&共有したスプレッドシートでは、上記気になった点を以下の形で変更を加えた。

1. 比例区の候補者は政党をまたいで、一覧にまとめてスコア順で表示する
1. スコアは同じ回答だったら+1点する。一方、極端に違う意見では-1点する。例えば「賛成」と回答したら、その設問で「反対」と答えた候補とのスコア合計から1点を引く
1. テーマを聞かず設問は全部表示する。設問を見た後に、絶対ゆずれない項目(回答が一致したら+100点)、回答スキップ(ここの回答はスコアに影響しない。ボートマッチでは回答しない項目を選ぶと影響しなくなるが、こちらでは「回答しない」が一致すると+1点になる)を選択できる

**上記を実現したものがこのスプレッドシートである** →[リンク](https://docs.google.com/spreadsheets/d/1VWGQINreTwUyaj1wfyh6m2J0y3W0YnCeiYXaEizWCvw/edit?usp=sharing)

# How to Use

1. 上記リンク先のスプレッドシートの「ファイル」タブから「コピーを作成」。以下、自分のドライブにコピーしたスプレッドシートを編集する
1. question のシートを編集する。設問(A列)ごとに、自分の考えに一番近い回答(B列)を選ぶ。その設問を重視していないのなら回答スキップ(C列)にチェックをいれる。逆に絶対に一致してほしい設問ならば絶対ゆずれない項目(D列)にチェックを入れる
1. question のシートを編集が終わったら、resultsのシートを選択する。そこで候補者がスコアの降順で並び替えられている。候補者名がA列、政党名がAA列、回答内容がB〜Z列に表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108572/51b4371d-f332-b9c6-a893-780bf1e2c3f2.png)

図1 question シートのキャプション。ここのB~D列を使って自身の考えを表現する。初期値は当たり障りなく「回答しない」「その他」にしておいた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108572/22fb287f-4237-0eff-8dd1-b8654a8cc47f.png)
図2 resultシートの一部のキャプション。ABのスコアが大きい順に並ぶ。この画像では全回答を「回答しない」にした結果のため、実質「回答しない」の選択率が高い順の結果になっている。

この機能を使うと、自身の考えに近い候補者を探しやすくなる。特に、政党をまたいで候補者の一覧を比較できる機能が重要だと考えている。比例区では、政党名ではなく個人名での投票が可能であり、（[非拘束名簿式比例代表制](https://www.sangiin.go.jp/japanese/goiken_gositumon/faq/a10.html)というらしい）**国政選挙の中でもずば抜けて有権者の選択肢が多く**、自らの考えに近い候補者に投票できる可能性が比較的高い。例えば、衆議院選挙では小選挙区での選挙のため、地域によってはわずか数人の中から１人を選ばねばならず、自分の考えに近い候補者が選択肢にいない可能性も高い。また、同一政党内でも候補者間の考えはバラバラだったりするので（今回のアンケートデータでもそれがあわられている。詳細は本記事後半のデータ分析にて）、特定の政党を支持しない有権者（一般に無党派層とよばれ、多数派らしい）は、政党単位ではなく候補者単位で投票先が選べたほうが、選挙結果に民意を反映させやすいのでは？と思う（あくまで個人の仮説です）

なお、スコアが一番高い候補者が自分自身の考えと一番一致する候補者とは限らない（本記事後半のデータ分析でも軽く述べる）ので、ここで知った候補者の名前でGoogle検索するなどして、このアンケートで表現されていない内容まで考慮し、投票先を決める、といった使い方が良いと思う。あくまで、ここでは自分の考えに近いと思わしき候補者を探すだけで、今まで知らなかったが応援したいと思える候補者が見つかれば幸いである。

---
以下、おまけ
---

# データ分析

## 同一政党内でのアンケート結果のばらつきについて

同一政党内でも候補者間でアンケート結果にばらつきが存在する。NHKのページでも[アンケート項目ごとに政党別の回答結果割合を表示](https://www.nhk.or.jp/senkyo/database/sangiin/survey/touhabetsu.html)しているが、ここではより直接的にばらつきが確かに存在することを示す。

まず比例区での政党別候補者数について

```
自民     33
維新     26
共産     25
立民     20
公明     17
ごぼう    11
れいわ     9
国民      9
Ｎ党      9
社民      8
参政      5
第一      2
くに      2
幸福      1
新風      1
```
次に、政党内でもっとも回答数が多かった回答の割合が過半数に満たなかった設問とその政党について

```
維新 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
維新 Q10: 政府のロシアに対する制裁措置についてどう考えますか。
公明 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
公明 Q4: 新型コロナウイルスは、入院の勧告や外出自粛の要請など強い措置がとれる感染症に指定されています。この扱いを維持すべきだと考えますか。季節性のインフルエンザと同じ扱いに変えるべきだと考えますか。
公明 Q8: 年金や医療、介護といった社会保障制度の給付と負担に対するあなたの考えは次のＡ、Ｂのどちらに近いですか。　【Ａ】給付水準を保つために、負担が増加するのはやむをえない　【Ｂ】給付水準を下げて、負担の増加を抑制すべき
公明 Q20: 同性婚を法律で認めることに賛成ですか。反対ですか。
立民 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
立民 Q3: 新型コロナウイルス対策で、今、政府がより重点をおくべきは「感染拡大の防止」と「経済活動の回復」のどちらだと考えますか。
立民 Q4: 新型コロナウイルスは、入院の勧告や外出自粛の要請など強い措置がとれる感染症に指定されています。この扱いを維持すべきだと考えますか。季節性のインフルエンザと同じ扱いに変えるべきだと考えますか。
立民 Q11: 防衛費を今後どうしていくべきだと考えますか。
立民 Q23: 安定的な皇位継承のあり方などを議論してきた政府の有識者会議が、皇族の数を確保する方策として示した２つの案についてうかがいます。まず、「女性皇族が結婚後も皇室に残る」案に賛成ですか。反対ですか。
国民 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
国民 Q2: これまでの岸田総理大臣の政権運営をどの程度評価しますか。
国民 Q7: 大企業や所得が多い人への課税を強化し、国の財源に充てることに賛成ですか。反対ですか。
国民 Q8: 年金や医療、介護といった社会保障制度の給付と負担に対するあなたの考えは次のＡ、Ｂのどちらに近いですか。　【Ａ】給付水準を保つために、負担が増加するのはやむをえない　【Ｂ】給付水準を下げて、負担の増加を抑制すべき
国民 Q9: 日本銀行が続けている大規模な金融緩和策についてどう考えますか。
国民 Q12: 敵のミサイル発射基地などを破壊する、いわゆる敵基地攻撃能力を持つことに賛成ですか。反対ですか。
国民 Q21: 候補者や議席の一定割合を女性に割り当てる「クオータ制」の導入に賛成ですか。反対ですか。
国民 Q22: 参議院選挙の１票の格差を是正するため、隣り合う２つの県を１つの選挙区にする「合区」制度についてどう考えますか。
国民 Q23: 安定的な皇位継承のあり方などを議論してきた政府の有識者会議が、皇族の数を確保する方策として示した２つの案についてうかがいます。まず、「女性皇族が結婚後も皇室に残る」案に賛成ですか。反対ですか。
国民 Q24: 次に、「旧皇族の男系男子を養子に迎える」案に賛成ですか。反対ですか。
参政 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
参政 Q7: 大企業や所得が多い人への課税を強化し、国の財源に充てることに賛成ですか。反対ですか。
参政 Q14: 今の憲法を改正する必要があると考えますか。改正する必要はないと考えますか。
参政 Q15: 憲法９条を改正し、自衛隊を明記することに賛成ですか。反対ですか。
参政 Q17: 原子力発電への依存度を今後どうすべきだと考えますか。
参政 Q23: 安定的な皇位継承のあり方などを議論してきた政府の有識者会議が、皇族の数を確保する方策として示した２つの案についてうかがいます。まず、「女性皇族が結婚後も皇室に残る」案に賛成ですか。反対ですか。
共産 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
共産 Q25: 今回の参議院選挙の最大の争点は、次のうちどれだと考えますか。
自民 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
自民 Q2: これまでの岸田総理大臣の政権運営をどの程度評価しますか。
自民 Q7: 大企業や所得が多い人への課税を強化し、国の財源に充てることに賛成ですか。反対ですか。
自民 Q8: 年金や医療、介護といった社会保障制度の給付と負担に対するあなたの考えは次のＡ、Ｂのどちらに近いですか。　【Ａ】給付水準を保つために、負担が増加するのはやむをえない　【Ｂ】給付水準を下げて、負担の増加を抑制すべき
自民 Q11: 防衛費を今後どうしていくべきだと考えますか。
自民 Q17: 原子力発電への依存度を今後どうすべきだと考えますか。
自民 Q18: 電源構成に占める再生可能エネルギーの割合を今後どうすべきだと考えますか。
自民 Q19: 選択的夫婦別姓の制度の導入に賛成ですか。反対ですか。
自民 Q20: 同性婚を法律で認めることに賛成ですか。反対ですか。
自民 Q21: 候補者や議席の一定割合を女性に割り当てる「クオータ制」の導入に賛成ですか。反対ですか。
自民 Q23: 安定的な皇位継承のあり方などを議論してきた政府の有識者会議が、皇族の数を確保する方策として示した２つの案についてうかがいます。まず、「女性皇族が結婚後も皇室に残る」案に賛成ですか。反対ですか。
自民 Q24: 次に、「旧皇族の男系男子を養子に迎える」案に賛成ですか。反対ですか。
自民 Q25: 今回の参議院選挙の最大の争点は、次のうちどれだと考えますか。
社民 Q25: 今回の参議院選挙の最大の争点は、次のうちどれだと考えますか。
Ｎ党 Q1: 参議院議員になったら最も取り組みたいテーマを１つ選んでください。
Ｎ党 Q2: これまでの岸田総理大臣の政権運営をどの程度評価しますか。
Ｎ党 Q4: 新型コロナウイルスは、入院の勧告や外出自粛の要請など強い措置がとれる感染症に指定されています。この扱いを維持すべきだと考えますか。季節性のインフルエンザと同じ扱いに変えるべきだと考えますか。
Ｎ党 Q5: 今は、「財政健全化」と「経済対策」のどちらをより重視すべきだと考えますか。
Ｎ党 Q6: 物価高騰や新型コロナ対策として、消費税率の一時的な引き下げは必要だと考えますか。
Ｎ党 Q7: 大企業や所得が多い人への課税を強化し、国の財源に充てることに賛成ですか。反対ですか。
Ｎ党 Q8: 年金や医療、介護といった社会保障制度の給付と負担に対するあなたの考えは次のＡ、Ｂのどちらに近いですか。　【Ａ】給付水準を保つために、負担が増加するのはやむをえない　【Ｂ】給付水準を下げて、負担の増加を抑制すべき
Ｎ党 Q9: 日本銀行が続けている大規模な金融緩和策についてどう考えますか。
Ｎ党 Q10: 政府のロシアに対する制裁措置についてどう考えますか。
Ｎ党 Q11: 防衛費を今後どうしていくべきだと考えますか。
Ｎ党 Q12: 敵のミサイル発射基地などを破壊する、いわゆる敵基地攻撃能力を持つことに賛成ですか。反対ですか。
Ｎ党 Q13: 「非核三原則」についてどう考えますか。
Ｎ党 Q17: 原子力発電への依存度を今後どうすべきだと考えますか。
Ｎ党 Q18: 電源構成に占める再生可能エネルギーの割合を今後どうすべきだと考えますか。
Ｎ党 Q19: 選択的夫婦別姓の制度の導入に賛成ですか。反対ですか。
Ｎ党 Q20: 同性婚を法律で認めることに賛成ですか。反対ですか。
Ｎ党 Q21: 候補者や議席の一定割合を女性に割り当てる「クオータ制」の導入に賛成ですか。反対ですか。
Ｎ党 Q22: 参議院選挙の１票の格差を是正するため、隣り合う２つの県を１つの選挙区にする「合区」制度についてどう考えますか。
Ｎ党 Q23: 安定的な皇位継承のあり方などを議論してきた政府の有識者会議が、皇族の数を確保する方策として示した２つの案についてうかがいます。まず、「女性皇族が結婚後も皇室に残る」案に賛成ですか。反対ですか。
Ｎ党 Q24: 次に、「旧皇族の男系男子を養子に迎える」案に賛成ですか。反対ですか。
Ｎ党 Q25: 今回の参議院選挙の最大の争点は、次のうちどれだと考えますか。
```
Q1やQ25 はその候補者の関心についての項目なので、ばらつきが存在するのは不自然ではないが、それ以外の政策や立案に影響しそうな項目でも、政党によっては多くの項目でばらつきが存在することがみてとれる

# アンケートデータの成形について

[NHKが候補者アンケートの結果をテキスト形式で公開している](https://www.nhk.or.jp/senkyo-data/database/sangiin/2022/survey/k/hirei.html)ため、これを使った。ただし、リンク先が複数に分かれ、さらにテキストのhtml構造があまりキレイでなかったため、簡単なスクリプトを作った→[リンク(Colaboratoryで作成。自分で試す場合は「ドライブにコピーを保存」して、そのコピーを使って欲しい)](https://colab.research.google.com/drive/1qasJrArD4vLIY9NGTzfHLKzGpANI6_PA?usp=sharing)

また、今回は使わなかったが選挙区別のアンケート結果を成形するスクリプトも作成した→[リンク(同じくColaborattory)](https://colab.research.google.com/drive/1ZBSDL-BANNLgY6-jmWoamtsOkJQc4dw7?usp=sharing)。例えば、比例区と違って選挙区がしぼられると、自分の考えに近い候補者に投票できる確率がどのくらい下がりそうか、などの試算に使えそうだったが、今回は実施していない。こちらのほうがテキストの成形が大変だったので、もし次回以降も公開していただけるのであれば、もっと成形しやすい形式でお願いします > NHK様

# その他、やろうとしてやらなかった（やれなかった）こと

## スコア計算について

### Inverse Document frequency (idf)の導入
今は、各質問どれでも一致したら+1点にしているが、「一般的によく一致する設問と回答」よりも「なかなか一致しない設問と回答」のほうが一致したときが嬉しいかもしれない。テキスト検索ではidfといった珍しい単語などで一致した場合にスコアが高くなる工夫がされているため、実装も簡単なのでこれを導入しようと思ったが

1. 「一致が珍しい」方が嬉しい、という仮説に自信が持てない
1. 結果のスコアの解釈性が大きく下がる

の2点の理由で導入しなかった。特に解釈性が下がるのは、本ツールが「あくまで候補者検索のサポートである」という位置づけとしたいため、この特性は非常に好ましくなかった。

### 独立成分ごとの加点方式

現在のスコア計算だと、そもそも最初の設問設定に偏りがある場合、その偏りの影響を大きく受けてしまう。極端な例だが、「外交・安全保障」についての設問が99問あって「経済・暮らし」についての設問が1問しかなければ、「外交・安全保障」に関しては考えが近い候補者のスコアが高くなりやすいが、「経済・暮らし」の考えが近い候補者のスコアは高くになりにくい。この問題に対処するために、アンケート回答結果から因子間が独立になる因子を抽出するといった手法が考えられるが、以下の問題がある

1. 結果のスコアの解釈性が大きく下がる
1. 偏りが、アンケート設定自体なのか候補者の中にあるのかが区別できない。例えばアメリカでは「中絶の権利」と「銃武装の権利」が、政策としては別個のものだとしても候補者の回答結果に両者の間に強い相関があることは想像に難くない。このような宗教・歴史・文化的要因で別個でカウントしたい政策が一緒の因子になる危険性がある
1. アルゴリズムに恣意性が残る。少しマニアックな話なので脚注 [^1]

ただし解釈性の低下やアルゴリズムの恣意性は技術的になんとかなる気もしており、有権者が候補者を探すときは、政策単位よりも宗教・歴史・文化的に影響される「何か(思想的な?)」が近い候補者を探したい可能性もある。設問項目の偏りの影響が軽減されるといったメリットも大きいため、こちらの方式は今後採用するかもしれない。

## UX について

スプシをコピーして、スプシで入力がカッコ悪いので、流行りのノーコードを使ってカッコいい入力アプリを作ろうとした。そこでAppsheet を検討した。

<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108572/320e53e9-a7d0-2b27-412d-bfc711247a75.png">

<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108572/aa46aead-5597-430e-3234-39ec4db10629.png">

図3 Appsheetベースの入力画面（開発失敗画面）。今のスプシよりかは100倍カッコいい

### 挫折した理由
Appsheet、完全に初学者なので決定的に間違ってるかもしれないです。指摘もらえると嬉しいです。
Appsheet で実現する場合、スコア計算をどこでするか問題が発生し、調べた感じ
1. スプレッドシート
1. Google App Script (GAS)

のどちらかになりそうだったが、GASの場合もGASの出力をAppsheetで受けるのでなく、一度スプレッドシートに書きこんで、それをAppsheetでDataとして使うであったため、どちらの手法でも一度スプレッドシートに書き込む必要がある。
そして、候補者結果を取得したさいに誰がどこを書き込んだのかを判定する必要があったが、[ログイン後のユーザーのE-mail](https://support.google.com/appsheet/answer/10108210)くらいしか見当たらず、ハッシュ関数もなさそうだったため、個人情報を開発者が閲覧できるスプレッドシートに直接保存し続けるのは、ちょっとありえなさそうだったので断念した。仮に、個人の識別を他の方法でできたとしての、ユーザー数 X 候補者数の縦に長いスプレッドシートが作ることになり、それはそれで現実的に思えず、ここまでするのだったらノーコードしばりじゃないほうが楽そうだな、となって断念した。今回は、もう投票日も近いため、かっこいいいい感じの画面は3年後の目標としたい。

# スプレッドシートでの開発(?)で詰まった点と解決策の備忘録
ここでは、本スプレッドシートを作成するために詰まった箇所とその解決策を備忘録的に残しておく

## 詰まった箇所
1. スコアの計算式をスプシで書くのが大変でミスが混入しやすそう
1. シートの数式部分の連続コピーで、連続になって欲しいところとそうでないところがある
1. questionを変更するとresultsでの並び順が勝手に並び変わってほしい

## 対応する解決策

1. Qごとにセルをわけて計算式を管理。最後にまとめて足しあげる形式にした。設問ごとの極端回答もベタ書きするのでなくセルを参照する形式にした。GASもためしたが（１）セルが多いと計算がなかなか終わらずquestion変更の結果がなかなか反映されない（２）シートの行削除などで参照したセル座標が自動的に変わらない、の2点からスプレッドシート上での数式の方が便利だった
1. 変わって欲しくないところに$の記号をつける
1. 計算用のシートをつくり、表示用のシートは計算用シートを =sort() という関数を使って参照するようにした

[^1]: まず各設問ごとの回答結果の間の距離をどう定義するか、に強い恣意性がある。ボートマッチでは一致か否かで見ていたが、今回のスプシでは意見が両極端に違う場合はマイナスにするといったように恣意的に決めた。ここが決まらないと独立な因子を抽出する方法が定まらない。仮に、妥当な距離が定義でき、かつユークリッド距離に変換できた場合、互いに独立する因子は直交するので、その性質が使える。しかし、各設問ごとの分散が等しいとは考えにくいので主成分分析は使えず、因子分析法に頼ることになるが回転法に恣意性が残る。非ユークリッド距離ならば独立成分分析の技法が使えるが、独立そのものでなくネゲントロピーなどの代理指標を使うことになるが、どの指標を使うかに恣意性が残る。これらの恣意的な選択によって抽出される因子が大きく変わる危険性がある