R パッケージ一覧library(DT)
library(ggthemes)
library(jpndistrict)
library(magrittr)
library(remotes)
library(rnaturalearth)
library(rmarkdown)
library(sf)
library(tidyverse)jpndistrict パッケージ
をインストールするときには、コンソールに次のコマンドを打ち込み、Enter
key(もしくは Return key)を打つこと東京大学空間情報科学研究センター西沢明先生が作成した選挙区の地図データを使用する
「289小選挙区ポリゴン(詳細版)(shape形式)」をクリックしてダウンロードする
ファイルを解凍する
R プロジェクトフォルダの中に shape
という名前を付けたフォルダを作成し、その中に解凍したファイルを全て入れる
Shape ファイルは sf::st_read
で読み込む
次のコマンドをチャンクに打ち込む
df_dist_map <- st_read("shp/senkyoku289polygon.shp",
options = "ENCODING=CP932",
stringsAsFactors = FALSE) %>%
rename(district = kuname)options: ENCODING=CP932
Reading layer `senkyoku289polygon' from data source
`/Users/masahiko_asano_2023/Dropbox/statistics/INTRO_TO_R/shp/senkyoku289polygon.shp'
using driver `ESRI Shapefile'
Simple feature collection with 290 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 122.9382 ymin: 24.04738 xmax: 145.818 ymax: 45.52539
CRS: NA
df_dist_map)
の中身を確認・衆議院議員総選挙の得票データ hr96-24.csv
をダウンロード
- ダウンロードした hr96-24.csv を
Rプロジェクトフォルダ内に作った data フォルダに入れる
- データを読み込み df_hr と名前をつける
df_hr には 22 個の変数が入っている| 変数名 | 詳細 |
|---|---|
| year | 選挙年 (1996-2024) |
| pref | 都道府県名 |
| ku | 小選挙区名 |
| kun | 小選挙区 |
| rank | 当選順位 |
| wl | 選挙の当落: 1 = 小選挙区当選、2 = 復活当選、0 = 落選 |
| nocand | 立候補者数 |
| seito | 候補者の所属政党 |
| j_name | 候補者の氏名(日本語) |
| name | 候補者の氏名(ローマ字) |
| previous | これまでの当選回数(当該総選挙結果は含まない) |
| gender | 立候補者の性別: “male”, “female” |
| age | 立候補者の年齢 |
| exp | 立候補者が使った選挙費用(総務省届け出) |
| status | 候補者のステータス: 0 = 非現職、1 現職、2 = 元職 |
| vote | 得票数 |
| voteshare | 得票率 (%) |
| eligible | 小選挙区の有権者数 |
| turnout | 小選挙区の投票率 (%) |
| seshu_dummy | 世襲候補者ダミー: 1 = 世襲、0 = 非世襲(地盤世襲 or 非世襲) |
| jiban_seshu | 地盤の受け継ぎ元の政治家の氏名と関係 |
| nojiban_seshu | 世襲元の政治家の氏名と関係 |
year, ku, kun,
age) だけを抜き出すdf_hr を確認# A tibble: 6 × 4
year ku kun age
<dbl> <chr> <dbl> <dbl>
1 1996 aichi 1 47
2 1996 aichi 1 72
3 1996 aichi 1 53
4 1996 aichi 1 43
5 1996 aichi 1 51
6 1996 aichi 1 51
df_dist_map と
ここで入手した「候補者年齢データ」df_hr は「選挙区」の値(表し方)が異なるSimple feature collection with 6 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 126.7099 ymin: 25.8132 xmax: 142.2371 ymax: 35.63099
CRS: NA
kucode district ken ku geometry
1 2809 兵庫9区 28 9 MULTIPOLYGON (((135.0025 34...
2 1303 東京3区 13 3 MULTIPOLYGON (((139.4133 34...
3 4010 福岡10区 40 10 MULTIPOLYGON (((131.0241 33...
4 4203 長崎3区 42 3 MULTIPOLYGON (((129.7689 33...
5 4703 沖縄3区 47 3 MULTIPOLYGON (((128.0207 27...
6 4701 沖縄1区 47 1 MULTIPOLYGON (((127.333 26....
| 変数名 | 値 | |
|---|---|---|
年齢データ (df_age) |
ku, kun | aichi, 1 |
マップデータ (df_dist_map) |
kuname | 愛知1区 |
df_age
→ 漢字と数字が分離(例えば「aichi」と「1」)
df_dist_map
→ 漢字と数字が混合(例えば「愛知1区」)
→ どちらかに統一する必要がある
→ ここでは「年齢データ」の選挙区名を「愛知1区」のように変更
→ jpndistrict::jpnprefsを使って日本語の都道府県名を取得する
df_pref_name <- jpndistrict::jpnprefs %>%
mutate(
prefecture_en = str_remove_all(prefecture_en, c("-ken" = "", #-kenを削除
"-to" = "", #-to を削除
"-fu" = "")), #-fu を削除
prefecture_en = str_to_lower(prefecture_en),
prefecture = str_remove_all(prefecture, c("県" = "", # 県を削除
"都" = "", # 都を削除
"府" = "")) # 府を削除
) %>%
select(prefecture, ku = prefecture_en) # 変数を 2 つに絞る # A tibble: 6 × 2
prefecture ku
<chr> <chr>
1 北海道 hokkaido
2 青森 aomori
3 岩手 iwate
4 宮城 miyagi
5 秋田 akita
6 山形 yamagata
df_ageとdf_pref_nameをマージ → 日本語の選挙区名を作成df_hr17 と名前を付けるdf_hr17 <- df_hr %>%
left_join(df_pref_name, "ku") %>%
filter(year == 2017) %>%
mutate(
district = str_c(prefecture, kun, "区")
) df_hr17 の変数を確認する [1] "year" "pref" "ku" "kun"
[5] "j_name" "wl" "rank" "nocand"
[9] "seito" "...10" "gender" "name"
[13] "previous" "age" "exp" "status"
[17] "vote" "voteshare" "eligible" "turnout"
[21] "seshu_dummy" "jiban_seshu" "nojiban_seshu" "prefecture"
[25] "district"
district, age) だけに絞る# A tibble: 6 × 2
district age
<chr> <dbl>
1 愛知1区 53
2 愛知1区 42
3 愛知1区 54
4 愛知2区 51
5 愛知2区 45
6 愛知2区 31
age の型が character <chr>
なので、数値型 (numeric) に変更するdf_dist_mapとdf_hr17_ageをマージする# A tibble: 6 × 2
district age_mean
<chr> <dbl>
1 三重1区 57.5
2 三重2区 68
3 三重3区 51.2
4 三重4区 54.7
5 京1区 63
6 京2区 47.7
Simple feature collection with 6 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 126.7099 ymin: 25.8132 xmax: 142.2371 ymax: 35.63099
CRS: NA
kucode district ken ku geometry
1 2809 兵庫9区 28 9 MULTIPOLYGON (((135.0025 34...
2 1303 東京3区 13 3 MULTIPOLYGON (((139.4133 34...
3 4010 福岡10区 40 10 MULTIPOLYGON (((131.0241 33...
4 4203 長崎3区 42 3 MULTIPOLYGON (((129.7689 33...
5 4703 沖縄3区 47 3 MULTIPOLYGON (((128.0207 27...
6 4701 沖縄1区 47 1 MULTIPOLYGON (((127.333 26....
df_hr17_age と
df_dist_map) を確認# A tibble: 6 × 2
district age_mean
<chr> <dbl>
1 三重1区 57.5
2 三重2区 68
3 三重3区 51.2
4 三重4区 54.7
5 京1区 63
6 京2区 47.7
district)
を手がかりにしてマージするmap_dist_shizuoka_age <- df_dist_map_age %>%
filter(str_detect(district, "静岡")) %>%
ggplot() +
geom_sf(aes(fill = age_mean)) +
scale_fill_distiller(name = "候補者の年齢の平均",
palette = "YlOrRd", direction = 1) +
theme_map(base_family = "HiraginoSans-W3") +
theme(legend.position = c(.1, -.1),
legend.direction = "horizontal",
legend.title = element_text(size = 15),
legend.text = element_text(size = 15),
legend.key.size = unit(1, "cm"),
legend.key.width = unit(3,"cm")) +
coord_sf(datum = NA)
map_dist_shizuoka_agefig に保存するfig
という名称のフォルダを作っておくmap_dblで座標の重心を設定map_dist_shizuoka_text <- df_dist_map_age %>%
filter(str_detect(district, "静岡")) %>%
mutate(
text_x = map_dbl(geometry, ~st_centroid(.x)[[1]]),
text_y = map_dbl(geometry, ~st_centroid(.x)[[2]]),
district = str_remove_all(district, "静岡")
) %>%
ggplot() +
geom_sf(aes(fill = age_mean)) +
geom_label(aes(x = text_x, y = text_y, label = district),
size = 5, family = "HiraginoSans-W3") +
scale_fill_distiller(name = "候補者の年齢の平均",
palette = "YlOrRd", direction = 1) +
theme_map(base_family = "HiraginoSans-W3") +
theme(legend.position = c(.1, -.1),
legend.direction = "horizontal",
legend.title = element_text(size = 15),
legend.text = element_text(size = 15),
legend.key.size = unit(1, "cm"),
legend.key.width = unit(3,"cm")) +
coord_sf(datum = NA)
map_dist_shizuoka_textfig に保存するQ1: 「1.3.2.
マップに衆院選挙区名を表示させる」の手法を参考にして、あなたが興味ある都道府県をひとつ選び、2017年総選挙における「立候補者数
(nocand) 」規模別のマップを描きなさい
Q2: 得られた結果からどのようなことが言えるか説明しなさい
参考文献