Analizza JSON con R


90

Sono abbastanza nuovo per R, ma più lo uso, più vedo quanto sia potente su SAS o SPSS. Solo uno dei principali vantaggi, per come li vedo io, è la capacità di ottenere e analizzare i dati dal web. Immagino che ciò sia possibile (e forse anche semplice), ma sto cercando di analizzare i dati JSON che sono disponibili pubblicamente sul Web. Non sono affatto un programmatore, quindi qualsiasi aiuto e istruzione che puoi fornire sarà molto apprezzato. Anche se mi indichi un esempio di lavoro di base, probabilmente posso elaborarlo.

Risposte:


89

RJSONIO di Omegahat è un altro pacchetto che fornisce servizi per la lettura e la scrittura di dati in formato JSON.

rjson non utilizza i metodi S4 / S3 e quindi non è facilmente estendibile, ma comunque utile. Sfortunatamente, non utilizza operazioni vettorializzate ed è quindi troppo lento per dati non banali. Allo stesso modo, per leggere i dati JSON in R, è un po 'lento e quindi non si ridimensiona a dati di grandi dimensioni, se questo fosse un problema.

Aggiornamento (nuovo pacchetto 2013-12-03):

jsonlite : questo pacchetto è un fork del RJSONIOpacchetto. Si basa sul parser da RJSONIOma implementa una mappatura diversa tra gli oggetti R e le stringhe JSON. Il codice C in questo pacchetto proviene principalmente dal RJSONIOpacchetto, il codice R è stato riscritto da zero. Oltre alle sostituzioni immediate per fromJSONe toJSON, il pacchetto dispone di funzioni per serializzare gli oggetti. Inoltre, il pacchetto contiene molti test unitari per assicurarsi che tutti i casi limite siano codificati e decodificati in modo coerente per l'uso con dati dinamici in sistemi e applicazioni.


3
Ho trovato utile questo confronto tra rjson, RJSONIO e jsonlite
Eric,

2
Il link di confronto sopra è morto. È questo il collegamento corretto? (la differenza è https)
woodvi

58

Il pacchetto jsonlite è facile da usare e cerca di convertire json in frame di dati.

Esempio:

library(jsonlite)

# url with some information about project in Andalussia
url <- 'http://www.juntadeandalucia.es/export/drupaljda/ayudas.json'

# read url and convert to data.frame
document <- fromJSON(txt=url)

1
Questo è stato incredibilmente facile da usare per ciò di cui avevo bisogno. Grazie mille
Unknown Coder

documento <- fromJSON (file = url); #ma la richiesta
scade

1
Ama questo. Sembra molto meglio del disordine creato da rjson.
randominstanceOfLivingThing

1
A meno che il formato json originale non sia già appiattito, jsonliteè più o meno utile come una forchetta per mangiare la zuppa.
gented

19

Ecco l'esempio mancante

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')

2
questo ha funzionato per me, ma non vuoi passare una stringa per il nome della variabile del file come mostrato.
mrjrdnthms

4

La funzione fromJSON () in RJSONIO, rjson e jsonlite non restituisce un semplice data.frame 2D per oggetti json nidificati complessi.

Per ovviare a questo puoi usare tidyjson . Accetta un json e restituisce sempre un data.frame. Al momento non è disponibile in CRAN, puoi scaricarlo qui: https://github.com/sailthru/tidyjson

Aggiornamento: tidyjson è ora disponibile in cran, puoi installarlo direttamente usandoinstall.packages("tidyjson")


2

Per la cronaca, rjson e RJSONIO cambiano il tipo di file, ma in realtà non analizzano di per sé. Ad esempio, ricevo brutti dati MongoDB in formato JSON, li converto con rjson o RJSONIO, quindi uso unlist e tonnellate di correzione manuale per analizzarli effettivamente in una matrice utilizzabile.


1

Prova sotto il codice usando RJSONIO nella console

library(RJSONIO)
library(RCurl)


json_file = getURL("https://raw.githubusercontent.com/isrini/SI_IS607/master/books.json")

json_file2 = RJSONIO::fromJSON(json_file)

head(json_file2)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.