2017-12-02 2 views
0

Ich versuche, Daten aus einer JSON-Datei in R zu importieren, um mit der Verarbeitung natürlicher Sprache zu experimentieren. Die Daten wurden analysiert und aus einem Blog extrahiert, der in Markdown geschrieben wurde. Das Problem ist, dass der Import in R als Listen und ein lustiges Format importiert wird, und ich kann nicht herausfinden, wie man es in einen Datenrahmen bringt. Ist es ein Problem mit meiner JSON-Datei oder meinem Importprozess?Importieren von JSON-Dateidaten in R als Datenrahmen für NLP

Beispieldaten:

{ 
    "2017-11-17-blog-post-01": { 
    "title": "Blog Post 01", 
    "layout": "post", 
    "categories": [ 
     "Category1", 
     "Category2" 
    ], 
    "comments": true, 
    "published": true, 
    "permalink": "/blog-post-01.html", 
    "basename": "2017-11-17-blog-post-01" 
    }, 
    "2017-11-30-blog-post-02": { 
    "title": "Blog Post 2", 
    "layout": "post", 
    "categories": [ 
     "Category2", 
     "Category3" 
    ], 
    "comments": true, 
    "published": true, 
    "permalink": "/2017-11-30-blog-post-02.html", 
    "basename": "2017-11-30-blog-post-02" 
    } 
} 

Befehl:

library(jsonlite) 
import <- fromJSON("test-import.json", flatten=TRUE) 

Ergebnisse:

$`2017-11-17-blog-post-01` 
$`2017-11-17-blog-post-01`$title 
[1] "Blog Post 01" 

$`2017-11-17-blog-post-01`$layout 
[1] "post" 

$`2017-11-17-blog-post-01`$categories 
[1] "Category1" "Category2" 

$`2017-11-17-blog-post-01`$comments 
[1] TRUE 

$`2017-11-17-blog-post-01`$published 
[1] TRUE 

$`2017-11-17-blog-post-01`$permalink 
[1] "/blog-post-01.html" 

$`2017-11-17-blog-post-01`$basename 
[1] "2017-11-17-blog-post-01" 


$`2017-11-30-blog-post-02` 
$`2017-11-30-blog-post-02`$title 
[1] "Blog Post 2" 

$`2017-11-30-blog-post-02`$layout 
[1] "post" 

$`2017-11-30-blog-post-02`$categories 
[1] "Category2" "Category3" 

$`2017-11-30-blog-post-02`$comments 
[1] TRUE 

$`2017-11-30-blog-post-02`$published 
[1] TRUE 

$`2017-11-30-blog-post-02`$permalink 
[1] "/2017-11-30-blog-post-02.html" 

$`2017-11-30-blog-post-02`$basename 
[1] "2017-11-30-blog-post-02" 
+0

Das Ergebnis wird ‚als erwartet‘ gegeben das JSON-Format. Wenn Sie sagen, dass Sie ein 'dat.frame' möchten, wie soll das data.frame aussehen? – SymbolixAU

+0

Also, was ist das Problem mit dem JSON-Format? Ich denke, ich erwarte, dass der Datenrahmen mehrere "Spalten" ist, so dass ich ein paar Prozesse über die Daten ausführen kann, um Keywords herauszuziehen und einige NLP-Dinge auszuprobieren. Vielen Dank! – markwk

Antwort

1
library(purrr) 

Ihre Daten:

jsonlite::fromJSON('{ 
    "2017-11-17-blog-post-01": { 
    "title": "Blog Post 01", 
    "layout": "post", 
    "categories": [ 
     "Category1", 
     "Category2" 
    ], 
    "comments": true, 
    "published": true, 
    "permalink": "/blog-post-01.html", 
    "basename": "2017-11-17-blog-post-01" 
    }, 
    "2017-11-30-blog-post-02": { 
    "title": "Blog Post 2", 
    "layout": "post", 
    "categories": [ 
     "Category2", 
     "Category3" 
    ], 
    "comments": true, 
    "published": true, 
    "permalink": "/2017-11-30-blog-post-02.html", 
    "basename": "2017-11-30-blog-post-02" 
    } 
}', flatten=TRUE) -> jsdat 

flatten=TRUE arbeitet ein großer Teil der Zeit, aber ich denke, categories es verursacht automagically nicht einen Datenrahmen für Sie zu machen, so dass wir es mit einer Hand geben:

map_df(jsdat, ~{ 
    .x$categories <- list(.x$categories) 
    .x 
}, .id="id") 

## # A tibble: 2 x 8 
##      id  title layout categories comments published      permalink    basename 
##      <chr>  <chr> <chr>  <list> <lgl>  <lgl>       <chr>     <chr> 
## 1 2017-11-17-blog-post-01 Blog Post 01 post <chr [2]>  TRUE  TRUE   /blog-post-01.html 2017-11-17-blog-post-01 
## 2 2017-11-30-blog-post-02 Blog Post 2 post <chr [2]>  TRUE  TRUE /2017-11-30-blog-post-02.html 2017-11-30-blog-post-02 
+0

Vielleicht vermisse ich hier etwas. Wie kann man mit diesen Methoden alles in einen kombinierten Datenrahmen bringen? Danke – markwk

+0

Das. Ist. A. Kombiniert. Daten. Rahmen. was abt die tibble-Ausgabe (schickes Wort für einen Datenrahmen unter dem ordentlichen) ist nicht wie erwartet? 'categories' ist ein Zeichenvektor mit mehreren Elementen. Wie soll das dargestellt werden, wenn nicht eine "Liste" -Spalte? – hrbrmstr

Verwandte Themen