懲役刑と罰金刑の関係

※法律素人なので懲役刑もしくは罰金刑のどちらがよい/悪いを推奨しているわけではありません。実際に刑を受ける場合は弁護士に聞いてください。

〇〇年の懲役または△△円の罰金、というフレーズをときたま見かけるが、法律的に一定の指標があるのかどうか気になった。
「十五年以下の懲役又は五十万円以下の罰金」なぜこんなにアンバランスなのでしょうか?日本の法律の「X以下の懲役又はY以下の罰金」という量刑の上限規定の X と Y に落差があるのはなぜでしょう? - Quora

そして、通常は、懲役刑と罰金刑であれば、自由が確実に奪われる懲役の方が重いとされていますので、「X以下の懲役又はY以下の罰金」という刑の幅が規定されている場合(例:傷害罪や窃盗罪)、数か月という比較的短期間の懲役よりもさらに軽い刑にしようと判断された場合にはじめて罰金刑が選択されます。個人的な感覚では懲役3月くらいより下回る場合には罰金刑かな、という感じです。

と書いてあり、確かに懲役刑のほうが重たく感じる。

というわけで、法律の全文から「〇〇年以下の懲役または△△円以下の罰金」というフレーズを抽出し、懲役刑と罰金刑の関係を考えた。
法律全文はe-gov というサイトからxml ファイルをダウンロードできる。これを解凍して適当なディレクトリにおいて、Rで全部読み込んで処理する。
XML一括ダウンロード | e-Gov法令検索
結果としては4235件の罰則があり、懲役刑1年あたり83万円の罰金だった。
対数変換したり非線形な相関を考えていたが面倒だったので線形処理した。
f:id:MikuHatsune:20210801135634p:plain

懲役年数に対して罰金額が異常に大きいのが、漁業法 | e-Gov法令検索である。第十章罰則の第百八十九条には、3年以下の懲役または3000万円(!)以下の罰金、とある。

第百八十九条 次の各号のいずれかに該当する者は、三年以下の懲役又は三千万円以下の罰金に処する。
一 第百三十二条第一項の規定に違反して特定水産動植物を採捕した者
二 前号の犯罪に係る特定水産動植物又はその製品を、情を知つて運搬し、保管し、有償若しくは無償で取得し、又は処分の媒介若しくはあつせんをした者

懲役年数に対して罰金額が異常に小さいのが、刑法 | e-Gov法令検索の第二十七章傷害の罪の第二百四条傷害罪である。

第二百四条 人の身体を傷害した者は、十五年以下の懲役又は五十万円以下の罰金に処する。

「〇〇年以下の懲役または△△円以下の罰金」というのは各々最大値の関係が述べられているだけなので、平均的に相関はどうなのか、は検討する余地がありそう。ただし、法文に明記されいている刑と実際の求刑がどれくらい幅があるのかは法律素人なのでわからなかった。
また、「〇〇年以下の懲役及び△△円以下の罰金」というのもあって、実際の刑は懲役刑か罰金刑のみ選ぶのか、どちらも受刑するのか、とかよくわからなかった。

上記のQuaraで

もっとも、経済的な色彩が強い特別法の中には、経済的なペナルティということで罰金の上限が高く設定されている場合があります。たとえば、漫画村のような事例に適用される著作権法を見ると、著作権侵害の刑罰を定めた同法119条1項で「10年以下の懲役若しくは1000万円以下の罰金に処し、又はこれを併科する。」と規定されています。これには、①1か月~10年の懲役、②1万円~1000万円の罰金、③1か月~10年の懲役 + 1万円~1000万円の罰金、という3パターンがあり得ます(条文にある「併科する」が③のパターンですね)。著作権侵害は経済的なペナルティの要素が大きいので、罰金の上限が1000万円と比較的高額に設定されています。さらに犯行が悪質だったり被害者が多かったりすると懲役も併科されます。

とあるので、法律の内容で層別化しようとおもったが、xml の中身を読み解くのが面倒で「〇〇年以下の懲役または△△円以下の罰金」しか抽出していないので反響があれば再検討するかもしれない。

library(XML)
library(stringr)
library(minerva)
library(foreach)
library(doSNOW)
library(XML)
# 解凍した全ファイルの読み込み
f <- list.files("all_xml", recursive=TRUE, pattern="xml", full.names=TRUE)

z <- NULL
for(i in seq(f)){
for(i in 3182:length(f)){
  x <- unlist(xmlToList(f[i]))
  y <- str_extract_all(x, "、.{1,7}?の懲役.*の罰金")
  z <- c(z, unlist(y[sapply(y, length)>0]))
}

# 時間がかかるとき
cl <- makeCluster(4, type="SOCK")
registerDoSNOW(cl)
res <- foreach(i=seq(f), .combine=c, .packages=c("stringr", "XML")) %dopar% {
  x <- unlist(xmlToList(f[i]))
  y <- str_extract_all(x, "、.{1,7}?の懲役.*の罰金")
  unlist(y[sapply(y, length)>0])
}
stopCluster(cl)

x1 <- str_remove_all(res, "これを|、|以下の懲役.*")

r1 <- matrix(c(
"一年",1,
"五年",5,
"三箇月",3/12,
"三月",3/12,
"三年",3,
"四年",4,
"七年",7,
"十五年",15,
"十年",10,
"二年",2,
"六箇月",6/12,
"六月",6/12), nc=2, byrow=TRUE)
x0 <- as.numeric(r1[match(x1, r1[,1]), 2])

y1 <- str_extract(res, "[はび].{1,5}?円以下の罰金")
y2 <- str_remove_all(y1, "は|び|、|禁錮又|以下の罰金")

r1 <- matrix(c(
"二百五十万円",2500000,
"二百万円",2000000,
"二万円",20000,
"百五十万円",1500000,
"五百万円",5000000,
"四百万円",4000000,
"七百万円",7000000,
"二千万円",20000000,
"三千万円",30000000,
"三百万円",3000000,
"一万円",10000,
"五十万円",500000,
"五千円",5000,
"五万円",50000,
"三十万円",300000,
"三千円",3000,
"三万円",30000,
"千万円",10000000,
"二十万円",200000,
"二千円",2000,
"百万円",1000000,
"十万円",100000,
"千円",1000), nc=2, byrow=TRUE)
y0 <- as.numeric(r1[match(y2, r1[,1]), 2])


l <- lm(y0/10000 ~ x0)
par(mar=c(4.5, 5, 2, 2), cex.lab=2, cex.axis=1.3)
plot(x0, y0/10000, xlab="懲役年数 [年]", ylab="罰金額 [万円]", pch=16)
abline(l, lty=3, lwd=3, col="blue")