Düzenleme: bu soru güncel değil. jsonlite paketi otomatik olarak düzleşir.veri tabanına kayıt tabanlı liste/nesne basma
Genellikle JSON'da, kayıt tabanlı kodlamaya sahip çevrimiçi veri akışlarıyla uğraşıyorum. Nesnenin yapısı (yani JSON'daki isimler) API belgelerinden bilinmektedir, ancak değerler çoğunlukla isteğe bağlıdır ve her kayıtta mevcut değildir. Listeler yeni listeler içerebilir ve yapı bazen oldukça derindir. İşte bazı GPS verilerinin oldukça basit bir örneği: http://pastebin.com/raw.php?i=yz6z9t25. Alt satırlarda, hiçbir GPS sinyali olmadığından "l"
nesnesinin eksik olduğunu unutmayın.
Bu nesneleri bir veri çerçevesine yerleştirmenin zarif bir yolunu arıyorum. Şu anda böyle bir şey kullanıyorum:
library(RJSONIO)
library(plyr)
obj <- fromJSON("http://pastebin.com/raw.php?i=yz6z9t25", simplifyWithNames=FALSE, simplify=FALSE)
flatdata <- lapply(obj$data, as.data.frame);
mydf <- rbind.fill(flatdata)
Bu işi yapar, ancak yavaş ve biraz hata eğilimli. Bu yaklaşımdaki bir problem, verilerdeki yapı (nesne adları) hakkındaki bilgimi kullanmamamdır; bunun yerine verilerden anlaşılmaktadır. Bu, her kayıtta belirli bir özellik olmadığı zaman sorunlara yol açar. Bu durumda, NA değerlerine sahip bir sütun yerine, veri çerçevesinde hiç görünmez. Bu, aşağı yönde sorunlara yol açabilir. Örneğin, ben yeri damgası işlemek gerekir:
mydf$l.t <- structure(mydf$l.t/1000, class="POSIXct")
Ancak bu l$t
nesne yoktur olduğu bir veri kümesi halinde bir hata ile sonuçlanır. Ayrıca, as.data.frame
ve rbind.fill
her ikisi de işleri oldukça yavaşlatır. Örnek veri kümesi nispeten küçüktür. Daha iyi uygulama için herhangi bir öneriniz var mı? Sağlam bir çözüm, her zaman aynı sırayla aynı sütunlara sahip olan ve yalnızca satır sayısının değiştiği bir veri çerçevesine sahip olur.
Düzenleme: daha fazla meta veri içeren bir veri kümesinin altında. Boyutları daha büyüktür ve daha derinlemesine yuvalanır:
obj <- fromJSON("http://www.stat.ucla.edu/~jeroen/files/output.json", simplifyWithNames=FALSE, simplify=FALSE)
: Bir speedup çok fazla yol açmaz, ancak
Ayrıca 'gücün' belirli sütunlar sağlar: Hala bile bu hızlandırmak mümkün olmalıdır düşünüyorum python ;-) kullanarak deneyebilirsiniz ;-) – John
Peki python'da bunu nasıl yaparsınız? :-) – Jeroen