tabela <- as.data.frame(
tabulapdf::extract_areas(file = "D://R_scripts/Rpubs/olympic_womens.pdf",
pages = 1))Tabelas em PDF para o R
Como extrair informações de tabelas em arquivos em PDF para o R
Cenário
Quantas vezes você já precisou de dados que estavam alocados em uma tabela de um arquivo do tipo PDF? Provavelmente você já deve ter passado pela inconveniência de utilizar a selação do mouse, depois CTRL + C no documento em PDF e em seguida aplicou um CTRL + V em um documento de Excel ou Word e o resultado foi desastroso (com algumas exceções). Dado o fato que as formatações dos documentos de origem (PDF) são variadas, temos sempre um problema na hora em que o programa que irá receber o conteúdo tem que interpretar as informações tais como: largura de coluna, quebra de página, uso de caracteres especiais e etc. Especificamente se você deseja extrair dados de um PDF para que possa realizar algum tipo de operação tal como análise dos dados e apresentação gráfica dos mesmos, então esse tutorial é para você.
Obtendo um pdf na internet
Para efeito de exemplo, vá até a página https://worldathletics.org/competition/calendar-results?, clique Competition Group e selecione em seguida a opção Olympic Games.
Role a barra de rolagem para baixo e verá que estarão disponíveis informações das últimas Olimpíadas da era moderna. Clique em results na linha da Olimpíada do Rio de Janeiro (BRA).
A próxima janela terá opção Select discipline e ao clicar nela serão apresentadas todas as provas de ambos os sexos. Para efeito de exemplo e rapidez deste tutoria, clicque na primeira opção: “Women’s 100 Metres” (100m rasos para mulheres).
Tendo feito isso, todos os resultados desta prova (100m) serão exibidos iniciando pelos resultados da prova FINAL. Basta clicar com o botão direito do mouse e salvar a página como um documento PDF. Pronto! Todos os resultados serão salvos em um arquivo com extensão .pdf. Não esqueça onde salvou o arquivo para poder chegar até ele sem maiores dificuldades.
Finalmente vamos às tecnicalidades em R. Inicialmente instale o pacote tabulapdf e em seguinda use library(tabulapdf) para carregar o pacote.
Importar os dados do PDF para o ambiente R
Chamaremos o objeto (dataframe) de tabela.
A função que iremos utilizar será a função extract_areas(). Vamos passar dois argumentos básicos desta função. O argumento file = (com o local exato onde o arquivo se encontra) e o argumento pages = irá receber o número da página de onde queremos extrair as informações. Esse argumento é importante para que a função não o obrigue a vasculhar todas as páginas do documento em busca de todas as tabelas. A saída dessa função é sempre uma lista e como desejamos trabalhar com um dataframe, utilizaremos a função as.data.frame() para que tenhamos a saída em formato de dataframe em lugar de lista. Execute a função abaixo e veja o que acontecerá.
Se você fez exatamente o que foi solicitado até aqui, modificando apenas o argumento file = com suas informações de local e armazenamento do arquivo em pdf que foi salvo, então a função abriu uma tela de visualização do arquivo .pdf no Viewer do RStudio.
Repare que a execução não foi concluída (motivo pelo qual os ícones STOP continuam ativos tanto no Enviroment como no Console. A execução só será concluída quando você clicar no botão Done (destacado em verde). Mas espere! Não faça isso ainda. Primeiro você terá que selecionar á área da tabela usando o mouse. Ou seja, a área da página que contêm as informações que irão configurar a tabela. Clique com o botão esquerdo do mouse no canto superior da tabela, segure-o e o arraste até o canto inferior da tabela (conforme diz a mensagem na parte superior do Viewer. Caso a visualização esteja muito pequena, você pode pedir para visualizar a página em uma janela separada (isso permitirá um zoom na visualização) clicando no botão Show in new window (como mostra a seta destacada em preto).
Uma vez selecionada à área corretamente e clicado no botão Done então é hora de visualizar os dados que foram armazenados no objeto tabela. Se tudo ocorreu satisfatóriamente, então os ícones STOP sumiram e no Enviroment teremos um dataframe chamado tabela.
Lembre-se que se um arquivo pdf não foi originalmente salvo em pdf mas sim, transformado em pdf depois de outro tipo de digitalização prévia (scanner ou foto por exemplo), existe uma chance do pacote não conseguir executar bem suas tarefas em função do tipo de codificação do documento. É provável que a função extract_areas() não consiga reconhecer a existência de uma tabela mesmo depois da seleção com o mouse da área onde está sendo visualizada a tabela no documento. Se alguem tiver uma solução para isso. Não deixe de entrar em contato pelo gleidsonreboucas@uern.br para compartilhar sua solução.
print(tabela) PLACE NAME BIRTH.DATE NAT. MARK
1 1 Elaine THOMPSON 28 JUN 1992 JAM 10.71
2 2 Tori BOWIE 27 AUG 1990 USA 10.83
3 3 Shelly-Ann FRASER-PRYCE 27 DEC 1986 JAM 10.86
4 4 Marie-Josée TA LOU 18 NOV 1988 CIV 10.86
5 5 Dafne SCHIPPERS 15 JUN 1992 NED 10.90
6 6 Michelle-Lee AHYE 10 APR 1992 TTO 10.92
7 7 English GARDNER 22 APR 1992 USA 10.94
8 8 Christania WILLIAMS 17 OCT 1994 JAM 11.80
str(tabela)'data.frame': 8 obs. of 5 variables:
$ PLACE : int 1 2 3 4 5 6 7 8
$ NAME : chr "Elaine THOMPSON" "Tori BOWIE" "Shelly-Ann FRASER-PRYCE" "Marie-Josée TA LOU" ...
$ BIRTH.DATE: chr "28 JUN 1992" "27 AUG 1990" "27 DEC 1986" "18 NOV 1988" ...
$ NAT. : chr "JAM" "USA" "JAM" "CIV" ...
$ MARK : chr "10.71" "10.83" "10.86" "10.86" ...
Repare que quase todas as variáveis foram armazenadas como character (strings). Use funções de transformação para o tipo que desejar.
Por exemplo:
tabela$MARK <- as.numeric(tabela$MARK)
tabela$NAT. <- as.factor(tabela$NAT.)
str(tabela)'data.frame': 8 obs. of 5 variables:
$ PLACE : int 1 2 3 4 5 6 7 8
$ NAME : chr "Elaine THOMPSON" "Tori BOWIE" "Shelly-Ann FRASER-PRYCE" "Marie-Josée TA LOU" ...
$ BIRTH.DATE: chr "28 JUN 1992" "27 AUG 1990" "27 DEC 1986" "18 NOV 1988" ...
$ NAT. : Factor w/ 5 levels "CIV","JAM","NED",..: 2 5 2 1 3 4 5 2
$ MARK : num 10.7 10.8 10.9 10.9 10.9 ...
Agora deixe seus conhecimentos em R fluirem e utilize os dados para resolver suas questões. Irei finalizar apresentando um pouco da motivação que gerou este documento. Certo dia, um aluno me veio com a seguinte indagação: …Hei professor! Mulheres podem correr tão rápido quanto os homens?…. Em primeira mão eu respondi: …Caro aluno, um grande número de mulheres são capazes de correr tão ou mais rápido que muitos homens, isso é certo. Contudo, acredito que nenhuma mulher tenha conseguido alcançar as melhores marcas obtidas pelos homens até hoje, quer seja nas corridas ou outras provas do atletismo. Irei consultar as informações da Federação Internacional de Atletismo em busca de dados que possam apoiar ou não a minha fala e te darei mais detalhes… Assim, fui até lá (acessei o site que referenciei no início deste texto), salvei as informações em PDF e fiz a importação para o R. Depois disso foi fácil gerar a seguinte figura para apresentar os fatos registrados em algumas provas Olímpicas nas últimas 7 edições dos jogos.
Espero que este tutorial possa ajudar quando a tarefa implicar em importar dados contidos em uma tabela num arquivo em pdf para ser tratado em R. Boa sorte com suas análises.