【レポート課題のサンプル②】野生鳥獣の放射線モニタリング調査結果:

イノシシに残存する放射線セシウム量の推移を中心に

Author

苅谷 千尋

Published

Wednesday, 30, Apr, 2025

Modified

Tuesday, 5, Aug, 2025

このページは、受講生の最終成果物のサンプルとして、成果物を模して作成します。章・節といった構成や文章(内容)については各自、お考え下さい

セットアップチャンクは、表示する必要はありませんが、受講生の便宜のために表示しています

レンダリングのフォント設定:Windowsの場合

このページはMacで動くように設定しています。Windows ユーザーは以下のセットアップチャンク内の設定フォント

  • 「Hiragino Sans」を「Meiryo」
  • 「HiraginoSans-W3」を「Meiryo」

に置き換えて下さい。フォントサイズはMeiryoでなくてもかまいません。お使いのPCにインストールされている好みのフォントをお使い下さい。

文字が表示されない(=日本語が□で表示されたら)教えてください。

Code
# ggplotのデフォルト設定の調整 ----
## フォントファミリとサイズ
ggplot2::theme_set(
  ggplot2::theme_get() +
    ggplot2::theme(text = ggplot2::element_text(family = "HiraginoSans-W3", size = 9))
)

## text/labelのフォントファミリとサイズ
ggplot2::update_geom_defaults(
  "text",
  list(family = "HiraginoSans-W3", size = 3)
)

ggplot2::update_geom_defaults(
  "label",
  list(family = "HiraginoSans-W3", size = 3)
)

# パッケージの読み込み ----
library(tidyverse) # tidyverse
library(readxl) # エクセルファイルの読み込み

library(skimr) # 統計量の要約
library(scales) # スケール
library(gt) # 表
library(zoo)  # rollmean()を使うために必要

library(ggpubr) # ggplot系の追加パッケージ
library(ggrepel) # ggplot系の追加パッケージ
library(gghighlight) # ggplot系の追加パッケージ

library(zipangu) # 元号を西暦に変換するために使用

# データの読み込みと加工 ----

## もともとのデータが動物ごとに作成されている。それぞれの動物ごとにデータフレームを作成し、結合するという手順をとる

df_イノシシ <-
  read_csv("data/野生鳥獣の放射線モニタリング調査結果_イノシシ.csv", 
           # col_names = FALSE,
           skip = 1,
           locale = locale(encoding = "cp932")) |> #文字コード
  slice(-1) |>
  slice(1:2320) |> 
  separate(検査月日, into = c("和暦", "月", "日"), sep = "\\.") |> # 検査月日から年月日を抽出
  mutate(
    .before = 和暦,
    西暦 = convert_jyear(和暦)) |> # 和暦から西暦に変換
  select(-5) |>
  select(No., 方部, 捕獲地点, 西暦, , , セシウム = `核種濃度\n(セシウム)\nBq/kg`) |>
  mutate(
    .before = 西暦,
    検査月日 = make_date(西暦, , )
  ) |>
  mutate(
    セシウム = as.numeric(gsub(",", "", セシウム))
  ) |> 
  mutate(検出有無 = if_else(grepl("検出せず", セシウム), "検出せず", "検出")) |> # 既存のデータから「検出有無」というカラムを作成
  mutate(
    .after = No.,
    動物 = "イノシシ"
  )

df_ツキノワグマ <- # 補足については上記を参照
  read_csv("data/野生鳥獣の放射線モニタリング調査結果_ツキノワグマ.csv", 
           # col_names = FALSE,
           skip = 1,
           locale = locale(encoding = "cp932")) |>
  slice(-1) |>
  slice(1:813) |> 
  separate(検査月日, into = c("和暦", "月", "日"), sep = "\\.") |>
  mutate(
    .before = 和暦,
    西暦 = convert_jyear(和暦)) |>
  select(-5) |>
  select(No., 方部, 捕獲地点, 西暦, , , セシウム = `核種濃度\n(セシウム)\nBq/kg`) |>
  mutate(
    .before = 西暦,
    検査月日 = make_date(西暦, , )
  ) |>
    mutate(
    セシウム = as.numeric(gsub(",", "", セシウム))
  ) |> 
  mutate(検出有無 = if_else(grepl("検出せず", セシウム), "検出せず", "検出")) |> 
  mutate(
    .after = No.,
    動物 = "ツキノワグマ"
  )


df_野生鳥獣 <- # イノシシのデータフレームとツキノワグマのデータフレームを結合=ggplotに渡すデータフレームを作成
  bind_rows(df_イノシシ, df_ツキノワグマ)


df_野生鳥獣 <- 
  df_野生鳥獣 |> 
  mutate(
    No. = as.numeric(No.),
    検査月日 = ymd(検査月日),
    # セシウム = as.numeric(セシウム),
= as.numeric(),
= as.numeric(),
    動物 = as.factor(動物),
    検出有無 = as.factor(検出有無)
  )

全体

Code
df_野生鳥獣 |>
  skim() |> 
  gt()
skim_type skim_variable n_missing complete_rate Date.min Date.max Date.median Date.n_unique character.min character.max character.empty character.n_unique character.whitespace factor.ordered factor.n_unique factor.top_counts numeric.mean numeric.sd numeric.p0 numeric.p25 numeric.p50 numeric.p75 numeric.p100 numeric.hist
Date 検査月日 0 1.0000000 2011-10-13 2024-06-25 2017-01-10 162 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
character 方部 0 1.0000000 NA NA NA NA 2 3 0 7 0 NA NA NA NA NA NA NA NA NA NA NA
character 捕獲地点 0 1.0000000 NA NA NA NA 2 5 0 50 0 NA NA NA NA NA NA NA NA NA NA NA
factor 動物 0 1.0000000 NA NA NA NA NA NA NA NA NA FALSE 2 イノシ: 2320, ツキノ: 813 NA NA NA NA NA NA NA NA
factor 検出有無 0 1.0000000 NA NA NA NA NA NA NA NA NA FALSE 1 検出: 3133 NA NA NA NA NA NA NA NA
numeric No. 0 1.0000000 NA NA NA NA NA NA NA NA NA NA NA NA 964.97000 675.040236 1.0 392 784 1537 2320 ▇▇▃▃▃
numeric 西暦 0 1.0000000 NA NA NA NA NA NA NA NA NA NA NA NA 2017.17204 3.747893 2011.0 2014 2017 2020 2024 ▆▇▅▅▅
numeric 0 1.0000000 NA NA NA NA NA NA NA NA NA NA NA NA 7.05841 3.643707 1.0 3 8 10 12 ▇▁▃▆▇
numeric 0 1.0000000 NA NA NA NA NA NA NA NA NA NA NA NA 15.88126 8.642721 1.0 10 16 24 31 ▇▇▆▇▆
numeric セシウム 240 0.9233961 NA NA NA NA NA NA NA NA NA NA NA NA 604.22506 2583.440074 4.4 31 100 340 61000 ▇▁▁▁▁
Code
基準値 <- data.frame(yintercept = 100, Lines = '基準値')

df_野生鳥獣 |>
  filter(!is.na(セシウム)) |> 
  group_by(動物) |> 
  ungroup() |> 
  ggplot(aes(x = 検査月日, y = セシウム, colour = 動物, group = 動物)) +
  geom_boxplot() +
  geom_jitter() +
  geom_hline(aes(yintercept = yintercept, linetype = "基準値"), color = "red", data = 基準値) +
  labs(color = "動物", linetype = "")

  • イノシシにセシウム濃度が高いことがわかる
  • 基準値を超えているものが多い。ただし、2020年以降はおおむね基準値に収まっている

イノシシ

Code
df_野生鳥獣 |>
  filter(!is.na(セシウム)) |> 
  filter(動物 == "イノシシ") |>
  group_by(方部) |> 
  ggplot(aes(x = 検査月日, y = セシウム, colour = 方部, group = 方部)) +
  geom_boxplot() +
  geom_jitter() +
  geom_hline(aes(yintercept = yintercept, linetype = Lines), 基準値)

  • イノシシに限定して描画
  • 残留濃度が高いイノシシのエリアと時期を特定できる
  • 2020年以降は減少傾向にあるが、外れ値に留意
Code
df_野生鳥獣 |>
  filter(動物 == "イノシシ") |>
  filter(!is.na(セシウム)) |> 
  group_by(方部, 西暦) |>
  ggplot(aes(x = "", y = セシウム, colour = 方部, group = 方部)) +
  geom_boxplot() +
  geom_jitter() +
  geom_hline(aes(yintercept = yintercept, linetype = "基準値"), color = "red", data = 基準値) +
  scale_linetype_manual(name = "", values = c("基準値" = "dashed")) +
  labs(x = "") +
  facet_wrap(~ 西暦)

Code
df_野生鳥獣 |>
  filter(動物 == "イノシシ") |>
  filter(!is.na(セシウム)) |> 
  group_by(方部, 西暦) |>
  ggplot(aes(x = factor(西暦), y = セシウム)) +
  geom_boxplot() +
  geom_jitter() +
  geom_hline(aes(yintercept = yintercept, linetype = "基準値"), color = "red", data = 基準値) +
  scale_linetype_manual(name = "", values = c("基準値" = "dashed")) +
  scale_y_continuous(labels = comma) +
  theme(legend.position = "bottom") +
  labs(x = "") +
  facet_wrap(~ 方部)

方部「相双」

Code
df_野生鳥獣 |>
  filter(動物 == "イノシシ") |>
  filter(!is.na(セシウム)) |> 
  filter(方部 == "相双") |> 
  group_by(方部, 西暦) |>
  ggplot(aes(x = factor(西暦), y = セシウム)) +
  geom_boxplot() +
  geom_jitter() +
  geom_hline(aes(yintercept = yintercept, linetype = "基準値"), color = "red", data = 基準値) +
  scale_linetype_manual(name = "", values = c("基準値" = "dashed")) +
  scale_y_continuous(labels = comma) +
  theme(legend.position = "bottom") +
  labs(x = "")