{tabulizer}でThe R session had a fatal errorを繰り返した話。
20200827追記:pdftoolsパッケージのメモ
はじめに
{tabulizer}
でThe R session had a fatal errorを繰り返した話。
library(tabulizer) ↓ The R session had a fatal erro...
{tabulizer}
{tabulizer}
というPDFを読み込みパッケージがある。PDFなんかはデータソースとしては避けたいが、そうは行かない。データが上手く転記出来ないし、やりたくないし、手作業とか件数が多いと、もう最悪であるが、この{tabulizer}
が助けてくれる。
しかし、{tabulizer}
でThe R session had a fatal errorを繰り返した。つまり、パッケージを読み込むと、落ちる。そこで、下記のページの通り、色々やってみたが上手くいかなかった。
Githubを見るとわかるが、javaが関係している。{h2o}
のときも同様であるが、個人的にjavaが絡んでコケると、バージョンが関係していることが多い。ということで、javaのバージョンを調べたら、java11にパスが通っていたので、java8に切り替えたら上手く行った。ということで、rm -Rf
コマンドでjava11を削除した。削除後のjavaのバージョンは下記の通り。
$ java -version openjdk version "1.8.0_212" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_212-b03) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.212-b03, mixed mode)
使い方
詳しくは下記のサイトも参考にしてください。
- 「2016年版このRパッケージがすごい」暫定第一位、tabulizerパッケージを使って、日本で話題のCookpadの有価証券PDFから超簡単にデータを取得してビジュアライズまでしてみた
- ropensci/tabulizer
- tabulizer tutorial
PDFは帝国データバンクのPDF。
- Source | 飲食店の倒産動向調査(2019年)
library(tabulizer) path <- "path to pdf" # pdfの座標を調べる # locate_areas(file = path, widget = "shiny") # [[1]] # top left bottom right # 224.6174 71.5583 423.8356 547.7301 # extract_tables()でも上手くテーブルがひけるなら… # data <- extract_tables(file = path, output = "data.frame") data <- extract_tables(file = path, area = list(c(224, 71, 423, 547)), output = "data.frame") # クラスがリストで返ってくるので、リストのデータフレームが格納されているとこをとる。 data[[1]] 業態.年 X2000 X2001 X2002 X2003 X2004 X2005 X2006 X2007 X2008 X2009 X2010 X2011 X2012 X2013 X2014 X2015 X2016 X2017 X2018 X2019 年換算 1 した場合 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2 酒場・ビヤホール 18 21 32 63 60 58 71 113 97 113 126 125 141 121 126 122 97 133 129 143 156 3 西洋料理店 18 18 23 33 32 44 37 42 68 53 71 58 66 66 61 60 61 86 92 110 120 4 中華・東洋料理店 17 30 33 51 69 40 49 77 83 73 88 97 102 99 84 91 92 104 97 96 104 5 喫茶店 14 14 16 35 28 31 38 57 56 54 52 66 48 35 58 43 50 66 66 60 65 6 一般食堂 19 24 36 34 34 32 51 64 71 88 51 90 85 67 79 50 61 78 45 59 64 7 その他の一般飲食店 14 15 18 19 30 36 41 42 43 56 45 44 53 59 56 52 44 46 48 57 62 8 バー・キャバレーなど 6 17 24 36 48 37 56 70 99 80 75 70 55 52 51 49 45 72 62 57 62 9 日本料理店 12 14 24 43 53 25 34 55 52 72 67 63 72 69 63 51 52 74 65 46 50 10 すし店 17 16 26 35 36 31 33 37 34 30 22 38 30 37 25 25 26 24 25 18 19 11 そば・うどん店 3 7 10 9 13 7 22 24 23 17 14 24 24 17 18 21 22 16 18 15 16 12 料亭 9 7 12 11 13 12 11 12 8 10 12 13 9 9 8 9 7 8 6 7 7 13 合計 147 183 254 369 416 353 443 593 634 646 623 688 685 631 629 573 557 707 653 668 728
以上です。
R version 3.6.1 tabulizer version 0.2.2 $ java -version openjdk version "1.8.0_212" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_212-b03) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.212-b03, mixed mode)
pdftoolsパッケージのメモ
こんなPDFのデータを読み込みたい。
pdftoolsパッケージでゴリゴリやれば行けなくもない。
library(pdftools) col_nm <- c("商品名","重量","エネルギー","たんぱく質","脂質","炭水化物","ナトリウム","カリウム", "カルシウム","リン","鉄","ビタミンA","ビタミンB1","ビタミンB2","ナイアシン", "ビタミンC","ビタミンD","ビタミンE","コレステロール","食物繊維","食塩相当量") pdftools::pdf_text(pdf = "~/Desktop/nutrition.pdf")[1] %>% stringr::str_split(., pattern = "\n") %>% tibble::as_tibble(., .name_repair = make.names) %>% dplyr::slice(., 12:48) %>% dplyr::mutate(X = str_replace_all(X, pattern = "\\s+", replacement = " ")) %>% tidyr::separate(., col = X, into = c(paste0("X", 1:21)), sep = " ") %>% purrr::set_names(., nm = col_nm) %>% dplyr::mutate_at(., .vars = col_nm[-1], .funs = as.numeric) %>% print(n = 50) # A tibble: 37 x 21 商品名 重量 エネルギー たんぱく質 脂質 炭水化物 ナトリウム カリウム カルシウム リン 鉄 ビタミンA ビタミンB1 <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 海老天七味… 195. 429 12.3 19.8 50.2 1174 243 42 117 0.8 41 0.08 2 モスバーガ… 209. 366 15.6 15.6 40.9 888 330 32 156 1.2 30 0.1 3 テリヤキバ… 168. 377 14.7 16.8 41.7 1023 255 29 144 1.1 19 0.09 4 テリヤキチ… 149 307 20.1 10.5 32.8 845 286 19 164 0.7 31 0.09 5 モスチーズ… 224. 419 18.6 20 41.3 1077 340 116 297 1.2 74 0.11 6 モス野菜バ… 190. 351 14.4 16.3 36.9 683 355 32 154 1.3 36 0.11 7 海老カツバ… 158. 390 11.7 18.2 45.3 769 116 56 223 0.6 7 0.06 8 ロースカツ… 174. 412 17.9 16.4 48.7 866 301 34 187 0.9 9 0.59 9 フィッシュ… 144 390 16.7 18.9 38.6 814 235 103 275 0.5 49 0.07 10 チキンバー… 152 382 15.4 17.4 41 649 269 24 106 0.7 5 0.13 11 ハンバーガ… 126. 308 14 11.9 36.2 669 259 26 140 1.1 14 0.08 12 チーズバー… 141. 361 17 16.3 36.6 858 269 110 281 1.1 58 0.09 13 ダブルモス… 272. 516 24.4 25.4 47.2 1292 482 43 249 1.9 40 0.14 14 ダブルモス… 287. 569 27.4 29.8 47.6 1481 492 127 390 1.9 84 0.15 15 ダブルテリ… 233. 539 23.6 26.2 52 1551 404 40 236 1.8 29 0.13 16 ダブルモス… 243. 489 22.8 25.7 41.8 1006 502 42 246 2.1 45 0.14 17 ダブルハン… 179. 446 22.4 21.3 41.1 992 406 36 232 1.9 23 0.11 18 ダブルチー… 194. 499 25.4 25.7 41.5 1181 416 120 373 1.9 67 0.12 19 スパイシー… 217. 367 15.6 15.6 41.1 956 361 33 159 1.3 56 0.11 20 スパイシー… 232. 420 18.6 20 41.5 1145 371 117 300 1.3 100 0.12 21 スパイシー… 280. 517 24.4 25.4 47.4 1359 513 43 252 2.1 65 0.14 22 スパイシー… 295. 570 27.4 29.8 47.8 1548 523 127 393 2.1 109 0.15 23 モスの菜摘… 188. 207 9.4 14 11.5 483 411 31 125 1.1 46 0.11 24 モスの菜摘… 140 186 15.1 10.7 7.7 749 313 17 134 0.6 40 0.08 25 モスの菜摘… 130. 244 11.6 16.4 12.7 589 269 100 243 0.3 57 0.06 26 モスの菜摘… 145 244 6.6 15.7 19.4 544 150 53 191 0.4 15 0.05 27 モスの菜摘… 151 264 12.7 13.8 22.2 640 315 27 152 0.7 17 0.580 28 モスの菜摘… 139 236 10.3 15 15.2 432 304 21 74 0.5 13 0.12 29 モスの菜摘… 187. 186 6.8 11.5 14.5 465 264 44 66 0.9 36 0.1 30 ソイモスバ… 208. 345 13 13.1 43.9 870 183 45 97 1 20 0.09 31 ソイモスチ… 223. 398 16 17.5 44.3 1059 193 129 238 1 64 0.1 32 ソイスパイ… 216. 346 13 13.1 44.1 938 214 46 100 1.1 46 0.1 33 ソイスパイ… 231. 399 16 17.5 44.5 1127 224 130 241 1.1 90 0.11 34 ソイテリヤ… 167. 356 12.1 14.3 44.7 1005 108 42 85 0.9 9 0.08 35 ソイモス野… 189. 330 11.8 13.8 39.9 665 208 45 95 1.1 26 0.1 36 ソイハンバ… 125. 287 11.4 9.4 39.2 651 112 39 81 0.9 4 0.07 37 ソイチーズ… 140. 340 14.4 13.8 39.6 840 122 123 222 0.9 48 0.08 # … with 8 more variables: ビタミンB2 <dbl>, ナイアシン <dbl>, ビタミンC <dbl>, ビタミンD <dbl>, ビタミンE <dbl>, # コレステロール <dbl>, 食物繊維 <dbl>, 食塩相当量 <dbl>