データの整形

ここでは,農業協同組合の組合員数の推移の把握を試みます。

ノート農業協同組合及び同連合会一斉調査 確報 総合農協統計表
ノート農業協同組合及び同連合会一斉調査 / 長期累年

これまで,e-Statから取得したデータをグラフにするまで,何の迷いもなくRのコードを書いているかのように,説明してきました。 しかし実際には,図をどう描くか考える前に,データがどのような構造になっているのかを調べ,試行錯誤しています。 ここでは,統計データを取得した後,そのデータの構造を確認しながら,データを整形していく方法を紹介します。

1 e-Statからデータ取得

次のコードを実行し,欲しいデータを取得しましょう。 次のコードにある statsDataId = "0003406360" statsDataId = "0003410051" の数字はアクセスしたい統計データのIDです。

library(estatapi)
このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。
appId <- keyring::key_get("e-stat")
statsDataId <- "0003410051"
(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: 5 × 5
  `@code` `@name`   `@level` `@unit` `@parentCode`
  <chr>   <chr>     <chr>    <chr>   <chr>        
1 100     計        1        人      <NA>         
2 110     個人      2        人      100          
3 120     個人_女性 3        人      110          
4 130     団体      2        人      100          
5 140     戸数      1        戸      <NA>         

$cat02
# A tibble: 5 × 3
  `@code` `@name`                  `@level`
  <chr>   <chr>                    <chr>   
1 100     正組合員数及び准組合員数 1       
2 150     正組合員数               1       
3 160     正組合員戸数             1       
4 170     准組合員数               1       
5 180     准組合員戸数             1       

$area
# A tibble: 48 × 4
   `@code` `@name` `@level` `@parentCode`
   <chr>   <chr>   <chr>    <chr>        
 1 00000   全国    1        <NA>         
 2 01000   北海道  2        00000        
 3 02000   青森県  3        01100        
 4 03000   岩手県  3        01100        
 5 04000   宮城県  3        01100        
 6 05000   秋田県  3        01100        
 7 06000   山形県  3        01100        
 8 07000   福島県  3        01100        
 9 08000   茨城県  3        07100        
10 09000   栃木県  3        07100        
# ℹ 38 more rows

$time
# A tibble: 14 × 3
   `@code`    `@name` `@level`
   <chr>      <chr>   <chr>   
 1 2006000000 2006年  1       
 2 2005000000 2005年  1       
 3 2004000000 2004年  1       
 4 2003000000 2003年  1       
 5 2002000000 2002年  1       
 6 2001000000 2001年  1       
 7 2000000000 2000年  1       
 8 1999000000 1999年  1       
 9 1998000000 1998年  1       
10 1997000000 1997年  1       
11 1996000000 1996年  1       
12 1995000000 1995年  1       
13 1994000000 1994年  1       
14 1993000000 1993年  1       

$.names
# A tibble: 4 × 2
  id    name          
  <chr> <chr>         
1 cat01 個人・団体    
2 cat02 組合          
3 area  都道府県      
4 time  時間軸(年次)
# 統計データ取得
df <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
Fetching record 1-8064... (total: 8064 records)
df
# A tibble: 8,064 × 11
   cat01_code `個人・団体` cat02_code 組合          area_code 都道府県 time_code
   <chr>      <chr>        <chr>      <chr>         <chr>     <chr>    <chr>    
 1 100        計           100        正組合員数及び准組合員数… 00000     全国     20060000…
 2 100        計           100        正組合員数及び准組合員数… 00000     全国     20050000…
 3 100        計           100        正組合員数及び准組合員数… 00000     全国     20040000…
 4 100        計           100        正組合員数及び准組合員数… 00000     全国     20030000…
 5 100        計           100        正組合員数及び准組合員数… 00000     全国     20020000…
 6 100        計           100        正組合員数及び准組合員数… 00000     全国     20010000…
 7 100        計           100        正組合員数及び准組合員数… 00000     全国     20000000…
 8 100        計           100        正組合員数及び准組合員数… 00000     全国     19990000…
 9 100        計           100        正組合員数及び准組合員数… 00000     全国     19980000…
10 100        計           100        正組合員数及び准組合員数… 00000     全国     19970000…
# ℹ 8,054 more rows
# ℹ 4 more variables: `時間軸(年次)` <chr>, unit <chr>, value <dbl>,
#   annotation <chr>

このデータはどういう構造になっているのか想像できない。 そこで,データの構造を詳細に確認してみる。

2 データ整形

まず,dplyr パッケージを使えるようにします。

library(dplyr)

データの構造を確認するには,次のコマンドを実行するとよいでしょう。 先頭のみを表示します。

df |>
  head() |>
  data.frame()
  cat01_code 個人.団体 cat02_code                     組合 area_code 都道府県
1        100        計        100 正組合員数及び准組合員数     00000     全国
2        100        計        100 正組合員数及び准組合員数     00000     全国
3        100        計        100 正組合員数及び准組合員数     00000     全国
4        100        計        100 正組合員数及び准組合員数     00000     全国
5        100        計        100 正組合員数及び准組合員数     00000     全国
6        100        計        100 正組合員数及び准組合員数     00000     全国
   time_code 時間軸.年次. unit   value annotation
1 2006000000       2006年   人 9322431       <NA>
2 2005000000       2005年   人 9188153       <NA>
3 2004000000       2004年   人 9145856       <NA>
4 2003000000       2003年   人 9100072       <NA>
5 2002000000       2002年   人 9071894       <NA>
6 2001000000       2001年   人 9082535       <NA>

データの最後の部分のみを表示します。

df |>
  tail() |>
  data.frame()
  cat01_code 個人.団体 cat02_code         組合 area_code 都道府県  time_code
1        140      戸数        180 准組合員戸数     47000   沖縄県 1998000000
2        140      戸数        180 准組合員戸数     47000   沖縄県 1997000000
3        140      戸数        180 准組合員戸数     47000   沖縄県 1996000000
4        140      戸数        180 准組合員戸数     47000   沖縄県 1995000000
5        140      戸数        180 准組合員戸数     47000   沖縄県 1994000000
6        140      戸数        180 准組合員戸数     47000   沖縄県 1993000000
  時間軸.年次. unit value annotation
1       1998年   戸 53903       <NA>
2       1997年   戸 51984       <NA>
3       1996年   戸 49314       <NA>
4       1995年   戸 47886       <NA>
5       1994年   戸 47076       <NA>
6       1993年   戸 44676       <NA>

データの構造を確認します。

str(df)
tibble [8,064 × 11] (S3: tbl_df/tbl/data.frame)
 $ cat01_code    : chr [1:8064] "100" "100" "100" "100" ...
 $ 個人・団体    : chr [1:8064] "計" "計" "計" "計" ...
 $ cat02_code    : chr [1:8064] "100" "100" "100" "100" ...
 $ 組合          : chr [1:8064] "正組合員数及び准組合員数" "正組合員数及び准組合員数" "正組合員数及び准組合員数" "正組合員数及び准組合員数" ...
 $ area_code     : chr [1:8064] "00000" "00000" "00000" "00000" ...
 $ 都道府県      : chr [1:8064] "全国" "全国" "全国" "全国" ...
 $ time_code     : chr [1:8064] "2006000000" "2005000000" "2004000000" "2003000000" ...
 $ 時間軸(年次): chr [1:8064] "2006年" "2005年" "2004年" "2003年" ...
 $ unit          : chr [1:8064] "人" "人" "人" "人" ...
 $ value         : num [1:8064] 9322431 9188153 9145856 9100072 9071894 ...
 $ annotation    : chr [1:8064] NA NA NA NA ...

または,次のようにします。

glimpse(df)
Rows: 8,064
Columns: 11
$ cat01_code       <chr> "100", "100", "100", "100", "100", "100", "100", "100…
$ `個人・団体`     <chr> "計", "計", "計", "計", "計", "計", "計", "計", "計", "計", "計"…
$ cat02_code       <chr> "100", "100", "100", "100", "100", "100", "100", "100…
$ 組合             <chr> "正組合員数及び准組合員数", "正組合員数及び准組合員数", "正組合員数及び准組合員数", "正組合員…
$ area_code        <chr> "00000", "00000", "00000", "00000", "00000", "00000",…
$ 都道府県         <chr> "全国", "全国", "全国", "全国", "全国", "全国", "全国", "全国", "全国",…
$ time_code        <chr> "2006000000", "2005000000", "2004000000", "2003000000…
$ `時間軸(年次)` <chr> "2006年", "2005年", "2004年", "2003年", "2002年", "2001年",…
$ unit             <chr> "人", "人", "人", "人", "人", "人", "人", "人", "人", "人", "人"…
$ value            <dbl> 9322431, 9188153, 9145856, 9100072, 9071894, 9082535,…
$ annotation       <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…

まず,組合 の列に 正組合員数及び准組合員数准組合員戸数 があるのが確認できます。 つまり,組合 の列は組合員の区分に対応していることが想像できる。 ただし,組合員をどのように区分しているのか,正確にはわからない。

データフレームのそれぞれの列にどういう値が入っているか確認するには,文字列型の場合,table() または unique() を使えばよいです。

table(df$組合)

            准組合員戸数               准組合員数             正組合員戸数 
                     672                     2016                      672 
              正組合員数 正組合員数及び准組合員数 
                    2688                     2016 
unique(df$組合)
[1] "正組合員数及び准組合員数" "正組合員数"              
[3] "准組合員数"               "正組合員戸数"            
[5] "准組合員戸数"            

table()unique() は似た結果が出力されます。 table() からはそれぞれのレコード数が分かり,unique() からは表にある順番が分かります。

このデータでは,組合 列の下のカテゴリーに 個人・団体 列があります。

table(df$組合, df$`個人・団体`)
                          
                           個人 個人_女性 団体 戸数  計
  准組合員戸数                0         0    0  672   0
  准組合員数                672         0  672    0 672
  正組合員戸数                0         0    0  672   0
  正組合員数                672       672  672    0 672
  正組合員数及び准組合員数  672         0  672    0 672

あるいは,次のようにします。

df |> 
  count(組合, `個人・団体`)
# A tibble: 12 × 3
   組合                     `個人・団体`     n
   <chr>                    <chr>        <int>
 1 准組合員戸数             戸数           672
 2 准組合員数               個人           672
 3 准組合員数               団体           672
 4 准組合員数               計             672
 5 正組合員戸数             戸数           672
 6 正組合員数               個人           672
 7 正組合員数               個人_女性      672
 8 正組合員数               団体           672
 9 正組合員数               計             672
10 正組合員数及び准組合員数 個人           672
11 正組合員数及び准組合員数 団体           672
12 正組合員数及び准組合員数 計             672

この結果から,人数に関するデータと戸数に関するデータが混ざっていることがわかります。

2.1 データフレームの列

ここでデータフレームの列の指定方法について,簡単に説明しておきます。 最も簡単かつ短い書き方は次のとおりです。

df$都道府県

ただし,日本語の列名をそのまま使うのは不安です。 例えば,次のようにするとエラーが出ます。

df$時間軸(年次)

なぜでしょうか。 Rを使い慣れている人だとこの種のエラーへの対策は分かるはずです。 例えば,データフレームがこの列名を変えたがることに気づいたことがあるでしょう。 そう,data.frame() で指定する check.names = はこうした問題に対応するための引数です。

こうしたエラーの回避策はあります。 次のようにするとエラーが出ず,欲しい結果が得られます。

df$`時間軸(年次)`

ただし,こういった書き方をするくらいであれば,df[, "時間軸(年次)"] といった表記に統一した方がスマートではないでしょうか。 しかし,この表記は tidyverse(tibble) 的には好ましくないようです。 base R のデータフレームでは,[] 内がスカラー(1次元のベクトル)なら返り値はベクトルで,[] 内がベクトル(2次元以上)なら返り値はデータフレームです。 tibble の場合,[] 内が何であれ,返り値は tibble になります。

df[, "時間軸(年次)"]
data.frame(df, check.names = FALSE)[, "時間軸(年次)"]
df[, "時間軸(年次)", drop = TRUE]

2.2 データフレームの列間関係

head(df)の返り値を詳細に見てみましょう。 area_code"00000" である行は,"全国" に対応していることが想像できます。 本当にそうなっているか,確認してみましょう。

table(df$area_code, df$都道府県)

このようにしてもよいですが,出力が大きすぎるため,ピンポイントで結果が得られるコードを書く必要があります。

table(df$area_code[df$都道府県 == "全国"])

00000 
  168 
df[df$都道府県 != "全国" & df$area_code == "00000", ]
# A tibble: 0 × 11
# ℹ 11 variables: cat01_code <chr>, 個人・団体 <chr>, cat02_code <chr>,
#   組合 <chr>, area_code <chr>, 都道府県 <chr>, time_code <chr>,
#   時間軸(年次) <chr>, unit <chr>, value <dbl>, annotation <chr>

次に,時間軸(年次) 列がそのまま年度が入力されていることが想像できます。 そして,"2016年度""2015年度""2014年度" といったように文字列となっていることから,"年度" を削除して,数値型に変換する必要があることまで見通せます。 一方,time_code 列は,"2006000000""2005000000""2004000000" という値が入っており,文字列です。 これが 時間軸(年次) 列と同じ情報かどうかは,これだけでは分かりません。 "2006" に続く "000000" の数字は何を意味するのでしょうか。 time_code 列を確認してみます。

table(df$time_code)

1993000000 1994000000 1995000000 1996000000 1997000000 1998000000 1999000000 
       576        576        576        576        576        576        576 
2000000000 2001000000 2002000000 2003000000 2004000000 2005000000 2006000000 
       576        576        576        576        576        576        576 

time_code 列の値の後半部分 "000000" は,ここでは意味がなく,sub() で削除してもよさそうです。 それでは,time_code 列は 時間軸(年次) 列と1対1で対応しているでしょうか。 すなわち,時間軸(年次) 列から"年度" を取り除いた値とtime_code 列から"000000"を取り除いた値は一致するでしょうか。 これを確認する方法は多くあります。 例えば,次のようにします。

table(sub("年", "", df$`時間軸(年次)`) == sub("000000$", "", df$time_code))

TRUE 
8064 

年度の入力ミスはなさそうなので,どちらの列でもよく,今回は 時間軸(年次) 列から年度の数値が得られることが分かります。

str(df)の返り値について,他の列について見ておきましょう。 unit 列は単位であり作図には使いませんが,数値の意味を確認する際に参照することを覚えておきます。 value は数値です。 この表はロングであるため,ggplot2 として作図するのに扱いやすいです。

2.3 データフレームの整形

これまででデータの構造がおおよそ把握できました。 ここで,データを扱いやすくなるように変更します。

その際,元のデータフレームは残したまま,新しいデータフレームを作成するようにしましょう。 以降は新しいデータフレームで作業し,もし間違った場合は,ここに戻ってくれば最初からやり直さずににすむためです。

まず,全国のみのデータを抽出してもよいですが,後で都道府県別のデータを扱うときに手間をかけないようにするために,全国のみのデータにするのは最後にしましょう。 それ以外の整形をまずやります。

df2 <- df

df2$<- as.integer(sub("年", "", df2$`時間軸(年次)`))

最初にみた 組合 列を改めて確認します。

unique(data.frame(df2[, "組合"]))
                         組合
1    正組合員数及び准組合員数
673                正組合員数
1345               准組合員数
6721             正組合員戸数
7393             准組合員戸数

ここで,この列が正組合員と准組合員といった分類であることが分かります。 念のため,ここで unit 列との対応を確認しておきます。

table(apply(df2[, c("組合", "個人・団体", "unit")], 1, paste, collapse = " "))

            准組合員戸数 戸数 戸               准組合員数 個人 人 
                             672                              672 
              准組合員数 団体 人                 准組合員数 計 人 
                             672                              672 
            正組合員戸数 戸数 戸               正組合員数 個人 人 
                             672                              672 
         正組合員数 個人_女性 人               正組合員数 団体 人 
                             672                              672 
                正組合員数 計 人 正組合員数及び准組合員数 個人 人 
                             672                              672 
正組合員数及び准組合員数 団体 人   正組合員数及び准組合員数 計 人 
                             672                              672 

団体も単位は "人" になっているようです。

最後に,全国のデータを抽出する。

df_zenkoku <- df2[df2$都道府県 == "全国", ]

3 作図

作図のためには,ここまでで整形したデータフレームから,作図に必要な行を抽出すればよいです。

3.1 折れ線グラフの作図

まず,組合員の合計の折れ線グラフを描くことにしましょう。 必要なデータのみを抽出します。

(df_JAmembers <- df_zenkoku[grep("計", df_zenkoku$`個人・団体`), ])
# A tibble: 42 × 12
   cat01_code `個人・団体` cat02_code 組合          area_code 都道府県 time_code
   <chr>      <chr>        <chr>      <chr>         <chr>     <chr>    <chr>    
 1 100        計           100        正組合員数及び准組合員数… 00000     全国     20060000…
 2 100        計           100        正組合員数及び准組合員数… 00000     全国     20050000…
 3 100        計           100        正組合員数及び准組合員数… 00000     全国     20040000…
 4 100        計           100        正組合員数及び准組合員数… 00000     全国     20030000…
 5 100        計           100        正組合員数及び准組合員数… 00000     全国     20020000…
 6 100        計           100        正組合員数及び准組合員数… 00000     全国     20010000…
 7 100        計           100        正組合員数及び准組合員数… 00000     全国     20000000…
 8 100        計           100        正組合員数及び准組合員数… 00000     全国     19990000…
 9 100        計           100        正組合員数及び准組合員数… 00000     全国     19980000…
10 100        計           100        正組合員数及び准組合員数… 00000     全国     19970000…
# ℹ 32 more rows
# ℹ 5 more variables: `時間軸(年次)` <chr>, unit <chr>, value <dbl>,
#   annotation <chr>, 年 <int>

あるいは,tidyverse では次のようになります。

df_JAmembers <- df_zenkoku |>
  filter(grepl("計", `個人・団体`))
df_JAmembers
# A tibble: 42 × 12
   cat01_code `個人・団体` cat02_code 組合          area_code 都道府県 time_code
   <chr>      <chr>        <chr>      <chr>         <chr>     <chr>    <chr>    
 1 100        計           100        正組合員数及び准組合員数… 00000     全国     20060000…
 2 100        計           100        正組合員数及び准組合員数… 00000     全国     20050000…
 3 100        計           100        正組合員数及び准組合員数… 00000     全国     20040000…
 4 100        計           100        正組合員数及び准組合員数… 00000     全国     20030000…
 5 100        計           100        正組合員数及び准組合員数… 00000     全国     20020000…
 6 100        計           100        正組合員数及び准組合員数… 00000     全国     20010000…
 7 100        計           100        正組合員数及び准組合員数… 00000     全国     20000000…
 8 100        計           100        正組合員数及び准組合員数… 00000     全国     19990000…
 9 100        計           100        正組合員数及び准組合員数… 00000     全国     19980000…
10 100        計           100        正組合員数及び准組合員数… 00000     全国     19970000…
# ℹ 32 more rows
# ℹ 5 more variables: `時間軸(年次)` <chr>, unit <chr>, value <dbl>,
#   annotation <chr>, 年 <int>

tidyverse の方が分かりやすいとの評判ですが,個人的にはどちらでも同じです。 今回は同じですが,tidyverse の方がコードが短くなることはよくあります。

library(ggplot2)
library(scales)
library(ggsci)

p <- ggplot(data = df_JAmembers, aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移",
    caption = "出所:農林水産省「総合農協統計表」",
    color = NULL,
    shape = NULL
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

4 データ追加

最近のデータを追加しましょう。

4.1 2022年

ノート農業協同組合及び同連合会一斉調査 / 確報 総合農協統計表 令和4事業年度総合農協統計表
statsDataId <- "0002110844"
(meta_info <- estat_getMetaInfo(appId = appId, statsDataId = statsDataId))
$cat01
# A tibble: 58 × 3
   `@code` `@name`         `@level`
   <chr>   <chr>           <chr>   
 1 1001    全国            1       
 2 1002    1組合当たり    1       
 3 1003    地域_北海道     1       
 4 1004    地域_東北       1       
 5 1005    地域_関東       1       
 6 1006    地域_北陸       1       
 7 1007    地域_東海       1       
 8 1008    地域_近畿       1       
 9 1009    地域_中国・四国 1       
10 1010    地域_九州       1       
# ℹ 48 more rows

$cat02
# A tibble: 19 × 5
   `@code` `@name`                                `@level` `@unit` `@parentCode`
   <chr>   <chr>                                  <chr>    <chr>   <chr>        
 1 1001    合計                                   1        人+団体 <NA>         
 2 1002    個人                                   1        人      <NA>         
 3 1003    法人・団体                             1        団体    <NA>         
 4 1004    一戸複数正組合員制実施組合数           1        組合    <NA>         
 5 1005    正組合員_計                            1        人+団体 <NA>         
 6 1006    正組合員_個人                          1        人      <NA>         
 7 1007    正組合員_個人_女性                     2        人      1006         
 8 1008    正組合員_個人_組合員たる地位を失わない者…… 2        人      1006         
 9 1009    正組合員_法人_小計                     1        団体    <NA>         
10 1010    正組合員_法人_農事組合法人             1        団体    <NA>         
11 1011    正組合員_法人_その他法人               1        社      <NA>         
12 1012    正組合員戸数                           1        戸      <NA>         
13 1013    准組合員_計                            1        人+団体 <NA>         
14 1014    准組合員_個人                          1        人      <NA>         
15 1015    准組合員_法人・団体_小計               1        団体    <NA>         
16 1016    准組合員_法人・団体_農業協同組合       1        団体    <NA>         
17 1017    准組合員_法人・団体_農事組合法人       1        団体    <NA>         
18 1018    准組合員_法人・団体_その他団体         1        社      <NA>         
19 1019    准組合員戸数                           1        戸      <NA>         

$.names
# A tibble: 2 × 2
  id    name                                     
  <chr> <chr>                                    
1 cat01 (NOUKYOU1-22-2-004)地域・1組合当たり     
2 cat02 (NOUKYOU1-22-1-004)組合員数及び組合員戸数
df2022 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
Fetching record 1-1102... (total: 1102 records)
str(df2022)
tibble [1,102 × 7] (S3: tbl_df/tbl/data.frame)
 $ cat01_code                               : chr [1:1102] "1001" "1001" "1001" "1001" ...
 $ (NOUKYOU1-22-2-004)地域・1組合当たり     : chr [1:1102] "全国" "全国" "全国" "全国" ...
 $ cat02_code                               : chr [1:1102] "1001" "1002" "1003" "1004" ...
 $ (NOUKYOU1-22-1-004)組合員数及び組合員戸数: chr [1:1102] "合計" "個人" "法人・団体" "一戸複数正組合員制実施組合数" ...
 $ unit                                     : chr [1:1102] "人+団体" "人" "団体" "組合" ...
 $ value                                    : num [1:1102] 10271584 10168913 102671 536 3932592 ...
 $ annotation                               : chr [1:1102] NA NA NA NA ...
table(df2022$`(NOUKYOU1-22-2-004)地域・1組合当たり`)

   1組合当たり            全国 地域_中国・四国       地域_九州     地域_北海道 
             19              19              19              19              19 
      地域_北陸       地域_東北       地域_東海       地域_沖縄       地域_近畿 
             19              19              19              19              19 
      地域_関東   都道府県_三重   都道府県_京都   都道府県_佐賀   都道府県_兵庫 
             19              19              19              19              19 
都道府県_北海道   都道府県_千葉 都道府県_和歌山   都道府県_埼玉   都道府県_大分 
             19              19              19              19              19 
  都道府県_大阪   都道府県_奈良   都道府県_宮城   都道府県_宮崎   都道府県_富山 
             19              19              19              19              19 
  都道府県_山口   都道府県_山形   都道府県_山梨   都道府県_岐阜   都道府県_岡山 
             19              19              19              19              19 
  都道府県_岩手   都道府県_島根   都道府県_広島   都道府県_徳島   都道府県_愛媛 
             19              19              19              19              19 
  都道府県_愛知   都道府県_新潟   都道府県_東京   都道府県_栃木   都道府県_沖縄 
             19              19              19              19              19 
  都道府県_滋賀   都道府県_熊本   都道府県_石川 都道府県_神奈川   都道府県_福井 
             19              19              19              19              19 
  都道府県_福岡   都道府県_福島   都道府県_秋田   都道府県_群馬   都道府県_茨城 
             19              19              19              19              19 
  都道府県_長崎   都道府県_長野   都道府県_青森   都道府県_静岡   都道府県_香川 
             19              19              19              19              19 
  都道府県_高知   都道府県_鳥取 都道府県_鹿児島 
             19              19              19 
names(df2022)[2] <- "都道府県"
df2022$都道府県 <- sub("都道府県_", "", df2022$都道府県)
df2022 <- df2022[!grepl("1組合当たり|地域_", df2022$都道府県), ]
df2022$<- 2022

4.2 2021年

ノート農業協同組合及び同連合会一斉調査 / 確報 総合農協統計表 令和3事業年度総合農協統計表
statsDataId <- "0002063186"
(meta_info <- estat_getMetaInfo(appId = appId, statsDataId = statsDataId))
$cat01
# A tibble: 58 × 3
   `@code` `@name`         `@level`
   <chr>   <chr>           <chr>   
 1 1001    全国            1       
 2 1002    1組合当たり     1       
 3 1003    地域_北海道     1       
 4 1004    地域_東北       1       
 5 1005    地域_関東       1       
 6 1006    地域_北陸       1       
 7 1007    地域_東海       1       
 8 1008    地域_近畿       1       
 9 1009    地域_中国・四国 1       
10 1010    地域_九州       1       
# ℹ 48 more rows

$cat02
# A tibble: 19 × 5
   `@code` `@name`                                `@level` `@unit` `@parentCode`
   <chr>   <chr>                                  <chr>    <chr>   <chr>        
 1 1001    計                                     1        人+団体 <NA>         
 2 1002    個人                                   1        人      <NA>         
 3 1003    法人・団体                             1        団体    <NA>         
 4 1004    一戸複数正組合員制実施組合数           1        組合    <NA>         
 5 1005    一戸複数正組合員制実施組合数_正組合員_小計…… 2        人+団体 1004         
 6 1006    一戸複数正組合員制実施組合数_正組合員_個人…… 2        人      1004         
 7 1007    一戸複数正組合員制実施組合数_正組合員_個人_女性…… 3        人      1006         
 8 1008    一戸複数正組合員制実施組合数_正組合員_個人_組合員たる地位_を失わない者… 3        人      1006         
 9 1009    一戸複数正組合員制実施組合数_正組合員_法人_計…… 2        団体    1004         
10 1010    一戸複数正組合員制実施組合数_正組合員_法人_農事組合法人…… 2        団体    1004         
11 1011    一戸複数正組合員制実施組合数_正組合員_法人_その他法人…… 2        社      1004         
12 1012    一戸複数正組合員制実施組合数_正組合員戸数…… 2        戸      1004         
13 1013    一戸複数正組合員制実施組合数_准組合員_小計…… 2        人+団体 1004         
14 1014    一戸複数正組合員制実施組合数_准組合員_個人…… 2        人      1004         
15 1015    一戸複数正組合員制実施組合数_准組合員_個人_法人・団体_計…… 3        団体    1014         
16 1016    一戸複数正組合員制実施組合数_准組合員_個人_法人・団体_農業協同組合…… 3        団体    1014         
17 1017    一戸複数正組合員制実施組合数_准組合員_個人_法人・団体_農事組合法人…… 3        団体    1014         
18 1018    一戸複数正組合員制実施組合数_准組合員_個人_法人・団体_その他団体…… 3        社      1014         
19 1019    准組合員戸数                           1        戸      <NA>         

$.names
# A tibble: 2 × 2
  id    name                                     
  <chr> <chr>                                    
1 cat01 (NOUKYOU1-21-2-004)地域・1組合当たり     
2 cat02 (NOUKYOU1-21-1-004)組合員数及び組合員戸数
df2021 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
Fetching record 1-1102... (total: 1102 records)
str(df2021)
tibble [1,102 × 7] (S3: tbl_df/tbl/data.frame)
 $ cat01_code                               : chr [1:1102] "1001" "1001" "1001" "1001" ...
 $ (NOUKYOU1-21-2-004)地域・1組合当たり     : chr [1:1102] "全国" "全国" "全国" "全国" ...
 $ cat02_code                               : chr [1:1102] "1001" "1002" "1003" "1004" ...
 $ (NOUKYOU1-21-1-004)組合員数及び組合員戸数: chr [1:1102] "計" "個人" "法人・団体" "一戸複数正組合員制実施組合数" ...
 $ unit                                     : chr [1:1102] "人+団体" "人" "団体" "組合" ...
 $ value                                    : num [1:1102] 10361171 10259448 101723 549 4017945 ...
 $ annotation                               : chr [1:1102] NA NA NA NA ...
table(df2021$`(NOUKYOU1-21-2-004)地域・1組合当たり`)

    1組合当たり            全国 地域_中国・四国       地域_九州     地域_北海道 
             19              19              19              19              19 
      地域_北陸       地域_東北       地域_東海       地域_沖縄       地域_近畿 
             19              19              19              19              19 
      地域_関東   都道府県_三重   都道府県_京都   都道府県_佐賀   都道府県_兵庫 
             19              19              19              19              19 
都道府県_北海道   都道府県_千葉 都道府県_和歌山   都道府県_埼玉   都道府県_大分 
             19              19              19              19              19 
  都道府県_大阪   都道府県_奈良   都道府県_宮城   都道府県_宮崎   都道府県_富山 
             19              19              19              19              19 
  都道府県_山口   都道府県_山形   都道府県_山梨   都道府県_岐阜   都道府県_岡山 
             19              19              19              19              19 
  都道府県_岩手   都道府県_島根   都道府県_広島   都道府県_徳島   都道府県_愛媛 
             19              19              19              19              19 
  都道府県_愛知   都道府県_新潟   都道府県_東京   都道府県_栃木   都道府県_沖縄 
             19              19              19              19              19 
  都道府県_滋賀   都道府県_熊本   都道府県_石川 都道府県_神奈川   都道府県_福井 
             19              19              19              19              19 
  都道府県_福岡   都道府県_福島   都道府県_秋田   都道府県_群馬   都道府県_茨城 
             19              19              19              19              19 
  都道府県_長崎   都道府県_長野   都道府県_青森   都道府県_静岡   都道府県_香川 
             19              19              19              19              19 
  都道府県_高知   都道府県_鳥取 都道府県_鹿児島 
             19              19              19 
names(df2021)[2] <- "都道府県"
df2021$都道府県 <- sub("都道府県_", "", df2021$都道府県)
df2021 <- df2021[!grepl("1組合当たり|地域_", df2021$都道府県), ]
df2021$<- 2021

4.3 2020年

ノート農業協同組合及び同連合会一斉調査 / 確報 総合農協統計表 令和2事業年度総合農協統計表
statsDataId <- "0001998576"
(meta_info <- estat_getMetaInfo(appId = appId, statsDataId = statsDataId))
$cat01
# A tibble: 63 × 3
   `@code` `@name`         `@level`
   <chr>   <chr>           <chr>   
 1 1001    平.27           1       
 2 1002    平.28           1       
 3 1003    平.29           1       
 4 1004    平.30           1       
 5 1005    令.元           1       
 6 1006    令.2            1       
 7 1007    1組合当たり     1       
 8 1008    【地域】_北海道 1       
 9 1009    【地域】_東北   1       
10 1010    【地域】_関東   1       
# ℹ 53 more rows

$cat02
# A tibble: 19 × 4
   `@code` `@name`                                  `@level` `@unit`
   <chr>   <chr>                                    <chr>    <chr>  
 1 1001    計                                       1        人+団体
 2 1002    個人                                     1        人     
 3 1003    法人・団体                               1        団体   
 4 1004    一戸複数正組合員制実施組合数             1        組合   
 5 1005    正組合員_小計                            1        人+団体
 6 1006    正組合員_個人                            1        人     
 7 1007    正組合員_個人_女性                       1        人     
 8 1008    正組合員_個人_組合員たる地位を失わない者 1        人     
 9 1009    正組合員_法人_計                         1        団体   
10 1010    正組合員_法人_農事組合法人               1        団体   
11 1011    正組合員_法人_その他法人                 1        社     
12 1012    正組合員戸数                             1        戸     
13 1013    准組合員_小計                            1        人+団体
14 1014    准組合員_個人                            1        人     
15 1015    准組合員_法人・団体                      1        団体   
16 1016    准組合員_法人・団体_農業協同組合         1        団体   
17 1017    准組合員_法人・団体_農事組合法人         1        団体   
18 1018    准組合員_法人・団体_その他団体           1        社     
19 1019    准組合員戸数                             1        戸     

$.names
# A tibble: 2 × 2
  id    name                                 
  <chr> <chr>                                
1 cat01 (R001-02-2-004)事業年度              
2 cat02 (R001-02-1-004)組合員数及び組合員戸数
df2020 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
Fetching record 1-1197... (total: 1197 records)
str(df2020)
tibble [1,197 × 7] (S3: tbl_df/tbl/data.frame)
 $ cat01_code                           : chr [1:1197] "1001" "1001" "1001" "1001" ...
 $ (R001-02-2-004)事業年度              : chr [1:1197] "平.27" "平.27" "平.27" "平.27" ...
 $ cat02_code                           : chr [1:1197] "1001" "1002" "1003" "1004" ...
 $ (R001-02-1-004)組合員数及び組合員戸数: chr [1:1197] "計" "個人" "法人・団体" "一戸複数正組合員制実施組合数" ...
 $ unit                                 : chr [1:1197] "人+団体" "人" "団体" "組合" ...
 $ value                                : num [1:1197] 10370172 10272942 97230 653 4433389 ...
 $ annotation                           : chr [1:1197] NA NA NA NA ...
table(df2020$`(R001-02-2-004)事業年度`)

【地域】_中国・四国       【地域】_九州     【地域】_北海道       【地域】_北陸 
                 19                  19                  19                  19 
      【地域】_東北       【地域】_東海       【地域】_沖縄       【地域】_近畿 
                 19                  19                  19                  19 
      【地域】_関東   【都道府県】_三重   【都道府県】_京都   【都道府県】_佐賀 
                 19                  19                  19                  19 
  【都道府県】_兵庫 【都道府県】_北海道   【都道府県】_千葉 【都道府県】_和歌山 
                 19                  19                  19                  19 
  【都道府県】_埼玉   【都道府県】_大分   【都道府県】_大坂   【都道府県】_奈良 
                 19                  19                  19                  19 
  【都道府県】_宮城   【都道府県】_宮崎   【都道府県】_富山   【都道府県】_山口 
                 19                  19                  19                  19 
  【都道府県】_山形   【都道府県】_山梨   【都道府県】_岐阜   【都道府県】_岡山 
                 19                  19                  19                  19 
  【都道府県】_岩手   【都道府県】_島根   【都道府県】_広島   【都道府県】_徳島 
                 19                  19                  19                  19 
  【都道府県】_愛媛   【都道府県】_愛知   【都道府県】_新潟   【都道府県】_東京 
                 19                  19                  19                  19 
  【都道府県】_栃木   【都道府県】_沖縄   【都道府県】_滋賀   【都道府県】_熊本 
                 19                  19                  19                  19 
  【都道府県】_石川 【都道府県】_神奈川   【都道府県】_福井   【都道府県】_福岡 
                 19                  19                  19                  19 
  【都道府県】_福島   【都道府県】_秋田   【都道府県】_群馬   【都道府県】_茨城 
                 19                  19                  19                  19 
  【都道府県】_長崎   【都道府県】_長野   【都道府県】_青森   【都道府県】_静岡 
                 19                  19                  19                  19 
  【都道府県】_香川   【都道府県】_高知   【都道府県】_鳥取 【都道府県】_鹿児島 
                 19                  19                  19                  19 
        1組合当たり                令.2               令.元               平.27 
                 19                  19                  19                  19 
              平.28               平.29               平.30 
                 19                  19                  19 
names(df2020)[2] <- "都道府県"
df2020$都道府県 <- sub("【都道府県】_", "", df2020$都道府県)
df2020$都道府県 <- sub("令.2", "全国", df2020$都道府県)
df2020 <- df2020[!grepl("1組合当たり|【地域】_|平\\.|令\\.", df2020$都道府県), ]
df2020$<- 2020

4.4 2019年

ノート農業協同組合及び同連合会一斉調査 / 確報 総合農協統計表 令和元事業年度総合農協統計表
statsDataId <- "0002015583"
(meta_info <- estat_getMetaInfo(appId = appId, statsDataId = statsDataId))
$cat01
# A tibble: 61 × 3
   `@code` `@name`      `@level`
   <chr>   <chr>        <chr>   
 1 1001    平26(2014)   1       
 2 1002    平27(2015)   1       
 3 1003    平28(2016)   1       
 4 1004    平29(2017)   1       
 5 1005    平30(2018)   1       
 6 1006    令元(2019)   1       
 7 1007    1組合当たり  1       
 8 1008    東北_1北海道 1       
 9 1009    東北_2青森   1       
10 1010    東北_3岩手   1       
# ℹ 51 more rows

$cat02
# A tibble: 19 × 5
   `@code` `@name`                                `@level` `@unit` `@parentCode`
   <chr>   <chr>                                  <chr>    <chr>   <chr>        
 1 1001    正組合員_個人                          1        人      <NA>         
 2 1002    正組合員_個人_うち女性                 2        人      1001         
 3 1003    正組合員_個人_うち組合員たる地位を失わない者…… 2        人      1001         
 4 1004    正組合員_法人                          1        団体    <NA>         
 5 1005    正組合員_法人_農事組合法人             2        団体    1004         
 6 1006    正組合員_法人_その他法人               2        社      1004         
 7 1007    正組合員_計                            1        人+団体 <NA>         
 8 1008    正組合員戸数                           1        戸      <NA>         
 9 1009    准組合員_個人                          1        人      <NA>         
10 1010    准組合員_法人・団体                    1        団体    <NA>         
11 1011    准組合員_法人・団体_農業協同組合       2        団体    1010         
12 1012    准組合員_法人・団体_農事組合法人       2        団体    1010         
13 1013    准組合員_法人・団体_その他団体         2        社      1010         
14 1014    准組合員_計                            1        人+団体 <NA>         
15 1015    准組合員戸数                           1        戸      <NA>         
16 1016    合計_個人                              1        人      <NA>         
17 1017    合計_法人・団体                        1        団体    <NA>         
18 1018    合計_計                                1        人+団体 <NA>         
19 1019    一戸複数正組合_員制実施組合数          1        組合    <NA>         

$.names
# A tibble: 2 × 2
  id    name                                 
  <chr> <chr>                                
1 cat01 (r001-01-2-004)事業年度及び地域      
2 cat02 (r001-01-1-004)組合員数及び組合員戸数
df2019 <- estat_getStatsData(
  appId = appId,
  statsDataId = statsDataId
)
Fetching record 1-1159... (total: 1159 records)
str(df2019)
tibble [1,159 × 7] (S3: tbl_df/tbl/data.frame)
 $ cat01_code                           : chr [1:1159] "1001" "1001" "1001" "1001" ...
 $ (r001-01-2-004)事業年度及び地域      : chr [1:1159] "平26(2014)" "平26(2014)" "平26(2014)" "平26(2014)" ...
 $ cat02_code                           : chr [1:1159] "1001" "1002" "1003" "1004" ...
 $ (r001-01-1-004)組合員数及び組合員戸数: chr [1:1159] "正組合員_個人" "正組合員_個人_うち女性" "正組合員_個人_うち組合員たる地位を失わない者" "正組合員_法人" ...
 $ unit                                 : chr [1:1159] "人" "人" "人" "団体" ...
 $ value                                : num [1:1159] 4478620 932121 945 16486 5035 ...
 $ annotation                           : chr [1:1159] NA NA NA NA ...
table(df2019$`(r001-01-2-004)事業年度及び地域`)

      1組合当たり            47沖縄 中国・四国_31鳥取 中国・四国_32島根 
               19                19                19                19 
中国・四国_33岡山 中国・四国_34広島 中国・四国_35山口 中国・四国_36徳島 
               19                19                19                19 
中国・四国_37香川 中国・四国_38愛媛 中国・四国_39高知   中国・四国_小計 
               19                19                19                19 
      九州_40福岡       九州_41佐賀       九州_42長崎       九州_43熊本 
               19                19                19                19 
      九州_44大分       九州_45宮崎     九州_46鹿児島         九州_小計 
               19                19                19                19 
       令元(2019)       北陸_18新潟       北陸_19富山       北陸_20石川 
               19                19                19                19 
      北陸_21福井         北陸_小計        平26(2014)        平27(2015) 
               19                19                19                19 
       平28(2016)        平29(2017)        平30(2018)      東北_1北海道 
               19                19                19                19 
       東北_2青森        東北_3岩手        東北_4宮城        東北_5秋田 
               19                19                19                19 
       東北_6山形        東北_7福島         東北_小計       東海_22岐阜 
               19                19                19                19 
      東海_23愛知       東海_24三重         東海_小計       近畿_25滋賀 
               19                19                19                19 
      近畿_26京都       近畿_27大阪       近畿_28兵庫       近畿_29奈良 
               19                19                19                19 
    近畿_30和歌山         近畿_小計       関東_10群馬       関東_11埼玉 
               19                19                19                19 
      関東_12千葉       関東_13東京     関東_14神奈川       関東_15山梨 
               19                19                19                19 
      関東_16長野       関東_17静岡        関東_8茨城        関東_9栃木 
               19                19                19                19 
        関東_小計 
               19 
names(df2019)[2] <- "都道府県"
df2019$都道府県 <- sub("(東北|関東|東海|北陸|近畿|九州|中国・四国)_[0-9]{1,2}", "", df2019$都道府県)
df2019$都道府県 <- sub("47沖縄", "沖縄", df2019$都道府県)
df2019$都道府県 <- sub("令元\\(2019\\)", "全国", df2019$都道府県)
df2019 <- df2019[!grepl("1組合当たり|_小計|平[0-9]|令[0-9]", df2019$都道府県), ]
df2019$<- 2019

4.5 追加

rdf2 <- df2 |>
  filter(grepl("計", `個人・団体`)) |>
  mutate(
    組合 = sub("正組合員数及び准組合員数", "合計", 組合),
    組合 = sub("数", "", 組合)
  ) |>
  select(都道府県, 年, 組合, value)

rdf2019 <- df2019 |>
  rename(組合 = `(r001-01-1-004)組合員数及び組合員戸数`) |>
  filter(組合 %in% c("正組合員_計", "准組合員_計", "合計_計")) |>
  mutate(組合 = sub("_計", "", 組合)) |>
  select(都道府県, 年, 組合, value)

rdf2020 <- df2020 |>
  rename(組合 = `(R001-02-1-004)組合員数及び組合員戸数`) |>
  filter(組合 %in% c("正組合員_小計", "准組合員_小計", "計")) |>
  mutate(
    組合 = sub("_小計", "", 組合),
    組合 = sub("計", "合計", 組合)
  ) |>
  select(都道府県, 年, 組合, value)

rdf2021 <- df2021 |>
  rename(組合 = `(NOUKYOU1-21-1-004)組合員数及び組合員戸数`) |>
  filter(組合 %in% c("一戸複数正組合員制実施組合数_正組合員_小計", "一戸複数正組合員制実施組合数_准組合員_小計", "計")) |>
  mutate(
    組合 = gsub("一戸複数正組合員制実施組合数_|_小計", "", 組合),
    組合 = sub("計", "合計", 組合)
  ) |>
  select(都道府県, 年, 組合, value)

rdf2022 <- df2022 |>
  rename(組合 = `(NOUKYOU1-22-1-004)組合員数及び組合員戸数`) |>
  filter(組合 %in% c("正組合員_計", "准組合員_計", "合計")) |>
  mutate(組合 = sub("_計", "", 組合)) |>
  select(都道府県, 年, 組合, value)

rdf2019$都道府県 <- ifelse(
  rdf2019$都道府県 %in% c("全国", "北海道", "東京", "京都", "大阪"),
  paste0(rdf2019$都道府県, c("", "", "都", "府", "府")[match(rdf2019$都道府県, c("全国", "北海道", "東京", "京都", "大阪"))]),
  paste0(rdf2019$都道府県, "県")
)
rdf2020$都道府県 <- ifelse(
  rdf2020$都道府県 %in% c("全国", "北海道", "東京", "京都", "大阪"),
  paste0(rdf2020$都道府県, c("", "", "都", "府", "府")[match(rdf2020$都道府県, c("全国", "北海道", "東京", "京都", "大阪"))]),
  paste0(rdf2020$都道府県, "県")
)
rdf2021$都道府県 <- ifelse(
  rdf2021$都道府県 %in% c("全国", "北海道", "東京", "京都", "大阪"),
  paste0(rdf2021$都道府県, c("", "", "都", "府", "府")[match(rdf2021$都道府県, c("全国", "北海道", "東京", "京都", "大阪"))]),
  paste0(rdf2021$都道府県, "県")
)
rdf2022$都道府県 <- ifelse(
  rdf2022$都道府県 %in% c("全国", "北海道", "東京", "京都", "大阪"),
  paste0(rdf2022$都道府県, c("", "", "都", "府", "府")[match(rdf2022$都道府県, c("全国", "北海道", "東京", "京都", "大阪"))]),
  paste0(rdf2022$都道府県, "県")
)

new_df <- bind_rows(
  rdf2,
  rdf2019,
  rdf2020,
  rdf2021,
  rdf2022
)

# 以下のデータはe-Statにないため,手入力
df2007_2016 <- tribble(
  ~年,    ~合計,     ~正組合員, ~准組合員,
  2016, 10444426, 4367858, 6076568,
  2015, 10370172, 4433389, 5936783,
  2014, 10267614, 4495106, 5772508,
  2013, 10145363, 4561504, 5583859,
  2012,  9977967, 4614306, 5363661,
  2011,  9834031, 4668961, 5165070,
  2010,  9693855, 4720274, 4973581,
  2009,  9579441, 4775204, 4804237,
  2008,  9494334, 4828192, 4666142,
  2007,  9432809, 4888449, 4544360
)

library(tidyr)

df_long <- df2007_2016 |>
  pivot_longer(
    cols = -年,
    names_to = "組合"
  ) |>
  mutate(都道府県 = "全国")

new_df <- bind_rows(
  new_df,
  df_long
)

5 作図

df_JAmembers <- new_df |>
  filter(都道府県 == "全国")
df_JAmembers
# A tibble: 84 × 4
   都道府県    年 組合    value
   <chr>    <dbl> <chr>   <dbl>
 1 全国      2006 合計  9322431
 2 全国      2005 合計  9188153
 3 全国      2004 合計  9145856
 4 全国      2003 合計  9100072
 5 全国      2002 合計  9071894
 6 全国      2001 合計  9082535
 7 全国      2000 合計  9108596
 8 全国      1999 合計  9125267
 9 全国      1998 合計  9128476
10 全国      1997 合計  9122861
# ℹ 74 more rows
p <- ggplot(data = df_JAmembers |> filter(組合 == "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw() +
  theme(legend.position = "none")
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = df_JAmembers |> filter(組合 != "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移",
    caption = "出所:農林水産省「総合農協統計表」",
    color = NULL,
    shape = NULL
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

library(gghighlight)

p <- ggplot(data = new_df |> filter(都道府県 != "全国", 組合 == "合計"), aes(x = 年, y = value, colour = 都道府県)) +
  geom_line() +
  geom_point() +
  gghighlight(都道府県 %in% c("愛知県", "愛媛県")) +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移(都道府県別)",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw() +
  theme(legend.position = "none")
Warning: Tried to calculate with group_by(), but the calculation failed.
Falling back to ungrouped filter operation...
Tried to calculate with group_by(), but the calculation failed.
Falling back to ungrouped filter operation...
label_key: 都道府県
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = new_df |> filter(都道府県 == "愛媛県", 組合 != "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移(愛媛県)",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = new_df |> filter(都道府県 == "北海道", 組合 != "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移(北海道)",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = new_df |> filter(都道府県 == "愛知県", 組合 != "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移(愛知県)",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = new_df |> filter(都道府県 == "京都府", 組合 != "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移(京都府)",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))

p <- ggplot(data = new_df |> filter(都道府県 == "徳島県", 組合 != "合計"), aes(x = 年, y = value, colour = 組合)) +
  geom_line() +
  geom_point() +
  scale_y_continuous(limits = c(0, NA), labels = scales::comma, name = "組合員数") +
  scale_color_d3() +
  labs(
    title = "農業協同組合の組合員数の推移(徳島県)",
    caption = "出所:農林水産省「総合農協統計表」"
  ) +
  theme_bw()
p + theme(text = element_text(family = "HiraKakuProN-W3"))