У меня есть огромный XML-файл (> 100 МБ), который мне нужно преобразовать во фрейм данных и выполнить визуализацию данных.Я попробовал следующий код, чтобы получить узлы, дочерние элементы и имена столбцов, которые я хочу для моего конечного кадра данных:
# Sample XML Data
<feed base="https://someurl" xmlns:a="someurl" xmlns:d="someurl" xmlns="http://www.w3.org/2005/Atom">
<title type="text">Some Title</title>
<id>someurl...</id>
<author><name/></author>
<link rel="self" title="sometitle" href="somelink"/>
<entry>
<id>someurl</id>
<title type="text" />
<author><name/></author>
<link rel="self" title="title" href="someurl">
<category term="sometype" scheme="someurl">
<content type="application/xml">
<a:something>
<d:RAW_ID m:type="Edm.String">123456</d:RAW_ID>
<d:EMPLOYEE_ID m:type="Edm.Int">1234</d:EMPLOYEE_ID>
<d:IN_TIME m:type="Edm.String">2018-10-21 03:45:00.0000000</d:IN_TIME>
<d:OUT_TIME m:type="Edm.String">2018-10-21 03:46:00.0000000</d:OUT_TIME>
...
...
...
</a:something>
</content>
</entry>
<entry>
....data repeats...
</entry>
...
А вот мой код R:
library(httr)
library(xml2)
library(tidyverse)
# Get xml data
response <- GET("someURL", authenticate("username", "password")
# Read xml
doc <- read_xml(response)
# Get all the relevant nodes
recs <- xml_find_all(x, "//a:something")
child <- xml_children(recs)
recs and child looks like the following respectively:
recs
{xml_nodeset (1234)}
[1] <a:something>\n <d:RAW_ID m:type="Edm.String">123456</d:RAW_ID>\n <d:USER_ID m:type="Edm.I ...
[2] <a:something>\n <d:RAW_ID m:type="Edm.String">234567</d:RAW_ID>\n <d:USER_ID m:type="Edm.I ...
[3] <a:something>\n <d:RAW_ID m:type="Edm.String">345678</d:RAW_ID>\n <d:USER_ID m:type="Edm.I ...
[4] ...
[5] ...
{xml_nodeset (123456)}
[1] <d:RAW_ID m:type="Edm.String">123456</d:RAW_ID>
[2] <d:USER_ID m:type="Edm.Int32">1234</d:USER_ID>
[3] <d:IN_TIME m:type="Edm.String">2018-10-21 03:45:00.0000000</d:IN_TIME>
[4] <d:OUT_TIME m:type="Edm.String">2018-10-21 03:46:00.0000000</d:OUT_TIME>
[5] <d:DATE m:type="Edm.String">2018-10-21</d:DATE>
[6] ...
[7] ...
[8] ...
Однако,Я не уверен, как мне преобразовать xml_nodeset в фрейм данных.Может кто-нибудь, пожалуйста, скажите мне, как я могу получить окончательный фрейм данных, который выглядит следующим образом:
RAW_ID USER_ID IN_TIME OUT_TIME DATE ...
123456 1234 2018-10-21 03:45:00.0000000 03:46:00.0000000 2018-10-21
234567 2345 2018-10-21 04:46:00.0000000 04:46:00.0000000 2018-10-21
345678 4567 2018-10-21 05:47:00.0000000 04:46:00.0000000 2018-10-21
Кроме того, поскольку XML-файл огромен, есть ли лучший способ для меня ускорить GET-запрос, такойчто для запуска моего приложения Shiny требуется больше времени?Мне нужно выполнить очистку данных, а затем передать их в ggplot для визуализации.Однако нет смысла выполнять очистку данных каждый раз при запуске приложения Shiny.
Какие-либо советы / предложения о том, как я могу сделать этот процесс более эффективным?