Rのこと。

記事は引っ越し作業中。2023年中までに引っ越しを完了させてブログは削除予定

{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)

使い方

詳しくは下記のサイトも参考にしてください。

PDFは帝国データバンクのPDF。

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のデータを読み込みたい。

f:id:AZUMINO:20200827023556p:plain

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>