« 2024年12月 | トップページ | 2025年2月 »

2025年1月30日 (木)

[R]画像の大きさを変える

magickパッケージのimage_resize関数を使う。元の画像をmagick-image型で用意して、この関数に当てはめればよい。

以下は、声優安野希世乃の公式ウェブサイトのページから画像ファイルをダウンロードしてパソコン内に保存し、その画像の大きさを変えた例。見てのとおりアップロードされているオリジナルの画像は非常に大きい(横3422ピクセル、縦5192ピクセル)ため、それぞれ10%ずつ縮めている。~1.pngがオリジナル、~2.pngが縦横10%に縮めた画像。

> library(magick)
> im <- image_read("https://img.imageimg.net/artist/kiyono-yasuno/img/profile.jpg")
> print(im)
format width height colorspace matte filesize density
1 JPEG 3422 5192 sRGB FALSE 1103106 350x350
> image_write(im, "R_magick_YasunoKiyono1.png")
> im <- image_resize(im, geometry = "10%")
> print(im)
format width height colorspace matte filesize density
1 JPEG 342 519 sRGB FALSE 0 350x350
> image_write(im, "R_magick_YasunoKiyono2.png")
R_magick_yasunokiyono1 R_magick_yasunokiyono2
R_magick_YasunoKiyono1.png R_magick_YasunoKiyono2.png

 

2025年1月29日 (水)

[R]Apacheのログファイルの日付列から日付時刻型ベクトルを作成する

tidyverseパッケージを読み込むと読み込まれるlubridateパッケージのparse_date_time関数を使う。以下は15行からなるサンプルのApacheのログファイルを読み込み、日付列(4列目)を日付時刻型ベクトルに変換した例。

> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> tib <- read_log("access.log")
> dim(tib)
[1] 15 9
> tib[, 1:6] |> as.data.frame()
X1 X2 X3 X4 X5 X6
1 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET / HTTP/1.1 200
2 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
3 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /favicon.ico HTTP/1.1 404
4 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET / HTTP/1.1 200
5 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
6 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /favicon.ico HTTP/1.1 404
7 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET / HTTP/1.1 200
8 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
9 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /favicon.ico HTTP/1.1 404
10 192.168.12.4 NA NA 06/Dec/2024:23:55:14 +0900 408
11 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET / HTTP/1.1 200
12 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
13 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /favicon.ico HTTP/1.1 404
14 192.168.12.4 NA NA 06/Dec/2024:23:57:04 +0900 GET / HTTP/1.1 200
15 192.168.12.4 NA NA 06/Dec/2024:23:57:55 +0900 408
> Sys.timezone()
[1] "Asia/Tokyo"
> parse_date_time(tib$X4, "%d/%m/%Y:%H:%M:%S %z")
[1] "2024-12-06 14:51:07 UTC" "2024-12-06 14:51:07 UTC" "2024-12-06 14:51:07 UTC"
[4] "2024-12-06 14:53:49 UTC" "2024-12-06 14:53:49 UTC" "2024-12-06 14:53:49 UTC"
[7] "2024-12-06 14:54:23 UTC" "2024-12-06 14:54:23 UTC" "2024-12-06 14:54:23 UTC"
[10] "2024-12-06 14:55:14 UTC" "2024-12-06 14:56:56 UTC" "2024-12-06 14:56:56 UTC"
[13] "2024-12-06 14:56:56 UTC" "2024-12-06 14:57:04 UTC" "2024-12-06 14:57:55 UTC"
> parse_date_time(tib$X4, "%d/%m/%Y:%H:%M:%S %z", tz = "Asia/Tokyo")
Date in ISO8601 format; converting timezone from UTC to "Asia/Tokyo".
[1] "2024-12-06 23:51:07 JST" "2024-12-06 23:51:07 JST" "2024-12-06 23:51:07 JST"
[4] "2024-12-06 23:53:49 JST" "2024-12-06 23:53:49 JST" "2024-12-06 23:53:49 JST"
[7] "2024-12-06 23:54:23 JST" "2024-12-06 23:54:23 JST" "2024-12-06 23:54:23 JST"
[10] "2024-12-06 23:55:14 JST" "2024-12-06 23:56:56 JST" "2024-12-06 23:56:56 JST"
[13] "2024-12-06 23:56:56 JST" "2024-12-06 23:57:04 JST" "2024-12-06 23:57:55 JST"
> dttm <- parse_date_time(tib$X4, "%d/%m/%Y:%H:%M:%S %z", tz = "Asia/Tokyo")
Date in ISO8601 format; converting timezone from UTC to "Asia/Tokyo".
> class(dttm)
[1] "POSIXct" "POSIXt"

上記のとおりparse_date_time関数は読み込んだ日付時刻を強制的にUTCと判断して変換する。そのため、読み込む際には明示的にタイムゾーンを指定する必要がある。変換された日付時刻型ベクトルのクラスはPOSIXctである。

2025年1月28日 (火)

[R]Apacheのログファイルを読み込む

tidyverseパッケージを読み込んで、read_log関数を使うと簡単にtibbleにすることができる。以下、例。

以下15行からなるサンプルのログファイル(access.log)をカレントディレクトリに置く。

192.168.12.2 - - [06/Dec/2024:23:51:07 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.2 - - [06/Dec/2024:23:51:07 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.2 - - [06/Dec/2024:23:51:07 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:53:49 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:53:49 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:53:49 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:54:23 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.12.4 - - [06/Dec/2024:23:54:23 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.12.4 - - [06/Dec/2024:23:54:23 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.12.4 - - [06/Dec/2024:23:55:14 +0900] "-" 408 0 "-" "-"
192.168.12.4 - - [06/Dec/2024:23:56:56 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:56:56 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:56:56 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:57:04 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:57:55 +0900] "-" 408 0 "-" "-"

パッケージを読み込んで、read_log関数でファイルを読み込む。

> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> tib <- read_log("access.log")
> dim(tib)
[1] 15 9
> tib[, 1:6] |> as.data.frame()
X1 X2 X3 X4 X5 X6
1 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET / HTTP/1.1 200
2 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
3 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /favicon.ico HTTP/1.1 404
4 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET / HTTP/1.1 200
5 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
6 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /favicon.ico HTTP/1.1 404
7 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET / HTTP/1.1 200
8 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
9 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /favicon.ico HTTP/1.1 404
10 192.168.12.4 NA NA 06/Dec/2024:23:55:14 +0900 <NA> 408
11 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET / HTTP/1.1 200
12 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
13 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /favicon.ico HTTP/1.1 404
14 192.168.12.4 NA NA 06/Dec/2024:23:57:04 +0900 GET / HTTP/1.1 200
15 192.168.12.4 NA NA 06/Dec/2024:23:57:55 +0900 <NA> 408

作成したtibbleは15行9列で、1~6列を表示させたところ、正しく読み込まれていることがわかる。

2025年1月27日 (月)

[R]Excelファイルのワークシートの中身を読み込む

readxlパッケージのread_excel関数を使う。以下はあらかじめ用意したエクセルファイル(sample1.xlsx)から読み込んだ例。xlsファイルかxlsxファイルかは自動判定して読み込んでくれる。ワークシートを指定しない場合は、一番最初(左側)のワークシートを読み込む。特定のワークシートから読み込みたい場合は、sheetオプションにワークシート名を指定すること。

> library(readxl)
> xlsx <- "sample1.xlsx"
> tib <- read_excel(xlsx, col_names = TRUE)
> tib |> as.data.frame()
番号 名前
1 1 ライスシャワー
2 2 フィー
3 3 黒川あかね
> tib <- read_excel(xlsx, sheet = "和多田美咲", col_names = TRUE)
> tib |> as.data.frame()
番号 名前
1 1 メイショウドトウ

R_read_excel1R_read_excel2

2025年1月25日 (土)

[R]Excelファイルに含まれるワークシートの名前をすべて表示する

readxlパッケージのexcel_sheets関数は、指定したExcelファイルに含まれるワークシートの名前を文字列型ベクトルで返す。以下はあらかじめ用意したエクセルファイル(sample1.xlsx)から読み込んだ例。xlsファイルかxlsxファイルかは自動判定して読み込んでくれる。ワークシートを指定しない場合は、一番最初(左側)のワークシートを読み込むが、sheetオプションにワークシート名を指定することで、指定したワークシートから読み込むことができるようになる。

> library(readxl)
> xlsx <- "sample1.xlsx"
> excel_sheets(xlsx)
[1] "石見舞菜香" "鈴木みのり" "和多田美咲"
> sheets <- excel_sheets(xlsx)
> tib <- read_excel(xlsx, sheet = sheets[2], col_names = TRUE)
> tib |> as.data.frame()
番号 名前
1 1 セナディア
2 2 フレイア

R_excel_sheets1R_excel_sheets2

2025年1月24日 (金)

[R]ガンマ関数の値の計算(「入門 統計解析 -医学・自然科学編」(東京図書)pp.120-121)

ガンマ関数の値を得るにはgamma関数を使う。

> alpha <- seq(0.1, 3.0, 0.1)
> ggamma <- gamma(alpha)
> dtf <- data.frame(alpha, ggamma)
> print(dtf)
alpha ggamma
1 0.1 9.5135077
2 0.2 4.5908437
3 0.3 2.9915690
4 0.4 2.2181595
5 0.5 1.7724539
6 0.6 1.4891922
7 0.7 1.2980553
8 0.8 1.1642297
9 0.9 1.0686287
10 1.0 1.0000000
11 1.1 0.9513508
12 1.2 0.9181687
13 1.3 0.8974707
14 1.4 0.8872638
15 1.5 0.8862269
16 1.6 0.8935153
17 1.7 0.9086387
18 1.8 0.9313838
19 1.9 0.9617658
20 2.0 1.0000000
21 2.1 1.0464858
22 2.2 1.1018025
23 2.3 1.1667119
24 2.4 1.2421693
25 2.5 1.3293404
26 2.6 1.4296246
27 2.7 1.5446858
28 2.8 1.6764908
29 2.9 1.8273551
30 3.0 2.0000000
> plot(alpha, ggamma, type = "n")
> lines(alpha, ggamma)

Nyumontk_fig_c6_2

2025年1月22日 (水)

[R]ドイツ語のエスツェットを表示する

ドイツ語のウムラウト3文字とそのUTF-8による文字コード(16進数による表記)は以下のとおり。

ß c39f

文字コードを使用してrawToChar関数とas.raw関数を組み合わせてエスツェットの文字列を作成し、それを使用すればよい。

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8"
> rawToChar(as.raw(c(0xc3, 0x9f)))
[1] "ß"
> s <- rawToChar(as.raw(c(0xc3, 0x9f)))
> cat(sprintf("%s の代用表記は ss です。\n", s))
ß の代用表記は ss です。

2025年1月21日 (火)

[R]PDFファイルを画像に変換する

pdftoolsパッケージのpdf_render_page関数を使うとraw型に変換することができる。これを例えばpngパッケージのwritePNG関数を使えば画像に変換することができる

> library(pdftools)
> filepath <- "https://www.aoni.co.jp/search/items/suzuki-minori.pdf"
> r <- pdf_render_page(filepath)
> library(png)
> ra <- pdf_render_page(filepath)
> library(png)
> writePNG(ra, "suzukiminori.png", dpi = 600)

R_pdftools_suzukiminori

2025年1月20日 (月)

[R]PDFファイルに含まれているフォントの情報を得る

pdftoolsパッケージのpdf_fonts関数を使う。以下は、芸能人「中居正広」の公式ウェブサイト「のんびりなかい」にある2025年1月9日報道発表の記事のPDFファイルから、文書のフォント情報を抜き出した例。

> library(pdftools)
> filepath <- "http://www.nonbirinakai.co.jp/wp/wp-content/uploads/2025/01/250109.pdf"
> lis <- pdf_fonts(filepath)
> lis |> as.data.frame()
name type embedded file
1 AAAAAA+HiraMinProN-W6 type3 TRUE
(以下、表示省略)

PDFファイルに含まれているフォントの情報はAcrobat Readerでも確認できる。PDFファイルをAcrobat Readerで開いた際に、左上「メニュー」→「文書のプロパティ」→タブ「フォント」で表示される内容がそれである。

2025年1月19日 (日)

[R]ドイツ語のウムラウトを使う

ドイツ語のウムラウト3文字とそのUTF-8による文字コード(16進数による表記)は以下のとおり。

ä c3a4
ö c3b6
ü c3bc

文字コードを使用してrawToChar関数とas.raw関数を組み合わせてウムラウトの文字列を作成し、それを使用すればよい。

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8"
> rawToChar(as.raw(c(0xc3, 0xa4)))
[1] "ä"
> rawToChar(as.raw(c(0xc3, 0xb6)))
[1] "ö"
> rawToChar(as.raw(c(0xc3, 0xbc)))
[1] "ü"
> s <- rawToChar(as.raw(c(0xc3, 0xa4)))
> cat(sprintf("%s の代用表記は ae です。\n", s))
ä の代用表記は ae です。

2025年1月17日 (金)

[R]作図の色指定で使える色を虹色のグラデーションで得る

rainbow関数を使う。引数に整数を指定するとその数だけ、赤→紫の方向にグラデーションで順番に色を返す。以下は引数に7を指定した例。戻り値は7色になる。

> par_mai_old <- par("mai")
> par(mai = c(0.1, 1.5, 0.1, 0.1))
> n <- 7
> s <- rainbow(n)
> print(s)
[1] "#FF0000" "#FFDB00" "#49FF00" "#00FF92" "#0092FF" "#4900FF" "#FF00DB"
> barplot(rep(1, n), names = s, col = s, horiz = TRUE, las = 1, xaxt = "n")
> par(mai = par_mai_old)

R_rainbow_barplot1

以下は14を指定した例。赤から始まり紫までグラデーションで色が戻る。

> par_mai_old <- par("mai")
> par(mai = c(0.1, 1.5, 0.1, 0.1))
> n <- 14
> s <- rainbow(n)
> print(s)
[1] "#FF0000" "#FF6D00" "#FFDB00" "#B6FF00" "#49FF00" "#00FF24" "#00FF92"
[8] "#00FFFF" "#0092FF" "#0024FF" "#4900FF" "#B600FF" "#FF00DB" "#FF006D"
> barplot(rep(1, n), names = s, col = s, horiz = TRUE, las = 1, xaxt = "n")
> par(mai = par_mai_old)

R_rainbow_barplot2

2025年1月16日 (木)

[R]日付のタイムゾーンを得る

lubridateパッケージのtz関数を使う。

> library(lubridate)
> da <- ymd("2012-03-04", tz = "Asia/Tokyo")
> print(da)
[1] "2012-03-04 JST"
> tz(da)
[1] "Asia/Tokyo"
> da <- ymd("2012-03-04", tz = "US/Pacific")
> print(da)
[1] "2012-03-04 PST"
> tz(da)
[1] "US/Pacific"

以下の例のとおり、Rの動作環境から得られる日付時刻はタイムゾーンの情報を持たないことに注意。持たないイコールUTCになる。

> Sys.timezone()
[1] "Asia/Tokyo"
> da <- Sys.Date()
> print(da)
[1] "2024-11-23"
> tz(da)
[1] "UTC"
> dttm <- Sys.time()
> print(dttm)
[1] "2024-11-23 23:48:33 JST"
> tz(dttm)
[1] ""

2025年1月15日 (水)

[R]PDFファイルの文書のプロパティを得る

pdftoolsパッケージのpdf_info関数を使う。以下は、芸能人「中居正広」の公式ウェブサイト「のんびりなかい」にある2025年1月9日報道発表の記事のPDFファイルから、文書のプロパティを読み込んだ例。

> library(pdftools)
> filepath <- "http://www.nonbirinakai.co.jp/wp/wp-content/uploads/2025/01/250109.pdf"
> lis <- pdf_info(filepath)
> names(lis)
[1] "version" "pages" "encrypted" "linearized" "keys" "created" "modified" "metadata"
[9] "locked" "attachments" "layout"
> lis$version
[1] "1.4"
> lis$pages
[1] 1

PDFのバージョンは1.4で全1ページのPDFであることがわかる。

PDFファイルの文書のプロパティとは、PDFファイルをAcrobat Readerで開いた際に、左上「メニュー」→「文書のプロパティ」により表示されるファイルの内部情報のこと。エクスプローラー上の右クリックのコンテキストメニューで表示できるプロパティとは異なることに注意。

2025年1月13日 (月)

[R]PDFファイルからテキストを抜き出す

pdftoolsパッケージのpdf_text関数を使う。以下は、芸能人「中居正広」の公式ウェブサイト「のんびりなかい」にある2025年1月9日報道発表の記事のPDFファイルから、文書のテキストを抜き出した例。

> library(pdftools)
> filepath <- "http://www.nonbirinakai.co.jp/wp/wp-content/uploads/2025/01/250109.pdf"
> lns <- pdf_text(filepath)
> length(lns)
[1] 1
> s <- unlist(strsplit(trimws(lns), "\\s+"))
> length(s)
[1] 34
> head(s)
[1] "‭お詫び‬"
[2] "‭‬"
[3] "‭"
[4] "の度は、皆様にご迷惑をお掛けしていること、大変申し訳なく思っております。‬"
[5] "こ"
[6] "‭報道内容においては、事実と異なるものもあり、相手さま、関係各所の皆さまに対しては‬"

4~5を見てのとおり、PDFファイルの構造上、テキストを表示された文章のようにきれいに抜き出すことは難しいことに注意。

2025年1月10日 (金)

[R]数値や文字列を画面表示する

print関数かcat関数を使う。Rの対話型実行環境では、実行した結果は画面出力に送られる。その画面出力がprint関数に相当する。そのため、ひとまとまりの出力は最後は改行されるが、一方で、cat関数は引数に与えられたものをそのまま画面出力に送るため、エスケープシーケンスなどで明示的に改行をしないと改行されないことに注意。以下の例の最後から2行目は改行を誤っているのではなく、改行されずにプロンプトが表示されたということ。

> print(58)
[1] 58
> print("和多田美咲とメイショウドトウ")
[1] "和多田美咲とメイショウドトウ"
> 58
[1] 58
> "和多田美咲とメイショウドトウ"
[1] "和多田美咲とメイショウドトウ"
> cat(58)
58> cat("和多田美咲とメイショウドトウ")
和多田美咲とメイショウドトウ> cat("和多田美咲とメイショウドトウ\n")
和多田美咲とメイショウドトウ

2025年1月 9日 (木)

[R]行政機関の営業日数を求める

行政機関の休日は、土日祝日と12/31~1/3。これを指定の年度の日付型ベクトルから取り除けばよい。以下は2024年度(2024-04-01/2025-03-31)の行政機関の営業日数を調べた例。土日と年末年始はweekdays関数を使えば機械的に取り除ける。祝日の判定には、内閣府のウェブサイトで公開されている祝日をCSV形式で納めたファイルを利用している。2024年11月現在、昭和30年(1955年)~令和7年(2025年)の祝日が納められている。

> # 下準備
> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> loc <- locale(encoding = "Shift_JIS")
> s <- "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
> hday <- read_csv(s, locale = loc)
> colnames(hday) <- c("date", "name")
> hday$date <- as.Date(hday$date)
> # 営業日数を計算する年度を西暦で指定
> nendo <- 2024
> # 営業日数の計算開始
> dt1 <- as.Date(ISOdate(nendo, 4, 1))
> dt2 <- as.Date(ISOdate(nendo + 1, 3, 31))
> # まずは年度のすべてを日(365or366日)を作成
> bday <- tibble(date = seq(dt1, dt2, by = "day"))
> # 当該年度のすべての日に曜日情報を追加
> bday <- bday |> mutate(wday = weekdays(date, abbreviate = TRUE))
> # すべての日から土日を取り除く
> bday <- bday |> filter(!str_detect(wday, "土|日"))
> # (すべての日)-(土日)-(祝日)
> bday <- bday |> anti_join(hday, by = join_by(date == date))
> # 最後に年末年始の6日間を取り除く(土日祝日削除で既に無い可能性有り)
> dth1 <- as.Date(ISOdate(nendo, 12, 29))
> dth2 <- as.Date(ISOdate(nendo + 1, 1, 3))
> bday <- bday |> filter(date < dth1 | date > dth2)
> # 結果を出力
> cat(sprintf("%d年度の営業日数は %d 日\n", nendo, nrow(bday)))
2024年度の営業日数は 243 日

2025年1月 8日 (水)

[R]祝日を一覧形式で得る

内閣府のウェブサイトの以下のページでは、昭和30年(1955年)~令和7年(2025年)の祝日をCSV形式のファイルで公開している(2024年11月現在)。これを利用する。

https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html

以下はそのCSVファイルを利用して、令和6年度(2024-04-01/2025-03-31)の祝日を抜き出した例。

> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> s <- "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
> loc <- locale(encoding = "Shift_JIS")
> hday <- read_csv(s, locale = loc)
> colnames(hday) <- c("date", "name")
> tib <- hday |> filter(date >= as.Date("2024-04-01") & date <= as.Date("2025-03-31"))
> tib |> as.data.frame()
date name
1 2024/4/29 昭和の日
2 2024/5/3 憲法記念日
3 2024/5/4 みどりの日
4 2024/5/5 こどもの日
5 2024/5/6 休日
6 2024/7/15 海の日
7 2024/8/11 山の日
8 2024/8/12 休日
9 2024/9/16 敬老の日
10 2024/9/22 秋分の日
11 2024/9/23 休日
12 2024/10/14 スポーツの日
13 2024/11/3 文化の日
14 2024/11/4 休日
15 2024/11/23 勤労感謝の日
16 2025/1/1 元日
17 2025/1/13 成人の日
18 2025/2/11 建国記念の日
19 2025/2/23 天皇誕生日
20 2025/2/24 休日
21 2025/3/20 春分の日

2025年1月 7日 (火)

[R]作図の色指定で使える色名を画面表示する

colors関数とbarplot関数を組み合わせると、作図機能を使って簡単に一覧表示することができる。以下は、1~20番目の色名とその色を図示したもの。


> par_mai_old <- par("mai")
> par(mai = c(0.1, 1.5, 0.1, 0.1))
> n <- 1:20
> s <- colors()[n]
> barplot(rep(1, length(n)), names = s, col = s, horiz = TRUE, las = 1, xaxt = "n")
> par(mai = par_mai_old)

R_colors

2025年1月 5日 (日)

[R]作図の色指定で使える色名を調べる

colors関数かcolours関数を使う。この関数は中身は同じで、色指定で使える色名を文字列型ベクトルで返す。

> colors()
[1] "white" "aliceblue" "antiquewhite"
[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
[7] "antiquewhite4" "aquamarine" "aquamarine1"
(以下省略)
> length(colors())
[1] 657
> colors()[1:3]
[1] "white" "aliceblue" "antiquewhite"

2025年1月 4日 (土)

[R]パイプを使う

Rのコマンドラインでは、いわゆるパイプはバージョン4.0.5までは標準で搭載されておらず、magrittrパッケージを導入すれば%>%演算子でパイプを実現することができた。この次のバージョン(4.1.0)からはパイプの機能が標準搭載され、|>演算子を使うことでパイプを実現することができる。

> R.Version()$version.string
[1] "R version 4.0.5 (2021-03-31)"
> s <- c("鈴木みのり", "野口瑠璃子", "和多田美咲")
> s |> sort()
エラー: 予想外の '>' です in "s |>"
> library(magrittr)
> s %>% sort()
[1] "野口瑠璃子" "鈴木みのり" "和多田美咲"

バージョン4.1.0では以下のとおり。

> R.Version()$version.string
[1] "R version 4.1.0 (2021-05-18)"
> s <- c("鈴木みのり", "野口瑠璃子", "和多田美咲")
> s |> sort()
[1] "野口瑠璃子" "鈴木みのり" "和多田美咲"

2025年1月 2日 (木)

[R]Windows版RでShift_JISを使う

Windows版は、バージョン4.1.3まではデフォルトで扱う日本語の文字コードはShift_JISだったが、次の4.2.0からはUTF-8になった。これをShift_JISにする場合はSys.setlocale関数に「Japanese_Japan.932」を指定して実行すればよい。漢字「石」はUTF-8による文字コードは0xe79fb3、Shift_JISは0x90ceであるので、文字コードが切り替わったことがわかる。

> R.Version()$platform
[1] "x86_64-w64-mingw32"
> R.Version()$version.string
[1] "R version 4.4.1 (2024-06-14 ucrt)"
> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8"
> localeToCharset()
[1] "UTF-8"
> ra <- charToRaw("石見舞菜香")
> print(ra)
[1] e7 9f b3 e8 a6 8b e8 88 9e e8 8f 9c e9 a6 99
> Sys.setlocale(locale = "Japanese_Japan.932")
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
警告メッセージ:
Sys.setlocale(locale = "Japanese_Japan.932") で:
using locale code page other than 65001 ("UTF-8") may cause problems
> localeToCharset()
[1] "CP932"
> ra <- charToRaw("石見舞菜香")
> print(ra)
[1] 90 ce 8c a9 95 91 8d d8 8d 81

2025年1月 1日 (水)

[R]乱数の発生を再現する

runif関数などの乱数を発生させる関数を実行する前に、set.seed関数に任意の整数を与えて実行することで、同じ乱数を発生させることができるようになる。

以下の例のとおり、set.seed関数に3を与えて実行した後は、まったく同じ乱数が得られていることがわかる。

> runif(4)
[1] 0.41928296 0.26762217 0.04780944 0.10349305
> runif(4)
[1] 0.3140315 0.8006411 0.2293247 0.2129984
> set.seed(3)
> runif(4)
[1] 0.1680415 0.8075164 0.3849424 0.3277343
> runif(4)
[1] 0.6021007 0.6043941 0.1246334 0.2946009
> set.seed(4)
> runif(4)
[1] 0.585800305 0.008945796 0.293739612 0.277374958
> runif(4)
[1] 0.8135742 0.2604278 0.7244059 0.9060922
> set.seed(3)
> runif(4)
[1] 0.1680415 0.8075164 0.3849424 0.3277343
> runif(4)
[1] 0.6021007 0.6043941 0.1246334 0.2946009

« 2024年12月 | トップページ | 2025年2月 »

無料ブログはココログ

■■

■■■