地図

ここでは,都道府県ごとの農業協同組合の数の視覚的な把握を試みます。

e-Statを探すと,都道府県ごとの農協の数に関する統計データが存在することがわかります。

ノート農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計 都道府県別業種別現在数

それぞれのページからExcelファイルをダウンロードできます。 これらのファイルをRで読み込む前に,Excelで開いてみます。 これは参った。 ヘッダーがゴチャゴチャしています。 ここで,Excelではグラフ作成時にセルを指定できるから何の問題もないと考える人にとっては,以下の説明は無益です。

以下では,e-StatのAPIを使って,Rに統計データを取り込むことから始めます。

1 e-Statからデータ取得

次のコードを実行し,欲しいデータを取得しましょう。 コードにある statsDataId = "0002066880" の数字はアクセスしたい統計データのIDです。 Excelファイルだと3つ開かなければなりませんでしたが,APIを使うとデータ取得は一度だけですむことがわかります。

library(estatapi)
このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
appId <- keyring::key_get("e-stat")
statsDataId <- "0002066880"
(meta_info <- estat_getMetaInfo(appId = appId, statsDataId = statsDataId))
Warning: `update_list()` was deprecated in purrr 1.0.0.
ℹ The deprecated feature was likely used in the estatapi package.
  Please report the issue at
  <https://github.com/yutannihilation/estatapi/issues>.
$cat01
# A tibble: 57 × 4
   `@code` `@name` `@level` `@parentCode`
   <chr>   <chr>   <chr>    <chr>        
 1 001     北海道  2        057          
 2 002     青森    3        008          
 3 003     岩手    3        008          
 4 004     宮城    3        008          
 5 005     秋田    3        008          
 6 006     山形    3        008          
 7 007     福島    3        008          
 8 008     東北計  2        057          
 9 009     茨城    3        019          
10 010     栃木    3        019          
# ℹ 47 more rows

$cat02
# A tibble: 33 × 5
   `@code` `@name`                                `@level` `@unit` `@parentCode`
   <chr>   <chr>                                  <chr>    <chr>   <chr>        
 1 1001    出資組合(第2表)_総合農協            3        件      1012         
 2 1002    出資組合(第2表)_総合農協_うち共済事業を行う農協…… 4        件      1001         
 3 1003    出資組合(第2表)_一般農協            3        件      1012         
 4 1004    出資組合(第2表)_畜産                3        件      1012         
 5 1005    出資組合(第2表)_酪農                3        件      1012         
 6 1006    出資組合(第2表)_養鶏                3        件      1012         
 7 1007    出資組合(第2表)_牧野管理            3        件      1012         
 8 1008    出資組合(第2表)_園芸特産            3        件      1012         
 9 1009    出資組合(第2表)_農村工業            3        件      1012         
10 1010    出資組合(第2表)_農事放送            3        件      1012         
# ℹ 23 more rows

$.names
# A tibble: 2 × 2
  id    name                   
  <chr> <chr>                  
1 cat01 (R006-02-2-002)都道府県
2 cat02 (r006-02-1-002)区分    
# 統計データ取得
df <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
Fetching record 1-1881... (total: 1881 records)
df
# A tibble: 1,881 × 7
   cat01_code `(R006-02-2-002)都道府県` cat02_code `(r006-02-1-002)区分`   unit 
   <chr>      <chr>                     <chr>      <chr>                   <chr>
 1 001        北海道                    1001       出資組合(第2表)_総合農協…… 件   
 2 001        北海道                    1002       出資組合(第2表)_総合農協_うち共済事業を… 件   
 3 001        北海道                    1003       出資組合(第2表)_一般農協…… 件   
 4 001        北海道                    1004       出資組合(第2表)_畜産 件   
 5 001        北海道                    1005       出資組合(第2表)_酪農 件   
 6 001        北海道                    1006       出資組合(第2表)_養鶏 件   
 7 001        北海道                    1007       出資組合(第2表)_牧野管理…… 件   
 8 001        北海道                    1008       出資組合(第2表)_園芸特産…… 件   
 9 001        北海道                    1009       出資組合(第2表)_農村工業…… 件   
10 001        北海道                    1010       出資組合(第2表)_農事放送…… 件   
# ℹ 1,871 more rows
# ℹ 2 more variables: value <dbl>, annotation <chr>
df2 <- df

str(df2)
tibble [1,881 × 7] (S3: tbl_df/tbl/data.frame)
 $ cat01_code             : chr [1:1881] "001" "001" "001" "001" ...
 $ (R006-02-2-002)都道府県: chr [1:1881] "北海道" "北海道" "北海道" "北海道" ...
 $ cat02_code             : chr [1:1881] "1001" "1002" "1003" "1004" ...
 $ (r006-02-1-002)区分    : chr [1:1881] "出資組合(第2表)_総合農協" "出資組合(第2表)_総合農協_うち共済事業を行う農協" "出資組合(第2表)_一般農協" "出資組合(第2表)_畜産" ...
 $ unit                   : chr [1:1881] "件" "件" "件" "件" ...
 $ value                  : num [1:1881] 104 99 7 9 5 2 1 1 2 NA ...
 $ annotation             : chr [1:1881] NA NA NA NA ...
# 都道府県の順番を保持する
(pref <- unique(df2$`(R006-02-2-002)都道府県`))
 [1] "北海道"   "青森"     "岩手"     "宮城"     "秋田"     "山形"    
 [7] "福島"     "東北計"   "茨城"     "栃木"     "群馬"     "埼玉"    
[13] "千葉"     "東京"     "神奈川"   "山梨"     "長野"     "静岡"    
[19] "関東計"   "新潟"     "富山"     "石川"     "福井"     "北陸計"  
[25] "岐阜"     "愛知"     "三重"     "東海計"   "滋賀"     "京都"    
[31] "大阪"     "兵庫"     "奈良"     "和歌山"   "近畿計"   "鳥取"    
[37] "島根"     "岡山"     "広島"     "山口"     "徳島"     "香川"    
[43] "愛媛"     "高知"     "中四国計" "福岡"     "佐賀"     "長崎"    
[49] "熊本"     "大分"     "宮崎"     "鹿児島"   "九州計"   "沖縄"    
[55] "2県以上" "全国区域" "全国計"  
# 不要な都道府県名を削除する
(pref <- pref[-grep("計$|^2|^全", pref)])
 [1] "北海道" "青森"   "岩手"   "宮城"   "秋田"   "山形"   "福島"   "茨城"  
 [9] "栃木"   "群馬"   "埼玉"   "千葉"   "東京"   "神奈川" "山梨"   "長野"  
[17] "静岡"   "新潟"   "富山"   "石川"   "福井"   "岐阜"   "愛知"   "三重"  
[25] "滋賀"   "京都"   "大阪"   "兵庫"   "奈良"   "和歌山" "鳥取"   "島根"  
[33] "岡山"   "広島"   "山口"   "徳島"   "香川"   "愛媛"   "高知"   "福岡"  
[41] "佐賀"   "長崎"   "熊本"   "大分"   "宮崎"   "鹿児島" "沖縄"  
# データフレームから不要な都道府県名を削除する
df2 <- df2 |>
  filter(`(R006-02-2-002)都道府県` %in% pref)
unique(df2$`(R006-02-2-002)都道府県`)
 [1] "北海道" "青森"   "岩手"   "宮城"   "秋田"   "山形"   "福島"   "茨城"  
 [9] "栃木"   "群馬"   "埼玉"   "千葉"   "東京"   "神奈川" "山梨"   "長野"  
[17] "静岡"   "新潟"   "富山"   "石川"   "福井"   "岐阜"   "愛知"   "三重"  
[25] "滋賀"   "京都"   "大阪"   "兵庫"   "奈良"   "和歌山" "鳥取"   "島根"  
[33] "岡山"   "広島"   "山口"   "徳島"   "香川"   "愛媛"   "高知"   "福岡"  
[41] "佐賀"   "長崎"   "熊本"   "大分"   "宮崎"   "鹿児島" "沖縄"  
df2$`(R006-02-2-002)都道府県` <- factor(df2$`(R006-02-2-002)都道府県`, levels = pref)

unique(df2$`(r006-02-1-002)区分`)
 [1] "出資組合(第2表)_総合農協"                                    
 [2] "出資組合(第2表)_総合農協_うち共済事業を行う農協"             
 [3] "出資組合(第2表)_一般農協"                                    
 [4] "出資組合(第2表)_畜産"                                        
 [5] "出資組合(第2表)_酪農"                                        
 [6] "出資組合(第2表)_養鶏"                                        
 [7] "出資組合(第2表)_牧野管理"                                    
 [8] "出資組合(第2表)_園芸特産"                                    
 [9] "出資組合(第2表)_農村工業"                                    
[10] "出資組合(第2表)_農事放送"                                    
[11] "出資組合(第2表)_その他"                                      
[12] "出資組合(第2表)_出資組合計"                                  
[13] "非出資組合(第3表)_一般農協"                                  
[14] "非出資組合(第3表)_畜産"                                      
[15] "非出資組合(第3表)_酪農"                                      
[16] "非出資組合(第3表)_養鶏"                                      
[17] "非出資組合(第3表)_牧野管理"                                  
[18] "非出資組合(第3表)_園芸特産"                                  
[19] "非出資組合(第3表)_農村工業"                                  
[20] "非出資組合(第3表)_農事放送"                                  
[21] "非出資組合(第3表)_その他"                                    
[22] "非出資組合(第3表)_非出資組合計"                              
[23] "非出資組合(第3表)_出資・非出資組合合計"                      
[24] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_一般農協"
[25] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_畜産"    
[26] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_酪農"    
[27] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_養鶏"    
[28] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_牧野管理"
[29] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_園芸特産"
[30] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_農村工業"
[31] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_農事放送"
[32] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_その他"  
[33] "(参考1)出資組合と非出資組合の計(専門農協、業種別)_計"      
df2$`(r006-02-1-002)区分` <- factor(df2$`(r006-02-1-002)区分`, levels = unique(df2$`(r006-02-1-002)区分`))
df2 <- df2 |>
  filter(!grepl("計$", df2$`(r006-02-1-002)区分`))
df2$`(r006-02-1-002)区分` <- droplevels(df2$`(r006-02-1-002)区分`)
unique(df2$`(r006-02-1-002)区分`)
 [1] 出資組合(第2表)_総合農協                                    
 [2] 出資組合(第2表)_総合農協_うち共済事業を行う農協             
 [3] 出資組合(第2表)_一般農協                                    
 [4] 出資組合(第2表)_畜産                                        
 [5] 出資組合(第2表)_酪農                                        
 [6] 出資組合(第2表)_養鶏                                        
 [7] 出資組合(第2表)_牧野管理                                    
 [8] 出資組合(第2表)_園芸特産                                    
 [9] 出資組合(第2表)_農村工業                                    
[10] 出資組合(第2表)_農事放送                                    
[11] 出資組合(第2表)_その他                                      
[12] 非出資組合(第3表)_一般農協                                  
[13] 非出資組合(第3表)_畜産                                      
[14] 非出資組合(第3表)_酪農                                      
[15] 非出資組合(第3表)_養鶏                                      
[16] 非出資組合(第3表)_牧野管理                                  
[17] 非出資組合(第3表)_園芸特産                                  
[18] 非出資組合(第3表)_農村工業                                  
[19] 非出資組合(第3表)_農事放送                                  
[20] 非出資組合(第3表)_その他                                    
[21] (参考1)出資組合と非出資組合の計(専門農協、業種別)_一般農協
[22] (参考1)出資組合と非出資組合の計(専門農協、業種別)_畜産    
[23] (参考1)出資組合と非出資組合の計(専門農協、業種別)_酪農    
[24] (参考1)出資組合と非出資組合の計(専門農協、業種別)_養鶏    
[25] (参考1)出資組合と非出資組合の計(専門農協、業種別)_牧野管理
[26] (参考1)出資組合と非出資組合の計(専門農協、業種別)_園芸特産
[27] (参考1)出資組合と非出資組合の計(専門農協、業種別)_農村工業
[28] (参考1)出資組合と非出資組合の計(専門農協、業種別)_農事放送
[29] (参考1)出資組合と非出資組合の計(専門農協、業種別)_その他  
29 Levels: 出資組合(第2表)_総合農協 ...
str(df2)
tibble [1,363 × 7] (S3: tbl_df/tbl/data.frame)
 $ cat01_code             : chr [1:1363] "001" "001" "001" "001" ...
 $ (R006-02-2-002)都道府県: Factor w/ 47 levels "北海道","青森",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ cat02_code             : chr [1:1363] "1001" "1002" "1003" "1004" ...
 $ (r006-02-1-002)区分    : Factor w/ 29 levels "出資組合(第2表)_総合農協",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ unit                   : chr [1:1363] "件" "件" "件" "件" ...
 $ value                  : num [1:1363] 104 99 7 9 5 2 1 1 2 NA ...
 $ annotation             : chr [1:1363] NA NA NA NA ...

2 都道府県別データの作図

総合農協の数を都道府県別に比較してみましょう。

たまに見かけるのが,横軸を都道府県とした折れ線グラフです。

library(ggplot2)

df_sougou <- df2 |>
  filter(`(r006-02-1-002)区分` == "出資組合(第2表)_総合農協") |>
  droplevels()

p <- ggplot(data = df_sougou) +
  geom_line(aes(x = `(R006-02-2-002)都道府県`, y = value), group = "") +
  labs(
    title = "都道府県別総合農協の数",
    y = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme(
    axis.title.x = element_blank(),
    axis.text.x = element_text(angle = 90, hjust = 1, vjust = .5)
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

最後のところでエラーが出る場合は,g だけにして,プラス以降を入力しないようにしてください。 文字化けするかもしれませんが,気にしないようにしましょう(文字化けを修正するのは大変)。

しかし,こういう場合に折れ線グラフを使うのは間違っています。 何が間違っているか考えてみてください。 この場合,棒グラフの方がより望ましいです。

p <- ggplot(data = df_sougou) +
  geom_bar(aes(x = `(R006-02-2-002)都道府県`, y = value), stat = "identity") +
  labs(
    title = "都道府県別総合農協の数",
    y = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme(
    axis.title.x = element_blank(),
    axis.text.x = element_text(angle = 90, hjust = 1, vjust = .5)
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

この図は図として正しいです。 ただし,大変見づらいのではないでしょうか。 見づらい理由は,横軸(都道府県)が細分化されているのに加えて,北海道の値だけが大きいためです。 なお,グラフを描かずとも,次のコマンドでほぼ類似の情報が得られます。

summary(df_sougou$value)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    5.00   11.00   11.98   14.50  104.00 
stem(df_sougou$value, scale = 2)

  The decimal point is 1 digit(s) to the right of the |

   0 | 11112233334557778899
   1 | 000122333344444555666677
   2 | 00
   3 | 
   4 | 
   5 | 
   6 | 
   7 | 
   8 | 
   9 | 
  10 | 4

それでは,どうすれば見やすくなるでしょうか。 このとき,決して棒グラフの途中を省略して,北海道の棒を低くしてはなりません。 途中を省略した棒グラフを幽霊グラフと呼ぶことがあります(【連載】ねこでも分かる!いかさまグラフにはもうダマされない!!「第5回 棒グラフ(1)」 - ed-ict|授業でもっとICT活用を参照)。

北海道を除いたグラフを作成してみましょう。

p <- ggplot(data = df_sougou[df_sougou$`(R006-02-2-002)都道府県` != "北海道", ]) +
  geom_bar(aes(x = `(R006-02-2-002)都道府県`, y = value), stat = "identity", fill = "gray", colour = "black") +
  geom_hline(yintercept = mean(df_sougou[df_sougou$`(R006-02-2-002)都道府県` != "北海道", ]$value), colour = "red", linetype = "dashed") +
  labs(
    title = "都府県別総合農協数",
    y = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme_minimal() +
  theme(
    axis.title.x = element_blank(),
    axis.text.x = element_text(angle = 90, hjust = 1, vjust = .5)
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

北海道を除くとともに,平均値を赤色の点線で図に示しました。 やはり残念なグラフになってしまいます。 しかし,まったく無意味とは言えません。 というのも,この棒グラフから,総合農協の数は西日本より,東日本の方が多い傾向にあることが分かるからです。

棒グラフと似たものにロリポップチャートがあり,次のように点と線の組み合わせで表現します。

library(geomtextpath)

p <- ggplot(data = df_sougou) +
  geom_segment(
    aes(
      x = 0,
      y = `(R006-02-2-002)都道府県`,
      xend = value,
      yend = `(R006-02-2-002)都道府県`,
      colour = ifelse(value > mean(value), "black", "white")
    ),
    linewidth = .8
  ) +
  geom_point(
    aes(
      x = value,
      y = `(R006-02-2-002)都道府県`,
      colour = ifelse(value > mean(value), "black", "white")
    )
  ) +
  scale_y_discrete(limits = rev) +
  scale_color_brewer(palette = "Paired", direction = 1) +
# scale_color_brewer(palette = "Paired", direction = -1) +
  geom_textvline(label = paste0("mean = ", format(round(mean(df_sougou$value), 1), nsmall = 1)), xintercept = mean(df_sougou$value), colour = "red", linetype = "dashed", hjust = 0, vjust = -.5) +
  labs(
    title = "都道府県別総合農協の数",
    y = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",
    axis.title = element_blank()
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

ここでは,総合農協の数が全国平均より少ない都道府県を強調しています。 逆に,多い都道府県を強調したければ,direction-1 にするだけです。

縦軸で都道府県の順位を表現することもできます。

p <- ggplot(data = df_sougou) +
  geom_segment(
    aes(
      x = 0,
      y = `(R006-02-2-002)都道府県`[order(value)],
      xend = value[order(value)],
      yend = `(R006-02-2-002)都道府県`[order(value)]
    ),
    colour = "darkorange",
    linewidth = .8
  ) +
  geom_point(
    aes(
      x = value[order(value)],
      y = `(R006-02-2-002)都道府県`[order(value)]
    ),
    colour = "darkorange"
  ) +
  scale_y_discrete(limits = df_sougou$`(R006-02-2-002)都道府県`[order(df_sougou$value)]) +
  geom_textvline(label = paste0("mean = ", format(round(mean(df_sougou$value), 1), nsmall = 1)), xintercept = mean(df_sougou$value), colour = "gray60", linetype = "dashed", hjust = 0, vjust = -.5) +
  labs(
    title = "都道府県別総合農協数",
    y = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",
    axis.title = element_blank()
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

手軽にロリポップチャートを描く方法はあるが,細かいカスタマイズはできないかもしれない。

library(ggpubr)

df_sougou$x <- df_sougou$`(R006-02-2-002)都道府県`

p <- ggdotchart(
  data = df_sougou, x = "x", y = "value",
  color = "darkorange",
  sorting = "descending",
  add = "segments",
  rotate = TRUE,
  dot.size = 4,
  label = round(df_sougou$value),
  font.label = list(color = "white", size = 6, vjust = 0.5),
  ggtheme = theme_pubr()
) +
  labs(
    title = "都道府県別総合農協の数",
    y = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和3年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme(
    legend.position = "none",
    axis.title = element_blank()
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

これらのグラフは諦めて,日本地図に表示するとどうなるでしょうか。

3 都道府県別に色分けした地図

3.1 都道府県別総合農協の数

library(rnaturalearth)
library(rnaturalearthhires)

japan_map <- rnaturalearth::ne_states("Japan", returnclass = "sf")
japan_map$pref <- japan_map$name_ja

# 農協のデータに「都府県」の文字を追加する
df_sougou$pref <- df_sougou$`(R006-02-2-002)都道府県`
df_sougou$pref <- ifelse(
  df_sougou$pref %in% c("北海道", "東京", "京都", "大阪"),
  paste0(df_sougou$pref, c("", "都", "府", "府")[match(df_sougou$pref, c("北海道", "東京", "京都", "大阪"))]),
  paste0(df_sougou$pref, "県")
)

japan_map2 <- dplyr::left_join(japan_map, df_sougou, by = "pref")

p <- ggplot(data = japan_map2) +
  geom_sf(aes(fill = value)) +
  scale_fill_viridis_c() +
  labs(
    title = "都道府県別総合農協の数",
    fill = "総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme_void()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

北海道だけが極端に色が濃くなりました。 実際の数値がこうであるのだから,これはこれで問題ないですが,これだけの情報なら地図で示すほどでもない気がします。 北海道を除いた地図を作成すべきでしょうか。 いやそれは馬鹿げているでしょう。

そこで,農協の数の順位に応じて都道府県を4段階に分けて,色を塗ってみます。 これにより,農協の数が相対的に多い都道府県と少ない都道府県が分かるようになります。 その前に,表示範囲が広いので,もう少し本州を中心とした図にしましょう。

library(rmapshaper)

# 離島を削除する
japan_map_shrinked <- rmapshaper::ms_filter_islands(japan_map2, min_area = 300000000)
# japan_map_shrinked <- rmapshaper::ms_filter_islands(japan_map2, min_area = 1301448169)# 沖縄県が消える ※沖縄本島の面積は1,207.00km2

p <- ggplot(data = japan_map_shrinked) +
  geom_sf(aes(fill = value)) +
  scale_fill_viridis_b() +
  labs(
    title = "都道府県別総合農協の数",
    fill = "総合農協の数(4段階)",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme_void() +
  theme(plot.caption = element_text(size = 5))
p + theme(text = element_text(family = "HiraKakuProN-W3"))

ここでは,一定の面積より小さい離島を削除しました。 離島を削除することに問題はあるかもしれません。 描画範囲を指定することも考えましたたが,いずれにしてもどこを消すかを判断しなければならず,苦渋の決断が強いられます。 沖縄県を切り取って左上に表示する方法もよく用いられるが,それだけではこの問題は解決しません。 おそらく専門家はどうすべきか答えを持っているはずであるが,私はその答えを知りません。 ここでの目的は都道府県別の比較であるため,全都道府県(の大半)が表示されていれば問題ないと考え,このような図にしました。

ここで,bertin パッケージを使うとどうなるか試してみます。

library(NipponMap)
library(sf)

nippon_map <- sf::read_sf(system.file("shapes/jpn.shp", package = "NipponMap")[1], crs = "WGS84")
nippon_map$name
 [1] "Hokkaido"  "Aomori"    "Iwate"     "Miyagi"    "Akita"     "Yamagata" 
 [7] "Fukushima" "Ibaraki"   "Tochigi"   "Gunma"     "Saitama"   "Chiba"    
[13] "Tokyo"     "Kanagawa"  "Niigata"   "Toyama"    "Ishikawa"  "Fukui"    
[19] "Yamanashi" "Nagano"    "Gifu"      "Shizuoka"  "Aichi"     "Mie"      
[25] "Shiga"     "Kyoto"     "Osaka"     "Hyogo"     "Nara"      "Wakayama" 
[31] "Tottori"   "Shimane"   "Okayama"   "Hiroshima" "Yamaguchi" "Tokushima"
[37] "Kagawa"    "Ehime"     "Kochi"     "Fukuoka"   "Saga"      "Nagasaki" 
[43] "Kumamoto"  "Oita"      "Miyazaki"  "Kagoshima" "Okinawa"  
nippon_map$pref <- df_sougou$pref# こういう強引なことは本来はやってはいけない
nippon_map2 <- dplyr::left_join(nippon_map, df_sougou, by = "pref")

library(bertin)

regions_valued <- bertin::make_points(
  polygon = nippon_map2,
  n = 45,
  square = TRUE
)

p <- ggplot() +
  geom_sf(
    data = nippon_map2,
    mapping = aes(geometry = geometry),
    inherit.aes = FALSE,
    color = alpha("black", .1)
  ) +
  geom_sf(data = regions_valued, aes(size = value)) +
  scale_size(range = c(1, 4)) +
  labs(
    title = "都道府県別総合農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計 確報 令和4年度農業協同組合等現在数統計』\n(https://www.e-stat.go.jp/stat-search/files?stat_infid=000040060822)"
  ) +
  theme_void()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

この地図は先ほどの地図と若干異なることに気づいたかもしれません。 先ほどとは異なるパッケージで地図を描画しています。

3.2 都道府県別専門農協の数

さて,これまでを振り返ると総合農協の数しか図示してきませんでした。 次に,専門農協の数を図示してみましょう。

df_senmon <- df2 |>
  filter(grepl("(参考1)出資組合と非出資組合の計(専門農協、業種別)_", `(r006-02-1-002)区分`)) |>
  droplevels()
levels(df_senmon$`(r006-02-1-002)区分`) <- sub("(参考1)出資組合と非出資組合の計(専門農協、業種別)_", "", levels(df_senmon$`(r006-02-1-002)区分`))

# 農協のデータに「都府県」の文字を追加する
df_senmon$pref <- df_senmon$`(R006-02-2-002)都道府県`
df_senmon$pref <- ifelse(
  df_senmon$pref %in% c("北海道", "東京", "京都", "大阪"),
  paste0(df_senmon$pref, c("", "都", "府", "府")[match(df_senmon$pref, c("北海道", "東京", "京都", "大阪"))]),
  paste0(df_senmon$pref, "県")
)

# 地図上のNAの色がグレーになるため,NAを0にする
# df_senmon$value[is.na(df_senmon$value)] <- 0

nippon_map3 <- dplyr::left_join(nippon_map, df_senmon, by = "pref")

p <- ggplot(data = nippon_map3) +
  geom_sf(aes(fill = value)) +
  scale_fill_distiller(name = "専門農協の数", palette = "YlOrRd", direction = 1) +
  facet_wrap(vars(`(r006-02-1-002)区分`)) +
  theme_classic() +
  theme(
    axis.line = element_blank(),
    axis.ticks = element_blank(),
    axis.text = element_blank(),
    plot.caption = element_text(size = 5)
  )
p + theme(text = element_text(family = "HiraKakuProN-W3"))

岩手県には牧野管理の専門農協が多いことが分かる。 この差は以前から続いているのでしょうか。 調べてみましょう。

# 平成27年度農業協同組合等現在数統計
statsDataId <- "0003350673"
df2015 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
pref <- grep("計$|^2県|^全", unique(df2015$`(R006-2015-002)都道府県`), value = TRUE, invert = TRUE)
df2015 <- df2015 |>
  filter(`(R006-2015-002)都道府県` %in% pref) |>
  mutate(`(R006-2015-002)都道府県` = sub("都$|府$|県$", "", `(R006-2015-002)都道府県`)) |>
  filter(`(R006-2015-004)単位農協の部業種別現在数計` != "計") |>
  rename(
    "都道府県" = `(R006-2015-002)都道府県`,
    "区分" = `(R006-2015-004)単位農協の部業種別現在数計`,
    "cat02_code" = "area_code"
  ) |>
  mutate(year = 2015)

# 平成28年度農業協同組合等現在数統計
statsDataId <- "0003350618"
df2016 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
df2016 <- df2016 |>
  filter(`(R006-2016-002)都道府県` %in% pref) |>
  mutate(`(R006-2016-002)都道府県` = sub("都$|府$|県$", "", `(R006-2016-002)都道府県`)) |>
  filter(`(R006-2016-004)単位農協の部業種別現在数計` != "計") |>
  rename(
    "都道府県" = `(R006-2016-002)都道府県`,
    "区分" = `(R006-2016-004)単位農協の部業種別現在数計`,
    "cat02_code" = "area_code"
  ) |>
  mutate(year = 2016)

# 平成29年度農業協同組合等現在数統計
statsDataId <- "0003283565"
df2017 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
df2017 <- df2017 |>
  filter(`(R006-2017-002)都道府県` %in% pref) |>
  mutate(`(R006-2017-002)都道府県` = sub("都$|府$|県$", "", `(R006-2017-002)都道府県`)) |>
  filter(`(R006-2017-004)単位農協の部業種別現在数計` != "計") |>
  rename(
    "都道府県" = `(R006-2017-002)都道府県`,
    "区分" = `(R006-2017-004)単位農協の部業種別現在数計`,
    "cat02_code" = "area_code"
  ) |>
  mutate(year = 2017)

# 令和元年度農業協同組合等現在数統計
statsDataId <- "0003417778"
df2019 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
df2019 <- df2019 |>
  filter(`(R006-2019-002)都道府県` %in% pref) |>
  mutate(`(R006-2019-002)都道府県` = sub("都$|府$|県$", "", `(R006-2019-002)都道府県`)) |>
  filter(`(R006-2019-004)単位農協の部業種別現在数計` != "計") |>
  rename(
    "都道府県" = `(R006-2019-002)都道府県`,
    "区分" = `(R006-2019-004)単位農協の部業種別現在数計`,
    "cat02_code" = "area_code"
  ) |>
  mutate(year = 2019)

# 令和2年度農業協同組合等現在数統計
statsDataId <- "0001887884"
df2020 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
# 都道府県の表記が変わった
pref <- grep("計$|^2県|^全", unique(df2020$`(R006-02-2-002)都道府県`), value = TRUE, invert = TRUE)
df2020 <- df2020 |>
  filter(
    `(R006-02-2-002)都道府県` %in% pref,
    `(R006-02-1-004)単位農協の部業種別現在数計` != "計"
  ) |>
  rename(
    "都道府県" = `(R006-02-2-002)都道府県`,
    "区分" = `(R006-02-1-004)単位農協の部業種別現在数計`
  ) |>
  mutate(year = 2020)

# 令和3年度農業協同組合等現在数統計
statsDataId <- "0002003132"
df2021 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
df2021 <- df2021 |>
  filter(
    `(R006-02-2-002)都道府県` %in% pref,
    grepl("(参考1)出資組合と非出資組合の計(専門農協、業種別)_", `(R006-03-1-001)総括表`),
    !grepl("計$", `(R006-03-1-001)総括表`)
  ) |>
  mutate(`(R006-03-1-001)総括表` = sub("(参考1)出資組合と非出資組合の計(専門農協、業種別)_", "", `(R006-03-1-001)総括表`)) |>
  rename(
    "都道府県" = `(R006-02-2-002)都道府県`,
    "区分" = `(R006-03-1-001)総括表`
  ) |>
  mutate(year = 2021)

# 令和4年度農業協同組合等現在数統計
df2022 <- df2 |>
  filter(grepl("(参考1)出資組合と非出資組合の計(専門農協、業種別)_", `(r006-02-1-002)区分`)) |>
  droplevels() |>
  mutate(区分 = sub("(参考1)出資組合と非出資組合の計(専門農協、業種別)_", "", `(r006-02-1-002)区分`)) |>
  select(-`(r006-02-1-002)区分`) |>
  rename("都道府県" = `(R006-02-2-002)都道府県`) |>
  mutate(year = 2022)

df_senmon2 <- rbind(df2015, df2016, df2017, df2019, df2020, df2021, df2022)
df_senmon2$区分 <- factor(df_senmon2$区分, levels = unique(df_senmon2$区分))
df_senmon2$都道府県 <- factor(df_senmon2$都道府県, levels = unique(df_senmon2$都道府県))

library(gghighlight)
library(ggsci)

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[1]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 15) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[1], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[2]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 8) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[2], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[3]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 10) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[3], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[4]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 3) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[4], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[5]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 50) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[5], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[6]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 10) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[6], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[7]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 1) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[7], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

library(scales)

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[8]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 0) +
  scale_y_continuous(labels = scales::number_format(accuracy = 1)) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[8], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_senmon2 |> filter(区分 == levels(区分)[9]), aes(x = year, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(max(value) > 8) +
  scale_color_d3() +
  labs(
    title = paste0("都道府県別専門農協の数の推移", "(", levels(df_senmon2$区分)[9], ")"),
    x = "年度",
    y = "専門農協の数",
    caption = "出典:農林水産省『農業協同組合等現在数統計』"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))