産業構造・職業構成の変化

国勢調査から,産業構造(就業者の産業別割合)および就業者の職業構成の変化をグラフ化する。

データはe-statのAPIで入手可能。産業については,1920年以降のデータがあるが,1925年と30年についてはAPIに登録されておらず,1945年は国勢調査が実施されていないため,データが入手できない。また,日本標準産業分類の変更に伴い,国勢調査の産業分類が2000年以前と2005年以降で異なる (ただし,1995年と2000年については新旧両方の分類のデータが公開されている)。そのため,厳密には変更前後でデータを完全に接続することはできないが,ここでは簡易的に新旧の分類を統合してグラフを作成している。

コード
library(tidyverse)
library(estatapi)
library(RColorBrewer)
library(stringi)

# e-statのappIDが必要
#   以下のページで利用申請(無料)をすればだれでも入手できる
#   https://www.e-stat.go.jp/api/
# appID <- "入手したappIDをここに設定"

# 産業(大分類),男女別15歳以上就業者数
# -全国(平成7年~令和2年)※平成19年11月改訂後
industry_latest <-
  estat_getStatsData(
    appId = appID,
    statsDataId = "0003410395",
    cdTab = "2020_44", # 表章項目 == "人口構成比 [産業別]"
    cdCat01From = 120, # 産業分類
    cdCat01To = 330, #  総数,小計,再掲などを除く
    cdCat02 = 100 # 男女_時系列 == "総数"
  ) |>
  filter(substring(time_code, 9, 10) == "00") |>
  mutate(
    year = as.numeric(time_code) / 1000000,
    industry = `産業大分類2015`
  ) |>
  select(year, industry, value)

#【参考】産業(旧大分類),男女別15歳以上就業者数及び産業別割合
# -全国(大正9年~平成12年)※平成14年3月改訂前
industry_old <-
  estat_getStatsData(
    appId = appID,
    statsDataId = "0003410396",
    cdTab = "2020_44", # 表章項目 == "人口構成比 [産業別]"
    cdCat01From = 120, # 産業分類
    cdCat01Tob = 330, #  総数を除く
    cdCat02 = 100, # 男女_時系列 == "総数"
  ) |>
  filter(cat01_code != 150 & cat01_code != 190) %>% # 小計(第n次産業)を除く
  mutate(
    year = as.numeric(time_code) / 1000000,
    industry = `産業大分類(平成14年3月改訂前)`
  ) |>
  select(year, industry, value) |>
  filter(year <= 1990)

# 新旧分類を統合して,産業を以下のように分類

industries <-
  c(
    "農林漁業",
    "鉱業",
    "建設業",
    "製造業",
    "電気・ガス・熱供給・水道業",
    "情報通信業",
    "運輸業(1990年以前は通信業含む)",
    "卸売・小売(1990年以前は飲食店含む)",
    "金融・保険業",
    "不動産業(1995年以降は物品賃貸業含む)",
    "サービス業(1995年以前)",
    "学術研究,専門・技術サービス業",
    "宿泊業,飲食サービス業",
    "生活関連サービス業,娯楽業",
    "教育,学習支援業",
    "医療,福祉",
    "複合サービス事業",
    "その他のサービス業",
    "公務",
    "分類不能"
  )


## 1995年以降(新産業分類)

industry_since1995 <- industry_latest |>
  pivot_wider(names_from = industry) |>
  mutate(
    `農林漁業` = `A農業,林業` + `B漁業`,
    `鉱業` = `C鉱業,採石業,砂利採取業`,
    `建設業` = `D建設業`,
    `製造業` = `E製造業`,
    `電気・ガス・熱供給・水道業` = `F電気・ガス・熱供給・水道業`,
    `情報通信業` = `G情報通信業`,
    `運輸業(1990年以前は通信業含む)` = `H運輸業,郵便業`,
    `卸売・小売(1990年以前は飲食店含む)` = `I卸売業,小売業`,
    `金融・保険業` = `J金融業,保険業`,
    `不動産業(1995年以降は物品賃貸業含む)` = `K不動産業,物品賃貸業`,
    `学術研究,専門・技術サービス業` = `L学術研究,専門・技術サービス業`,
    `宿泊業,飲食サービス業` = `M宿泊業,飲食サービス業`,
    `生活関連サービス業,娯楽業` = `N生活関連サービス業,娯楽業`,
    `教育,学習支援業` = `O教育,学習支援業`,
    `医療,福祉` = `P医療,福祉`,
    `複合サービス事業` = `Q複合サービス事業`,
    `その他のサービス業` = `Rサービス業(他に分類されないもの)`,
    `公務` = `S公務(他に分類されるものを除く)`,
    `分類不能` = `T分類不能の産業`
  ) |>
  select(year, `農林漁業`:`分類不能`) |>
  pivot_longer(-year, names_to = "industry") |>
  mutate(industry = factor(industry, levels = industries))

## 1990年以前(旧産業分類)

industry_before1995 <- industry_old |>
  pivot_wider(names_from = industry) |>
  mutate(
    `農林漁業` = `A農業` + `B林業` + `C漁業`,
    `鉱業` = `D鉱業`,
    `建設業` = `E建設業`,
    `製造業` = `F製造業`,
    `電気・ガス・熱供給・水道業` = `G電気・ガス・熱供給・水道業`,
    `運輸業(1990年以前は通信業含む)` = `H運輸・通信業`,
    `卸売・小売(1990年以前は飲食店含む)` = `I卸売・小売業,飲食店`,
    `金融・保険業` = `J金融・保険業`,
    `不動産業(1995年以降は物品賃貸業含む)` = `K不動産業`,
    `サービス業(1995年以前)` = `Lサービス業`,
    `公務` = `M公務(他に分類されないもの)`,
    `分類不能` = `N分類不能の産業`
  ) |>
  select(year, `農林漁業`:`分類不能`) |>
  pivot_longer(-year, names_to = "industry") |>
  mutate(industry = factor(industry, levels = industries))

#### Plot

industry <- rbind(industry_since1995, industry_before1995)

clr <- c(brewer.pal(11, "Paired"), brewer.pal(8, "YlOrBr"), "#FFFFFF")

graph_industry <- industry |>
  mutate(year = as.factor(year)) |>
  ggplot(aes(x = year, y = value, fill = industry)) +
  geom_bar(
    stat = "identity",
    color = "black",
    linewidth = 0.5
  ) +
  scale_fill_manual(name = "産業", values = clr) +
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  labs(x = "年", y = "", title = "産業構造の変化") +
  theme_classic(base_size = 16)

plot(graph_industry)

職業については,産業と異なり,APIで入手できるのは1960年以降。また,日本標準職業分類の変更に伴い,データはその前後で完全には接続できない (1995~2005年については新旧両方の分類のデータが公開されている)。そのため,厳密には変更前後でデータを完全に接続することはできないが,ここでは簡易的に新旧の分類を統合してグラフを作成している。なお,職業構成の変化は労働力調査からも確認できる。

コード
library(tidyverse)
library(estatapi)
library(RColorBrewer)
library(stringi)

# e-statのappIDが必要
#   以下のページで利用申請(無料)をすればだれでも入手できる
#   https://www.e-stat.go.jp/api/
# appID <- "入手したappIDをここに設定"

# 国勢調査・時系列データ・人口の労働力状態,就業者の産業・職業 表番号7
# 職業(大分類),男女別15歳以上就業者数-全国(平成7年~令和2年)
occupation_latest <-
  estat_getStatsData(
    appId = appID,
    statsDataId = "0003410408",
    cdTab = "2020_45", # 表章項目 == "人口構成比 [職業別]"
    cdCat01From = 110, # 職業分類
    cdCat01To = 220, #
    cdCat02 = 100 # 男女_時系列 == "総数")
  ) |>
  filter(substring(time_code, 9, 10) == "00") |>
  mutate(
    year = as.numeric(time_code) / 1000000,
    occupation = `職業大分類2015`
  ) |>
  select(year, occupation, value)

# 【参考】職業(旧大分類),男女別15歳以上就業者数及び産業別割合
# -全国(昭和25年~平成17年)※平成21年12月改訂前
occupation_old <-
  estat_getStatsData(
    appId = appID,
    statsDataId = "0003410409",
    cdTab = "2020_45", # 表章項目 == "割合"
    cdCat01From = 110, # 職業分類
    cdCat01To = 200, #
    cdCat02 = 100 # 男女_時系列 == "総数")
  ) |>
  mutate(
    year = as.numeric(time_code) / 1000000,
    occupation = `職業大分類(旧大分類H21改定前)`
  ) |>
  select(year, occupation, value) |>
  filter(year <= 1990)

# 新旧統合分類を作成

occupations <-
  c(
    "専門的・技術的職業",
    "管理的職業",
    "事務職",
    "販売職",
    "サービス職",
    "保安職",
    "農林漁業作業",
    "運輸・通信(1990年以前)",
    "輸送・機械運転",
    "生産工程(1990年以前は労務作業を含む)",
    "建設・採掘",
    "運搬・清掃・包装等",
    "分類不能"
  )

## 1995年以降

occupation_since1995 <- occupation_latest |>
  pivot_wider(names_from = occupation) |>
  mutate(
    `専門的・技術的職業` = `B専門的・技術的職業従事者`,
    `管理的職業` = `A管理的職業従事者`,
    `事務職` = `C事務従事者`,
    `販売職` = `D販売従事者`,
    `サービス職` = `Eサービス職業従事者`,
    `保安職` = `F保安職業従事者`,
    `農林漁業作業` = `G農林漁業従事者`,
    `輸送・機械運転` = `I輸送・機械運転従事者`,
    `建設・採掘` = `J建設・採掘従事者`,
    `運搬・清掃・包装等` = `K運搬・清掃・包装等従事者`,
    `生産工程(1990年以前は労務作業を含む)` = `H生産工程従事者`,
    `分類不能` = `L分類不能の職業`
  ) |>
  select(year, `専門的・技術的職業`:`分類不能`) |>
  pivot_longer(-year, names_to = "occupation") |>
  mutate(occupation = factor(occupation, levels = occupations))


## 1990年以前

occupation_before1995 <- occupation_old |>
  pivot_wider(names_from = occupation) |>
  mutate(
    `専門的・技術的職業` = `A専門的・技術的職業従事者`,
    `管理的職業` = `B管理的職業従事者`,
    `事務職` = `C事務従事者`,
    `販売職` = `D販売従事者`,
    `サービス職` = `Eサービス職業従事者`,
    `保安職` = `F保安職業従事者`,
    `農林漁業作業` = `G農林漁業作業者`,
    `運輸・通信(1990年以前)` = `H運輸・通信従事者`,
    `生産工程(1990年以前は労務作業を含む)` = `I生産工程・労務作業者`,
    `分類不能` = `J分類不能の職業`
  ) |>
  select(year, `専門的・技術的職業`:`分類不能`) |>
  pivot_longer(-year, names_to = "occupation") |>
  mutate(occupation = factor(occupation, levels = occupations))

# Plot

occupation <- rbind(occupation_before1995, occupation_since1995)

clr <- c(brewer.pal(7, "Accent"), brewer.pal(5, "YlOrRd"), "#FFFFFF")

graph_occupation <- occupation |>
  mutate(year = as.factor(year)) |>
  ggplot(aes(x = year, y = value, fill = occupation)) +
  geom_bar(
    stat = "identity",
    color = "black",
    linewidth = 0.5
  ) +
  scale_fill_manual(name = "職業", values = clr) +
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  labs(x = "年", y = "", title = "職業構成の変化") +
  theme_classic(base_size = 16)

plot(graph_occupation)