tabulaパッケージによるセリエーショングラフ

セリエーショングラフは、年代別に出現頻度を示すヒストグラムの一種です。[tabraパッケージ](https://github.com/nfrerebeau/tabula)を利用したセリエーショングラフ作成方法を解説します。

```{r}
install.packages("tabula")
library(tabula)
```

利用するデータは、墓標の分類と建立年代のデータです。

```{r}
> data
# A tibble: 127 x 2
   type       build_date
   <chr>      <date>    
 1 平頭角柱   1992-06-16
 2 丘状頭角柱 1992-10-01
 3 平頭角柱   1986-05-01
 4 平頭角柱   1978-08-21
 5 平頭角柱   1979-11-01
 6 平頭角柱   1993-09-26
 7 平頭角柱   1981-07-23
 8 平頭角柱   1995-04-20
 9 平頭角柱   1973-03-08
10 平頭角柱   1978-03-10

```

セリエーショングラフを描画するための手順は次のとおりです。

1. 時期区分順序付きのカテゴリカル変数を作成(`mutate`)
2. 時期区分と型式のクロス集計表を作成（`spread`）
3. countMarix形式に変換（`as_count`）
4. セリエーショングラフ描画（`plot_ford`）

## 時期区分

mutate()関数とcase_when()を組み合わせて10年スパンの時期区分を行います。

```{r}
data_ser <- data %>%
  mutate(ser = case_when(
    build_date < as.Date("1945-08-15") ~"A期" ,
    build_date >= as.Date("1945-08-15") & 
      build_date < as.Date("1955-01-01")  ~"B期" ,
    build_date >= as.Date("1955-01-01") & 
      build_date < as.Date("1965-01-01")  ~"C期" ,
    build_date >= as.Date("1965-01-01") & 
      build_date < as.Date("1975-01-01")  ~"D期" ,
    build_date >= as.Date("1975-01-01") & 
      build_date < as.Date("1985-01-01")  ~"E期" ,
    build_date >= as.Date("1985-01-01") & 
      build_date < as.Date("1995-01-01")  ~"F期" ,
    build_date >= as.Date("1995-01-01") & 
      build_date < as.Date("2000-01-01")  ~"G期" ,
    build_date >= as.Date("2000-01-01") & 
      build_date < as.Date("2010-01-01")  ~"H期" ,
    build_date >= as.Date("2010-01-01") ~"I期" ,
  )) 
> data_ser
# A tibble: 127 x 3
   type       build_date ser  
   <chr>      <date>     <chr>
 1 平頭角柱   1992-06-16 F期  
 2 丘状頭角柱 1992-10-01 F期  
 3 平頭角柱   1986-05-01 F期  
 4 平頭角柱   1978-08-21 E期  
 5 平頭角柱   1979-11-01 E期  
 6 平頭角柱   1993-09-26 F期  
 7 平頭角柱   1981-07-23 E期  
 8 平頭角柱   1995-04-20 G期  
 9 平頭角柱   1973-03-08 D期  
10 平頭角柱   1978-03-10 E期 
```

## クロス集計表作成

type（型式）とser(時期区分)でグループ化して、count()関数で集計します。

```{r}
data_count <- data_ser %>%
  group_by(type,ser) %>%
  count() 
> data_count
# A tibble: 24 x 3
# Groups:   type, ser [24]
   type       ser       n
   <chr>      <chr> <int>
 1 角台角柱   D期       2
 2 角台角柱   E期       2
 3 角台角柱   F期       2
 4 角台角柱   G期       5
 5 角台角柱   H期       9
 6 角台角柱   I期       3
 7 丘状頭角柱 A期       4
 8 丘状頭角柱 C期       1
 9 丘状頭角柱 D期       7
10 丘状頭角柱 E期       7

```

## CountMatrix型式に変換

spread()関数でクロス集計表の形に変換して、不要になった時期区分を消去して、CountMatrix型式に変換します。

```{r}
data_CM <- data_count %>%
  spread(key = type , value = n ,fill = 0) %>% # fill=0で、NAをゼロで置き換える
  ungroup() %>%  # ungroup()しないとas_count関数でエラーが出る。
  select(-ser) %>%  # 時期区分を外す
  as_count()   # CountMatrix型式に変換
> data_CM
<CountMatrix: b4111ed0-ad0b-4676-b2a0-3a1636cd6647>
 9 x 4 absolute frequency matrix:
  角台角柱 丘状頭角柱 西洋型 平頭角柱
1        0          4      1        2
2        0          0      0        3
3        0          1      0        1
4        2          7      0        5
5        2          7      1       22
6        2          7      0       22
7        5          0      0        4
8        9          1      9        0
9        3          0      6        1
```

## 完成


```{r}
data_CM %>%
  plot_ford()
```
暦年が利用できる墓標データではあまりメリットが感じられませんでした。土器型式による時期区分のような順序付きカテゴリ変数が時間尺度として機能しているケースを想定しているのでしょう。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/e91ea7ac-5b26-754e-ec64-0f34dce027c3.png)