gpt4 book ai didi

json - 转换 JSON 数据的性能问题

转载 作者:行者123 更新时间:2023-12-02 12:12:15 24 4
gpt4 key购买 nike

我有一些 JSON 格式的数据,我想对其进行一些可视化。数据(大约 10MB 的 JSON)加载速度非常快,但将其重新调整为可用的形式需要几分钟时间,只有不到 100,000 行。我有一些可行的东西,但我认为它可以做得更好。

从我的sample data开始可能是最容易理解的.

假设您在 /tmp 中运行以下命令:

curl http://public.west.spy.net/so/time-series.json.gz \
| gzip -dc - > time-series.json

您应该能够在这里看到我想要的输出(一段时间后):

require(rjson)

trades <- fromJSON(file="/tmp/time-series.json")$rows


data <- do.call(rbind,
lapply(trades,
function(row)
data.frame(date=strptime(unlist(row$key)[2], "%FT%X"),
price=unlist(row$value)[1],
volume=unlist(row$value)[2])))

someColors <- colorRampPalette(c("#000099", "blue", "orange", "red"),
space="Lab")
smoothScatter(data, colramp=someColors, xaxt="n")

days <- seq(min(data$date), max(data$date), by = 'month')
smoothScatter(data, colramp=someColors, xaxt="n")
axis(1, at=days,
     labels=strftime(days, "%F"),
     tick=FALSE)

最佳答案

使用 plyr 可以获得 40 倍的加速。这是代码和基准测试比较。一旦获得数据框,就可以完成迄今为止的转换,因此我已将其从代码中删除,以方便进行同类比较。我确信存在更快的解决方案。

f_ramnath = function(n) plyr::ldply(trades[1:n], unlist)[,-c(1, 2)]
f_dustin = function(n) do.call(rbind, lapply(trades[1:n],
function(row) data.frame(
date = unlist(row$key)[2],
price = unlist(row$value)[1],
volume = unlist(row$value)[2]))
)
f_mrflick = function(n) as.data.frame(do.call(rbind, lapply(trades[1:n],
function(x){
list(date=x$key[2], price=x$value[1], volume=x$value[2])})))

f_mbq = function(n) data.frame(
t(sapply(trades[1:n],'[[','key')),
t(sapply(trades[1:n],'[[','value')))

rbenchmark::benchmark(f_ramnath(100), f_dustin(100), f_mrflick(100), f_mbq(100),
replications = 50)

test elapsed relative
f_ramnath(100) 0.144 3.692308
f_dustin(100) 6.244 160.102564
f_mrflick(100) 0.039 1.000000
f_mbq(100) 0.074 1.897436

编辑。 MrFlick 的解决方案可将速度额外提高 3.5 倍。我已经更新了我的测试。

关于json - 转换 JSON 数据的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com