2024年7月9日火曜日

東京都知事選挙(5)

東京都知事選挙(4)からの続き

NHKが,出口調査で得た年代別の主要候補者支持率(それほど正確ではない)を出している。これを用いて,各年代区分のサイズを投票率×年代人口で正規化した人口比例面積表示のグラフを描いた。

生成AIを使ってプログラムを作ろうとしたが,(1) Pythonでは違うロジックの図がでてきたので,修正をあきらめた。(2) ChatGPTで,設定を簡単にした説明を入れ,Juliaプログラミングをすると,概ねできたが途中でつまづいた。(3) Claude 3.5 Sonnetで日本語の修正を含めて,最終版まで行き着いた。やはり,プログラミング経験なしでスイスイとはいかないのだ。

最初のChatGPTへの入力と,最終のJuliaコードを示す。
Q(koshix):
次のように正方形の領域を分割して色を塗るJuliaプログラムをつくってください。
 (1) 6個の世代人口データがあります。この値に比例して正方形を水平線で分割します。 つまり,上から,20代,30代,40代,50代,60代,70代の人口に比例した長方形 ができます。
 (2) 各長方形を,n人の候補者(A,B,C,...)の支持率をつかって垂線で分割します。 つまり,各年代ごとに,Aの支持率,Bの支持率,Cの支持率,その他の支持率と なります。これらの支持率の和は100%であり,それが正方形の横軸の長さになります。
 (3) 各年代のAの支持率のブロックは色#28A745,Bの支持率のブロックは色#F39C12, Cの支持率のブロックは色#3498DB,その他の支持率のブロックは色#CA8888 とします。
 (4) 各世代の人口数は,{48,68,100,133,132,117}とします。
 (5) 20代の支持率は,{0.27,0.44,0.11,0.18}とします。 
      30代の支持率は,{0.30,0.31,0.18,0.21}とします。 
      40代の支持率は,{0.36,0.32,0.15,0.16}とします。
      50代の支持率は,{0.42,0.25,0.16,0.16}とします。 
      60代の支持率は,{0.41,0.22,0.26,0.11}とします。 
      70代の支持率は,{0.51,0.11,0.31,0.08}とします。

A(Claude 3.5 Sonnet):
using CairoMakie

# データの準備
populations = [48, 68, 100, 133, 132, 117]
total_population = sum(populations)

support_rates = [
    [0.27, 0.44, 0.11, 0.18],  # 20代
    [0.30, 0.31, 0.18, 0.21],  # 30代
    [0.36, 0.32, 0.15, 0.17],  # 40代
    [0.42, 0.25, 0.16, 0.17],  # 50代
    [0.41, 0.22, 0.26, 0.11],  # 60代
    [0.51, 0.11, 0.31, 0.07]   # 70代
]

colors = ["#28A745", "#F39C12", "#3498DB", "#CA8888"]
age_labels = ["18-", "30-", "40-", "50-", "60-", "70-"]

# プロットの作成
fig = Figure(size=(800, 600))
ax = Axis(fig[1, 1], ylabel="人口割合", xlabel="支持率")

current_y = 0.0
for (i, pop) in enumerate(populations)
    segment_height = pop / total_population
    rates = support_rates[i]
    
    current_x = 0.0
    for (j, rate) in enumerate(rates)
        poly!(ax, [current_x, current_x+rate, current_x+rate, current_x], 
              [current_y, current_y, current_y+segment_height, current_y+segment_height], 
              color=colors[j])
        current_x += rate
    end
    
    # 年代ラベルを追加
    text!(ax, -0.05, current_y + segment_height/2, text=age_labels[i], 
          align=(:right, :center), fontsize=14)
    
    current_y += segment_height
end

# 軸の設定
ax.yticks = (collect(0:0.2:1), ["0%", "20%", "40%", "60%", "80%", "100%"])
ax.xticks = (collect(0:0.2:1), ["0%", "20%", "40%", "60%", "80%", "100%"])

# 凡例の追加
elements = [PolyElement(polycolor = c) for c in colors]
Legend(fig[1, 2], elements, ["小池百合子", "石丸伸二", "蓮舫", "その他"], 
       "候補者", tellheight=false, tellwidth=true)

# タイトルの追加
Label(fig[0, :], "年代別支持率", fontsize = 24)

# グラフの表示
display(fig)

図:東京都知事選年代別支持率(人口比例面積表示)

50代以上が6割,40代以下が4割なので,若年層の石丸効果はそれほど効かず,中年層が実数を担っている。蓮舫は60代以上でしっかりと受け止められているが,若年中年層にはまったく浸透していない。

P. S. NHKの年代別支持率のグラフをキャプチャーして,画像ファイルを生成AIに読み込ませて,各候補の支持率%の数値を読み取ろうとした。それらしい数字は出てくるのだけれど,残念ながら,正しい答えは得られなかった。仕方がないので,プリントアウトして,15cmのプラスチック物差しで測って,エクセルに入力して最終的なデータを導いた。

P. P. S. 奥村先生のところに関連するグラフなどがあった。

[1]2024年の東京都知事選挙(奥村晴彦)

0 件のコメント: