BL声優の「攻め」と「受け」のステレオタイプについてデータ分析した
この記事について
声優統計的なことをやってみようという思いつきを得たので、声優と演じるキャラのステレオタイプとの傾向を分析しようと思った。筆者の勝手なイメージとして、たとえば「喜多村英梨の演じるキャラはどちらかというと貧乳が多いのではないか」といったようなステレオタイプがあり、声優の演じるキャラはその人がいわゆるハマり役としているキャラクタ(人物像)によって、性格や容姿などに偏りが生じることがあるのではないだろうか。また、そういったことをデータによって検証できたら、面白いのではないかと考えた。
しかし、女性声優と演じているキャラの容姿の対応表をつくるのはとてもめんどくさそうだったので、この記事ではおこなわない。そのかわりに、似たような発想にもとづく試みとして、BL声優とその演じたキャラが「攻め」だったか「受け」だったかを確認できるようなデータなら得られそうだったため、それについて分析をすることにした。
データの収集
BLはいわずと知れた一大ジャンルなので当然のように専門の情報サイトがある。この記事では「ちるちる」というサイトに掲載されている情報を利用することにした。
BL漫画(コミック)、小説レビューサイト【ちるちる】
このサイト内の声優一覧 | BL情報サイト ちるちるというページからデータを得る。このページは名前やいわゆる「カップリング」などから声優を検索したりできるものらしく、各声優について「声優名」「作品数」「攻め作品」「受け作品」などといった情報が表形式で掲載されている(カップリング検索についてはサインアップが必要なようなので試していない)。
この記事でやりたい分析をおこなうために、このページから上記の4つの項目をスクレピングして抽出した。
if (!file.exists("./chil-chil_anchor_list.csv")) {
base_url <- "https://www.chil-chil.net/"
session <- polite::bow(base_url)
tables <- purrr::map_dfr(1:21, function(page) {
#### 2020/09/25の時点で21ページまである ####
session %>%
polite::nod(path = paste(c("voiceList", "page", page, "sort", 1L), sep = "/")) %>%
polite::scrape(content = "text/html; charset=UTF-8") %>%
rvest::html_nodes("#anchor_list") %>%
rvest::html_nodes(".c-list_artist") %>%
rvest::html_table() %>%
purrr::map_dfr(~ .) %>%
dplyr::mutate(source_page = page)
})
}
次のような形式のデータフレームを得る。
if (!file.exists("./chil-chil_anchor_list.csv")) {
tbl <- tables %>%
dplyr::select(-c("HP", "Twitter")) %>%
dplyr::rename(
name = "声優名",
counts = "作品数",
seme = "攻め作品",
uke = "受け作品"
) %>%
dplyr::mutate(name = stringr::str_remove(name, "([[:alpha:]]+)")) %>%
readr::write_csv("chil-chil_anchor_list.csv")
} else {
tbl <- readr::read_csv("chil-chil_anchor_list.csv")
}
tbl %>%
head() %>%
knitr::kable()
name | counts | seme | uke | source_page |
---|---|---|---|---|
森川智之 | 670 | 312 | 75 | 1 |
遊佐浩二 | 333 | 104 | 70 | 1 |
鳥海浩輔 | 442 | 128 | 95 | 1 |
平川大輔 | 336 | 103 | 91 | 1 |
羽多野渉 | 301 | 152 | 21 | 1 |
鈴木達央 | 171 | 35 | 58 | 1 |
2020年9月25日の時点では2,015人の声優の登録があった。
nrow(tbl)
## [1] 2015
ただし、ほとんどの声優は名前だけ登録があるみたいな状態のようで、出演している作品の登録があったとしても、主要なキャラクタとして出演している「攻め作品」や「受け作品」が登録されているとはかぎらない。したがって、登録されている「攻め作品」と「受け作品」との合計は、ここで記載されている「作品数」と必ずしも一致しない。
tbl %>%
dplyr::select(-name) %>%
summary()
## counts seme uke source_page
## Min. : 0.00 Min. : 0.000 Min. : 0.000 Min. : 1.00
## 1st Qu.: 1.00 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 6.00
## Median : 2.00 Median : 0.000 Median : 0.000 Median :11.00
## Mean : 11.79 Mean : 2.195 Mean : 2.093 Mean :10.58
## 3rd Qu.: 7.00 3rd Qu.: 0.000 3rd Qu.: 0.000 3rd Qu.:16.00
## Max. :670.00 Max. :312.000 Max. :200.000 Max. :21.00
「攻め作品」と「受け作品」の両方の登録がある(いずれのカラムについても1以上である)声優は2,015人のうち173人だった。以下では「攻め作品」と「受け作品」の両方の登録がある声優についてのみ分析している。
tbl %>%
dplyr::filter(seme > 0, uke > 0) %>%
nrow()
## [1] 173
グラフによる図示
攻め・受けの登録数のようす
「攻め作品」と「受け作品」を軸として図示すると以下のようになる。
tbl %>%
dplyr::filter(seme > 0, uke > 0) %>%
dplyr::mutate(binned_rank = dplyr::ntile(counts, 6L)) %>%
dplyr::mutate(binned_rank = as.factor(binned_rank)) %>%
ggplot2::ggplot(aes(x = seme, y = uke, label = name, colour = binned_rank)) +
ggplot2::geom_point() +
ggplot2::xlab("攻め") +
ggplot2::ylab("受け") +
ggplot2::ggtitle("攻め・受けの登録数A") +
ggplot2::theme_light() +
ggplot2::scale_colour_manual(values = viridisLite::plasma(6L))
軸を変換した例が次の図。
tbl %>%
dplyr::filter(seme > 0, uke > 0) %>%
dplyr::mutate(binned_rank = dplyr::ntile(counts, 6L)) %>%
dplyr::mutate(binned_rank = as.factor(binned_rank)) %>%
ggplot2::ggplot(aes(x = seme, y = uke, label = name, colour = binned_rank)) +
ggplot2::geom_point() +
ggplot2::scale_x_sqrt() +
ggplot2::scale_y_sqrt() +
ggplot2::xlab("攻め") +
ggplot2::ylab("受け") +
ggplot2::ggtitle("攻め・受けの登録数B") +
ggplot2::theme_light() +
ggplot2::scale_colour_manual(values = viridisLite::plasma(6L))
以下では、登録数のbinningで5以上になった群だけを抜粋して名前とともに図示した。
森川智之や緑川光がかなり外れた位置にあることがわかる。参考までに「ちるちる」内の個別ページにある両氏の紹介文から「得意分野」を引用する。
森川智之
得意分野 スーパー攻め。ウルトラ攻め。
緑川光
得意分野 スーパー受け。ウルトラ受け。 美人受け。プリ声受け。喘ぎの手本。
なお、森川は「BL声優界で帝王と呼ばれている」らしい。
tbl %>%
dplyr::filter(seme > 0, uke > 0) %>%
dplyr::mutate(binned_rank = dplyr::ntile(counts, 6L)) %>%
dplyr::filter(binned_rank > 4) %>%
ggplot2::ggplot(aes(x = seme, y = uke, label = name, alpha = counts)) +
ggplot2::geom_point() +
ggrepel::geom_text_repel() +
ggplot2::scale_x_sqrt() +
ggplot2::scale_y_sqrt() +
ggplot2::xlab("攻めの数") +
ggplot2::ylab("受けの数") +
ggplot2::ggtitle("攻め・受けの登録数C") +
ggplot2::theme_light() +
ggplot2::scale_colour_manual(values = viridisLite::plasma(6L))
攻め・受けの適性のようす
「攻め作品」の登録数と「受け作品」の登録数の比を求めて両軸を対数にして図示すると、きれいな直線に乗る。
tbl %>%
dplyr::filter(seme > 0, uke > 0) %>%
dplyr::mutate(binned_rank = dplyr::ntile(counts, 6L)) %>%
dplyr::mutate(binned_rank = as.factor(binned_rank)) %>%
dplyr::mutate(SU = seme / uke) %>%
dplyr::mutate(US = uke / seme) %>%
ggplot2::ggplot(aes(x = SU, y = US, label = name, alpha = counts, colour = binned_rank)) +
ggplot2::geom_point() +
ggplot2::scale_x_log10() +
ggplot2::scale_y_log10() +
ggplot2::ggtitle("攻め・受けの適性A") +
ggplot2::xlab("攻め適性") +
ggplot2::ylab("受け適性") +
ggplot2::theme_light() +
ggplot2::scale_colour_manual(values = viridisLite::plasma(6L))
登録数のbinningで6になった声優だけを抜粋して名前とともに図示したのが下図。石田彰や宮田幸季などが受け適性が高く、小西克幸や諏訪部順一などが攻め適性が高いらしい。
tbl %>%
dplyr::filter(seme > 0, uke > 0) %>%
dplyr::mutate(binned_rank = dplyr::ntile(counts, 6L)) %>%
dplyr::filter(binned_rank == 6) %>%
dplyr::mutate(SU = seme / uke) %>%
dplyr::mutate(US = uke / seme) %>%
ggplot2::ggplot(aes(x = SU, y = US, label = name, alpha = counts)) +
ggplot2::geom_point() +
ggrepel::geom_text_repel() +
ggplot2::scale_x_sqrt() +
ggplot2::scale_y_sqrt() +
ggplot2::ggtitle("攻め・受けの適性B") +
ggplot2::xlab("攻め適性") +
ggplot2::ylab("受け適性") +
ggplot2::theme_light() +
ggplot2::scale_colour_manual(values = viridisLite::plasma(6L))
まとめ
わかったこと
石田彰は受け適性が高く、小西克幸は攻め適性が高いといった声優ごとの傾向が少なからずあるらしいことがわかった。また、「BL声優界で帝王と呼ばれている」という森川智之については、登録されている作品数が抜群に多いこともあってか、攻めを得意としているという評判に必ずしも対応せず、攻め適性だけが格段に高いわけではないという知見も得られた。
ただし、この記事の筆者はBLについてはまったく明るくないため、BLに親しい人の感覚に照らして妥当な結果が得られているのか判断できない。また、今回利用したデータは「ちるちる」のサイト内に登録されているデータを利用したものであり、流通しているすべてのBL作品を網羅しているものとはかぎらないと思われる。そのため、BL声優が演じているキャラの傾向を正確に反映したデータであるかは実際にはわからない点に注意する必要があるだろう。
その他のコメント
実際、登録数が多いntileで4〜6の声優がそういう散らばり方をしているっぽいのはこの図からも概観できる気がする pic.twitter.com/hbVzaolvez
— あきる (@paithiov909) September 26, 2020
展望
声優の声質とかとの対応も分析されてほしい。あと、男性であるこの記事の筆者がいうのもなんだけれど、声優統計をはじめとする声優を扱っている分析の例は男性が女性声優のデータを扱っているケースがほとんどであり、男性声優が扱われている例はほぼないように見える。研究ジャンルとしてジェンダーバイアスがありすぎな気がするので、男性声優ファンにもどこかでがんばってもらいたい。
セッション情報
sessioninfo::session_info()
## - Session info ---------------------------------------------------------------
## setting value
## version R version 4.0.2 (2020-06-22)
## os Windows 10 x64
## system x86_64, mingw32
## ui RStudio
## language (EN)
## collate Japanese_Japan.932
## ctype Japanese_Japan.932
## tz Asia/Tokyo
## date 2020-09-25
##
## - Packages -------------------------------------------------------------------
## package * version date lib source
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
## backports 1.1.10 2020-09-15 [1] CRAN (R 4.0.2)
## blob 1.2.1 2020-01-20 [1] CRAN (R 4.0.2)
## broom 0.7.0 2020-07-09 [1] CRAN (R 4.0.2)
## cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.0.2)
## cli 2.0.2 2020-02-28 [1] CRAN (R 4.0.2)
## colorspace 1.4-1 2019-03-18 [1] CRAN (R 4.0.2)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.2)
## DBI 1.1.0 2019-12-15 [1] CRAN (R 4.0.2)
## dbplyr 1.4.4 2020-05-27 [1] CRAN (R 4.0.2)
## digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.2)
## dplyr * 1.0.2 2020-08-18 [1] CRAN (R 4.0.2)
## ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2)
## evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.2)
## fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.2)
## farver 2.0.3 2020-01-16 [1] CRAN (R 4.0.2)
## forcats * 0.5.0 2020-03-01 [1] CRAN (R 4.0.2)
## fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
## generics 0.0.2 2018-11-29 [1] CRAN (R 4.0.2)
## ggplot2 * 3.3.2 2020-06-19 [1] CRAN (R 4.0.2)
## ggrepel 0.8.2 2020-03-08 [1] CRAN (R 4.0.2)
## glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.2)
## haven 2.3.1 2020-06-01 [1] CRAN (R 4.0.2)
## here 0.1 2017-05-28 [1] CRAN (R 4.0.2)
## highr 0.8 2019-03-20 [1] CRAN (R 4.0.2)
## hms 0.5.3 2020-01-08 [1] CRAN (R 4.0.2)
## htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.2)
## httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2)
## jsonlite 1.7.1 2020-09-07 [1] CRAN (R 4.0.2)
## knitr 1.30 2020-09-22 [1] CRAN (R 4.0.2)
## labeling 0.3 2014-08-23 [1] CRAN (R 4.0.0)
## lifecycle 0.2.0 2020-03-06 [1] CRAN (R 4.0.2)
## lubridate 1.7.9 2020-06-08 [1] CRAN (R 4.0.2)
## magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.2)
## memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.2)
## modelr 0.1.8 2020-05-19 [1] CRAN (R 4.0.2)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.2)
## pillar 1.4.6 2020-07-10 [1] CRAN (R 4.0.2)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2)
## polite 0.1.1 2019-11-30 [1] CRAN (R 4.0.2)
## purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.0.2)
## R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.2)
## ratelimitr 0.4.1 2018-10-07 [1] CRAN (R 4.0.2)
## Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.2)
## readr * 1.3.1 2018-12-21 [1] CRAN (R 4.0.2)
## readxl 1.3.1 2019-03-13 [1] CRAN (R 4.0.2)
## reprex 0.3.0 2019-05-16 [1] CRAN (R 4.0.2)
## rlang 0.4.7 2020-07-09 [1] CRAN (R 4.0.2)
## rmarkdown 2.3 2020-06-18 [1] CRAN (R 4.0.2)
## robotstxt 0.7.13 2020-09-03 [1] CRAN (R 4.0.2)
## rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.2)
## rstudioapi 0.11 2020-02-07 [1] CRAN (R 4.0.2)
## rvest 0.3.6 2020-07-25 [1] CRAN (R 4.0.2)
## scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.2)
## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2)
## stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
## stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
## tibble * 3.0.3 2020-07-10 [1] CRAN (R 4.0.2)
## tidyr * 1.1.2 2020-08-27 [1] CRAN (R 4.0.2)
## tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.2)
## tidyverse * 1.3.0 2019-11-21 [1] CRAN (R 4.0.2)
## usethis 1.6.3 2020-09-17 [1] CRAN (R 4.0.2)
## vctrs 0.3.4 2020-08-29 [1] CRAN (R 4.0.2)
## viridisLite 0.3.0 2018-02-01 [1] CRAN (R 4.0.2)
## withr 2.3.0 2020-09-22 [1] CRAN (R 4.0.2)
## xfun 0.17 2020-09-09 [1] CRAN (R 4.0.2)
## xml2 1.3.2 2020-04-23 [1] CRAN (R 4.0.2)
## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.0)
##
## [1] C:/Users/user/Documents/R/win-library/4.0
## [2] C:/Program Files/R/R-4.0.2/library
この記事のソースコード
R Markdownで書いた。