Przeanalizuj JSON z R.


91

Jestem całkiem nowy w R, ale im częściej go używam, tym bardziej widzę, jak potężny jest naprawdę w porównaniu z SAS lub SPSS. Jedną z głównych zalet, jak je widzę, jest możliwość pobierania i analizowania danych z sieci. Wyobrażam sobie, że jest to możliwe (a może nawet proste), ale chcę przeanalizować dane JSON, które są publicznie dostępne w sieci. Nie jestem programistą w żadnym wypadku, więc każda pomoc i instrukcja, którą możesz udzielić, będą bardzo mile widziane. Nawet jeśli wskażesz mi podstawowy przykład roboczy, prawdopodobnie będę mógł przez to przejść.

Odpowiedzi:


91

RJSONIO firmy Omegahat to kolejny pakiet, który zapewnia możliwości odczytu i zapisu danych w formacie JSON.

rjson nie używa metod S4 / S3, więc nie jest łatwo rozszerzalny, ale nadal użyteczny. Niestety, nie używa on operacji wektoryzowanych, a więc jest zbyt wolny dla nietrywialnych danych. Podobnie w przypadku odczytu danych JSON do języka R jest to nieco powolne, a więc nie skaluje się do dużych danych, jeśli wystąpiłby problem.

Aktualizacja (nowy pakiet 2013-12-03):

jsonlite : ten pakiet jest rozwidleniem RJSONIOpakietu. Opiera się na parserze z, RJSONIOale implementuje inne mapowanie między obiektami R i ciągami JSON. Kod C w tym pakiecie pochodzi głównie z RJSONIOpakietu, kod R został przepisany od zera. Oprócz zastępczych zamienników dla fromJSONi toJSON, pakiet zawiera funkcje serializacji obiektów. Ponadto pakiet zawiera wiele testów jednostkowych, aby upewnić się, że wszystkie przypadki brzegowe są kodowane i dekodowane konsekwentnie do użytku z danymi dynamicznymi w systemach i aplikacjach.


3
Uważam, że to porównanie rjson, RJSONIO i jsonlite było pomocne
Eric

2
Powyższy link porównawczy jest martwy. Czy to jest poprawny link? (różnica to https)
woodvi

58

Jsonlite pakiet jest łatwy w obsłudze i próbuje przekonwertować json w ramkach danych.

Przykład:

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
Było to niezwykle łatwe w użyciu do tego, czego potrzebowałem. Dziękuję bardzo
Unknown Coder

dokument <- fromJSON (plik = url); # ale żądanie
wygasło

1
Kocham to. Wydaje się znacznie lepsze niż bałagan stworzony przez rjson.
randominstanceOfLivingThing

1
O ile oryginalny format json nie jest już spłaszczony, jsonlitejest mniej więcej tak przydatny jak widelec do jedzenia zupy.
gented

19

Oto brakujący przykład

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

2
to zadziałało dla mnie, ale nie chcesz przekazywać ciągu dla nazwy zmiennej pliku, jak pokazano.
mrjrdnthms,

4

Funkcja fromJSON () w RJSONIO, rjson i jsonlite nie zwraca prostej 2D data.frame dla złożonych zagnieżdżonych obiektów json.

Aby temu zaradzić, możesz użyć tidyjson . Pobiera json i zawsze zwraca data.frame. Obecnie nie jest dostępny w CRAN, możesz go pobrać tutaj: https://github.com/sailthru/tidyjson

Aktualizacja: tidyjson jest już dostępny w cran, możesz go zainstalować bezpośrednio za pomocąinstall.packages("tidyjson")


2

Dla przypomnienia, rjson i RJSONIO zmieniają typ pliku, ale tak naprawdę nie analizują per se. Na przykład otrzymuję brzydkie dane MongoDB w formacie JSON, konwertuję je za pomocą rjson lub RJSONIO, a następnie używam unlist i mnóstwa ręcznej korekty, aby faktycznie przeanalizować je w użyteczną macierz.


1

Wypróbuj poniższy kod używając RJSONIO w konsoli

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.