Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

読書記録 - 「憲法とは何か」 長谷部 恭男 著 (岩波新書)

2006年4月に発行された本で、私が買ったのは2026年7月の第19刷でした。毎年増刷されているペースです。

憲法改正を強く推し進めようとする高市早苗首相に強い嫌悪感を持っている私としては、憲法について改めて学びたいと思い、この本を手に取りました。

20年前に書かれた本ですが、まったく古くないです。憲法というものは、一般の法律と何が違うのかということが書かれています。

この世界は、比較不能な異なる価値観・多様性であふれてします。そのなかで、紛争をできる限り避けるには、公私の区別をしっかりとすること。そして、私の世界では自分の価値観に従って生きて、公の世界では、なるべくみんなの共通の価値が守られるように憲法を策定して国を成り立たせる、というようなことが書いてありました。

新聞やテレビなどのマスコミで、あなたは憲法改正に賛成ですか、反対ですか、という世論調査の結果がときどき発表されますが、憲法のどの部分をどのように改正するのかわからなければ、答えようがない、ということが書いてあって、私が日頃思っていることと同じことが書いてあって嬉しくなりました。

現在、日本国憲法は、衆議院、参議院の3分の2以上の賛成で、憲法改正の案が決議され、さらに国民投票で過半数の賛成があってはじめて、憲法が改正されるということです。筆者はこれに加えてさらに、国会の決議から2年以上経ってから国民投票をするように、国民がちゃんと憲法改正案について理解して考える期間を取るようにしたほうが良い、と書いていました。

これからも憲法を巡るいろいろな動きには、関心を持ち続けていきたいです。

 

時系列データ、株価平均(2026年8月)のデータの分析2 - 1ヶ月前、2ヶ月前の変数をlag()関数で作成する。

www.crosshyou.info

の続きです。今回は分析するためのデータフレームを少し加工します。

はじめに summary() 関数で、データフレームのサマリーをみてみます。

NA が122個もあります。na.omit() 関数で NA の行を削除します。

NA がなくなりました。データ期間は、2022年4月から2026年8月までの約4年間のデータです。

lag() 関数で1ヶ月ずらした変数をつくりましょう。

同じようにして、2ヶ月前の変数も作ります。

こうして作成した、df_lag1, df_lag2 のデータフレームを df と結合します。 inner_join() 関数を使います。

NA の行を削除します。

次は、pwとpw1, pw1とpw2の変化率を作ります。

これで、とりあえずデータフレームの加工は終わりにします。

51行 X 31列 というかなり正方形に近いデータフレームですね。

私が調べたいのは、pw: プライム市場の加重平均株価 なのでこれのグラフを描いてみます。

2025年の半ばまでは下落していて、そこから上昇に転じていますね。

変化率, pwc もグラフにしてみます。

0 の水準に水平線を引きました。なんか、下落した翌月は上昇、上昇した翌月は下落、って感じですね。

ヒストグラムも描いてみます。

0 より大きいほうが分布は多いですが、大きな下落を経験していますね、-0.1 は、1ヶ月に 10% も下落したということですからね。

今回は以上です。

はじめから読むには、

www.crosshyou.info

です。

今回のコードは、以下になります。

#
# dfのサマリー
summary(df)
#
# NAを削除
df <- na.omit(df)
summary(df)
#
# ひと月前のデータを作る
df_lag1 <- df |> 
  mutate(
    across(pw:gs, lag)
  ) |> 
  rename(
    pw1 = pw,
    ps1 = ps,
    sw1 = sw,
    ss1 = ss,
    gw1 = gw,
    gs1 = gs
  )
df_lag1
#
# ふた月前のデータを作る
df_lag2 <- df |> 
  mutate(
    across(pw:gs, \(x) lag(x, 2))
  ) |> 
  rename(
    pw2 = pw,
    ps2 = ps,
    sw2 = sw,
    ss2 = ss,
    gw2 = gw,
    gs2 = gs
  )
df_lag2
#
# df, df_lag1, df_lag2を結合する
df <- df |> 
  inner_join(df_lag1, by = "date") |> 
  inner_join(df_lag2, by = "date")
df
#
# NAを削除する
df <- na.omit(df)
df
#
# pwとpw1の変化率、pw1とpw2の変化率を作成
df <- df |> 
  mutate(
    pwc = pw / pw1 - 1,
    pw1c = pw1 / pw2 - 1,
    psc = ps / ps1 - 1,
    ps1c = ps1 / ps2 - 1,
    swc = sw / sw1 - 1,
    sw1c = sw1 / sw2 - 1,
    ssc = ss / ss1 - 1,
    ss1c = ss1 / ss2 - 1,
    gwc = gw / gw1 - 1,
    gw1c = gw1 / gw2 - 1,
    gsc = gs / gs1 - 1,
    gs1c = gs1 / gs2 - 1
  )
glimpse(df)
#
# pwのグラフ
df |> 
  ggplot(aes(x = date, y = pw)) +
  geom_line() +
  geom_point() +
  theme_minimal()
#
# pwcのグラフ
df |> 
  ggplot(aes(x = date, y = pwc)) +
  geom_line() +
  geom_point() +
  geom_hline(yintercept = 0) +
  theme_minimal()
#
# pwcのヒストグラム
df |> 
  ggplot(aes(x = pwc)) +
  geom_histogram(bins = 10, color = "white") +
  theme_minimal()
#

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Clear fine photograph of nature green grass field. Under the blue sky and a few white clouds, some tiny colorful flowers are there. A close op of gold fragrant olive flowers. です。)

読書記録 - 「生命の本質 常識を覆す「複製」の世界」 武村 政春 著 (中公新書)

あとがきには、「二〇二六年七月 東京・神楽坂の薄暗く、しかし静謐なる研究室にて」とありますので、最近発行されたばかりの本です。

生命の本質は、半保存的で、オリジナル性が維持されるような自己複製にあるということを主張しています。

生物と生命は違っていて、「生物は細胞からできている」という細胞説が生命科学の中での大前提というか常識ということです。だけども細胞の中には、半保存的で、オリジナリティ性が維持されるような自己複製を行うミトコンドリアのようなものもあったりするので、生命から生物への境界は、あいまいなものだということです。

DNAやRNAの話があったりしましたが、「自己複製」が生命の本質だということを繰り返し、繰り返し主張しているような印象を持ちました。

半保存的で、オリジナル性が維持されるような自己複製とは「進化」とおんなじことのような気がしました。

本書のタイトルにある「常識を覆す」というのが、どのような「常識」なのかというのが今一つ曖昧に感じました。「生物は細胞からできている」という常識を「ミトコンドリアやウイルスも生物とみなす」ということなのかとも思いましたが、そこはあまり強調されていないような気がしました。

私が編集者なら、「生命の本質 深淵な「自己複製」の世界」という題名にします。

編集者の話になりましたが、あとがきに、はじめの編集者が「講談社ブルーバックス」に移籍した、と書かれてありました。編集者も出版社を移ることがあるんだな、と思いましたし、書籍って編集者によって良くもなれば悪くもなるので、編集者にももっと光が当たればいいな、と本好きの人間として思いました。

 

 

時系列データ、株価平均 (2026年8月) のデータの分析1 - ExcelファイルのデータをRに取り込む。

今回は東証の株価のデータを使って遊んでみます。

www.jpx.co.jp

このサイトにある「株価平均 (2026年8月) 」のExcelファイルをダウンロードしました。

このようなファイルでした。1枚目のシートは、2022年4月から2026年8月までのプライム市場、スタンダード市場、グロース市場の加重平均と単純平均の株価でした。

2枚目のシートは、1998年1月から2022年4月までの東証1部と東証2部のデータでした。

今回は1枚目のシートを使おうと思います。

10行目に変数名を追加しました。pはプライム、sはスタンダード、gはグロースの意味で、wは加重平均、sは単純平均の意味です。

時系列のデータの分析は、あまりやったことないので、いろいろと練習してみようと思います。

では、なにはともあれ、tidyverseパッケージの読み込みをします。

read_csv()関数で読み込みします。

dateがchrなので、日付型でなくて文字列型として読み込まれています。

訂正しましょう。まず、どんなかたちで読み込まれてるかをみます。

YYYY/Mという形で取り込まれていますね。

これを日付型にするには、どうしたらいいでしょうか?

Coilotに相談したら、

library(lubridate)

x <- c("2024/1", "2024/2", "2024/3")

# "YYYY/MM" → 月末日
result <- ceiling_date(ym(x), "month") - days(1)

result
のようにするらしいです。

やってみます。

できました!

ym("2022/4") で 2022-04-01 という月初日を作ります。

ceiling_date(2022-04-01, "month") で翌月の月初日, 2022-05-01になります。

-days(1)で1日前の2022-04-30になる

ということです。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

今回のコードは、

#
# tidyverseパッケージの読み込みをします。
library(tidyverse)
#
# CSVファイルの読み込み
df_raw <- read_csv("kabuka_202608.csv",
                   skip = 9)
#
# dateの確認
df_raw
#
# dateを日付型に
df <- df_raw |> 
  mutate(date = ceiling_date(ym(date), "month") - days(1))
df
#

です。

 

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Photograph of natural landscape of long wide view of green mountains. Upper area shows bright blue sky, left area shows sun setting, right side shows close up of a unique red rose flowers. です。)

 

UCI Machine Learning Repository の Seoul Bike Sharing Demand のデータに分析6 - randonForestパッケージでのランダムフォレストでの予測

www.crosshyou.info

の続きです。今回は、randomForestパッケージによるランダムフォレストでの予測をします。まず、randomForestパッケージの読み込みをします。

モデルを学習します。

 

テストデータで予測をします。

RMSEを計算します。

他のモデルのRMSEと比較しましょう。

ランダムフォレストでの予測が一番小さなRMSEです。

最後にvarImpPlot()関数で変数の重要度をグラフにします。

hourが一番重要な変数です。

今回は以上です。

はじめから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# randomForestパッケージの読み込み
library(randomForest)
#
# モデルの学習
set.seed(1)
rf_mod <- randomForest(bike ~ ., data = df[train, ],
                       ntree = 500,
                       mtry = 4,
                       importance = TRUE)
#
# テストデータで予測
rf_pred <- predict(rf_mod, newdata = df[-train, ])
#
# RMSEの計算
RMSE_rf <- sqrt(mean*1
RMSE_rf
#
# 他のRMSEとの比較
RMSE_table <- RMSE_table |> 
  bind_rows(
    tibble(
      model = "rf",
      RMSE = RMSE_rf
    )
  )
RMSE_table
#
# 変数重要度
varImpPlot(rf_mod)
#

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Landscape photograph of rainy day, falling rain kindly, seeing high mountains far away, close up of Blue & Pink AJISAI flowers, no human-made objects です)

 

*1:rf_pred - df$bike[-train])^2

UCI Machine Learning Repository の Seoul Bike Sharing Demand のデータの分析5 - kernlabパッケージによるサポートベクターマシーンによる予測

www.crosshyou.info

の続きです。

今回は、サポートベクターマシーンで予測してみます。

まず、kernlab パッケージを読み込みます。

ksvm() 関数でモデルを学習します。

RMSEを計算します。

RMSEは、5.5くらいなので、前回の決定木モデルと同じくらいです。

他のモデルと比較します。

パラメータのチューニングをすれば、もう少し小さいRMSEになるかもしれませんね。

やってみます。以下のコードは、Copilot と相談しながら教えてもらいました。

このモデルでRMSEを計算します。

あら、7.3と悪くなってしまいましたね。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# kernlabライブラリの読み込み
library(kernlab)
#
# モデルの学習
set.seed(1)
ksvm_mod <- ksvm(bike ~ ., data = df[train, ])
#
# RMSEの計算
RMSE_kvsm <-
  sqrt(mean*1
RMSE_kvsm
#
# 他のモデルと比較
RMSE_table <- RMSE_table |> 
  bind_rows(
    tibble(
    model = "ksvm",
    RMSE = RMSE_kvsm
    )
  )
RMSE_table
#
# パラメータのチューニングの実践
# Step 1. Cの候補を作る
C_values <- c(0.01, 0.1, 1, 10, 100)
#
# Step 2. CVを回して最良のCを見つける
set.seed(1)
results <- sapply(C_values, function(C){
  model <- ksvm(
    bike ~ ., data = df[-train, ],
    type = "eps-svr",
    kernel = "vanilladot",
    C = C,
    epsilon = 0.1,
    cross = 5   # 5-fold CV
  )
  model@cross # CV の MSE が返る
})
#
results
best_C <- C_values[which.min(results)]
best_C
#
# Step 3. 最良のCで学習
ksvm_mod <- ksvm(
  bike ~ ., data = df[train, ],
  type = "eps-svr",
  kernel = "vanilladot",
  C = best_C,
  epsilon = 0.1
)
#
# RMSEの計算
RMSE_kvsm <-
  sqrt(mean*2
RMSE_kvsm
#





(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Photograph of old times natural grass field, blue sky, white clouds, many beautiful flowers, close up of red Celosia argentea flower. です。)

 

*1:predict(ksvm_mod, newdata = df[-train, ]) - test_Y)^2

*2:predict(ksvm_mod, newdata = df[-train, ]) - test_Y)^2

読書記録 - 「非核三原則 「唯一の被爆国」が抱える矛盾」 梅原 季哉 著 (岩波新書)

2026年8月20日発行の本なので、発行されたばかりの本です。

非核三原則とは、核兵器を「持たない、作らない、持ち込ませない」という政策で日本が堅持している国是です。

高市早苗という極めて危険(私の主観です)な生物が日本の総理大臣になってしまったために「非核三原則」がどうなってしまうのか、という危機意識から本書を手に取りました。

非核三原則は最初から三原則というかたちで世に生まれたのではなくて、アメリカが広島、長崎に原子爆弾が投下したときからの歴史的な動きの中から徐々に形成されてきたことが書かれています。

「非核三原則」を堅持し、核兵器の無い世界を作るには、この世界に暮らす一人一人の心がけが不可欠だと思いました。