R(その他)

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月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月 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 春分の日

2024年11月 6日 (水)

[R]MLBの通算安打数の20位までを調べる

Lahmanデータベースを使うと簡単に調べることができる。

> library(Lahman)
> library(tidyverse)
> Batting %>% group_by(playerID) %>% summarize(H = sum(H)) %>%
+ left_join(People, by = "playerID") %>%
+ select(nameFirst, nameLast, H) %>% arrange(desc(H)) %>%
+ as.data.frame() %>% head(20)
nameFirst nameLast H
1 Pete Rose 4256
2 Ty Cobb 4189
3 Hank Aaron 3771
4 Stan Musial 3630
5 Tris Speaker 3514
6 Derek Jeter 3465
7 Cap Anson 3435
8 Honus Wagner 3420
9 Carl Yastrzemski 3419
10 Albert Pujols 3384
11 Paul Molitor 3319
12 Eddie Collins 3315
13 Willie Mays 3283
14 Eddie Murray 3255
15 Nap Lajoie 3243
16 Cal Ripken 3184
17 Adrian Beltre 3166
18 George Brett 3154
19 Paul Waner 3152
20 Robin Yount 3142

通算安打数の一位はピート・ローズの4256本、二位はタイ・カッブの4189本、三位はハンク・アーロンの3771本であることがわかる。参考までに、イチローは以下のとおり3089本。

> Batting %>% group_by(playerID) %>% summarize(H = sum(H)) %>%
+ left_join(People, by = "playerID") %>%
+ select(nameFirst, nameLast, H) %>% filter(nameFirst == "Ichiro") %>%
+ as.data.frame()
nameFirst nameLast H
1 Ichiro Suzuki 3089

2024年10月23日 (水)

[R]MLBの通算盗塁数の20位までを調べる

Lahmanデータベースを使うと簡単に調べることができる。

> library(Lahman)
> library(tidyverse)
> Batting %>% group_by(playerID) %>% summarize(SB = sum(SB)) %>%
+ left_join(People, by = "playerID") %>%
+ select(nameFirst, nameLast, SB) %>% arrange(desc(SB)) %>%
+ as.data.frame() %>% head(20)
nameFirst nameLast SB
1 Rickey Henderson 1406
2 Lou Brock 938
3 Billy Hamilton 914
4 Ty Cobb 896
5 Tim Raines 808
6 Vince Coleman 752
7 Eddie Collins 741
8 Max Carey 738
9 Honus Wagner 723
10 Joe Morgan 689
11 Willie Wilson 668
12 Bert Campaneris 649
13 Kenny Lofton 622
14 Otis Nixon 620
15 George Davis 619
16 Juan Pierre 614
17 Billy Hoy 596
18 Maury Wills 586
19 George Van Haltren 583
20 Ozzie Smith 580

通算盗塁数の一位はリッキー・ヘンダーソンの1406個、二位はルー・ブロックの938個、三位はビリー・ハミルトンの914個であることがわかる。

2024年10月16日 (水)

[R]MLBの通算本塁打数の20位までを調べる

Lahmanデータベースを使うと簡単に調べることができる。

> library(Lahman)
> library(tidyverse)
> Batting %>% group_by(playerID) %>% summarize(HR = sum(HR)) %>%
+ left_join(People, by = "playerID") %>%
+ select(nameFirst, nameLast, HR) %>% arrange(desc(HR)) %>%
+ as.data.frame() %>% head(20)
nameFirst nameLast HR
1 Barry Bonds 762
2 Hank Aaron 755
3 Babe Ruth 714
4 Albert Pujols 703
5 Alex Rodriguez 696
6 Willie Mays 660
7 Ken Griffey 630
8 Jim Thome 612
9 Sammy Sosa 609
10 Frank Robinson 586
11 Mark McGwire 583
12 Harmon Killebrew 573
13 Rafael Palmeiro 569
14 Reggie Jackson 563
15 Manny Ramirez 555
16 Mike Schmidt 548
17 David Ortiz 541
18 Mickey Mantle 536
19 Jimmie Foxx 534
20 Willie McCovey 521

通算本塁打数の一位はバリー・ボンズの762本、二位はハンク・アーロンの755本、三位はベーブ・ルースの714本であることがわかる。

2024年5月29日 (水)

[R]Lahmanパッケージを使う

Lahmanパッケージとは、Sean Lahman氏による1871年からのMLBのデータのデータベース。このパッケージをインストールすることで、いろいろな情報を簡単に扱うことができる。

> options(repos = "https://ftp.yz.yamagata-u.ac.jp/pub/cran/")
> install.packages("Lahman")

これに含まれるデータフレームPeopleには、選手別の簡単な情報が格納されている。イチロー、松井秀喜、大谷翔平に関する情報の一部を表示してみる。

> library(Lahman)
> nrow(People)
[1] 20676
> col <- c("playerID", "birthCountry", "nameFirst", "nameLast", "debut")
> subset(People, nameFirst == "Ichiro")[, col]
playerID birthCountry nameFirst nameLast debut
18191 suzukic01 Japan Ichiro Suzuki 2001-04-02
> subset(People, nameFirst == "Hideki" & nameLast == "Matsui")[, col]
playerID birthCountry nameFirst nameLast debut
11741 matsuhi01 Japan Hideki Matsui 2003-03-31
> subset(People, nameFirst == "Shohei")[, col]
playerID birthCountry nameFirst nameLast debut
13806 ohtansh01 Japan Shohei Ohtani 2018-03-29

上記のとおり、Peopleにはデータベースで扱っている全選手(約2万人)の情報が格納されており、選手のIDとしてplayerIDという文字列が用意されている。

2024年1月26日 (金)

[R]ベクトルやデータフレームをファイルに保存し、後で読み込んで再利用する

saveRDS関数を使うことで、オブジェクト(ベクトルやデータフレームなど)をファイルに保存することができる。このファイルに保存した内容は、後(Rの再起動後も可)でreadRDS関数を使ってその環境に読み込み再利用することができる。save関数と異なり、一つのオブジェクトしか保存することができず、readRDS関数で読み込む際は、その読み込み先のオブジェクトを指定する必要がある。

> rm(list = ls(all.names = TRUE))
> ls()
character(0)
> no <- c(30, 58, 64)
> name <- c("ライスシャワー", "メイショウドトウ", "メジロパーマー")
> seiyu <- c("石見舞菜香", "和多田美咲", "のぐちゆり")
> meibo <- data.frame(no, name, seiyu)
> print(meibo)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
> saveRDS(meibo, file = "meibo.rds")
> rm(list = ls(all.names = TRUE))
> ls()
character(0)
> readRDS(file = "meibo.rds")
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり
> ls()
character(0)
> dtf <- readRDS(file = "meibo.rds")
> ls()
[1] "dtf"
> print(dtf)
no name seiyu
1 30 ライスシャワー 石見舞菜香
2 58 メイショウドトウ 和多田美咲
3 64 メジロパーマー のぐちゆり

saveRDS関数はデフォルトではファイルをgzip圧縮をする。ファイルサイズは小さくなるが、その分、保存時も読み込み時も時間がかかることに注意。

より以前の記事一覧

無料ブログはココログ

■■

■■■