2016-11-12 17 views
0

Twitter APIからデータを取得しています。データをJSONオブジェクトからデータフレームに変換し、データウェアハウスにロードします。以下の入力コードとコードスニペットを探します。ネストされたJSONオブジェクトをデータフレームに変換する

私はRプログラミングにとって非常に新しいです。

stats_campaign.data <- content(stats_campaign.request) 
print(stats_campaign.data) 

O/P:私は、このJSONオブジェクトを解析されたことができますどのように

`{ 
"data_type": [ "stats" ], 
"time_series_length": [ 1 ], 
"data": [ 
{ 
    "id": [ "XXXXX" ], 
    "id_data": [ 
    { 
     "segment": {}, 
     "metrics": { 
     "impressions": {}, 
     "tweets_send": {}, 
     "qualified_impressions": {}, 
     "follows": {}, 
     "app_clicks": {}, 
     "retweets": {}, 
     "likes": {}, 
     "engagements": {}, 
     "clicks": {}, 
     "card_engagements": {}, 
     "replies": {}, 
     "url_clicks": {}, 
     "carousel_swipes": {} 
     } 
    } 
    ] 
    }, 

    {  
    "id": [ "XXXX1" ], 
    "id_data": [ 
    { 
     "segment": {}, 
     "metrics": { 
     "impressions": {}, 
     "tweets_send": {}, 
     "qualified_impressions": {}, 
     "follows": {}, 
     "app_clicks": {}, 
     "retweets": {}, 
     "likes": {}, 
     "engagements": {}, 
     "clicks": {}, 
     "card_engagements": {}, 
     "replies": {}, 
     "url_clicks": {}, 
     "carousel_swipes": {} 
     } 
    } 
    ] 
    },` 

私は、このJSON値を読んでいます、

stats_json_file <- sprintf("P:/R Repos/R  
       Applications/TwitterAPIData/stats_test_data-%s.json", TODAY) 
    jsonlite::fromJSON(stats_json_file) 

    **Result :** 
     id          id_data 
    1 5wcaz           NULL 
    2 5ub2u           NULL 
    3 5wb8x           NULL 
    4 5wb1j           NULL 
    5 5yqwj           NULL 
    6 5pq5i           NULL 
    7 5u197           NULL 
    8 5z2js           NULL 
    9 6fqh0 333250, 4, 9, 19, 111, 3189, 3156, 5, 1091 
    10 5tvr1           NULL 
    11 5yqw4           NULL 
    12 5qqps           NULL 
    13 5yqvw           NULL 
    14 5ygom           NULL 
    15 5nc88           NULL 
    16 5yg94           NULL 
    17 65t9e           NULL 
    18 5peck           NULL 
    19 63pg1 247283, 17, 22, 35, 297, 5514, 5450, 6, 2971 
    20 6cdvy  156705, 1, 2, 6, 112, 10933, 605, 170 

    From my JSON file I want Id and whole "metrics": { 
     "impressions": {}, 
     "tweets_send": {}, 
     "qualified_impressions": {}, 
     "follows": {}, 
     "app_clicks": {}, 
     "retweets": {}, 
     "likes": {}, 
     "engagements": {}, 
     "clicks": {}, 
     "card_engagements": {}, 
     "replies": {}, 
     "url_clicks": {}, 
     "carousel_swipes": {} 
     } 
     and convert to Data Frame to load into Data Base. Plzz Help..! 

。私はID &全体のMetricsオブジェクトを取得したい。次に、データテーブルに変換してSQLテーブルにロードします。

私はどのように私はそれを行うことができ、値を毎回追加するリストまたは何か他のものを使用しなければならないために内

`test <- list() 
for(i in 1:len) 
{ test <- unlist(stats_campaign.data$data[[i]]) 
print(test)}` 

**Output:** 
     id 
    "5wcaz" 
     id 
    "5ub2u" 
     id 
    "5wb8x" 
     id 
"5wb1j" 
     id 
"5yqwj" 
     id 
    "5pq5i" 
     id 
    "5u197" 
     id 
    "5z2js" 
     id 
    "5tvr1" 
     id 
    "5yqw4" 
     id 
    "5qqps" 
     id 
    "5yqvw" 
     id 
    "5ygom" 
     id 
    "5nc88" 
     id 
    "5yg94" 
     id 
    "65t9e" 
     id 
    "5peck" 
        id id_data.metrics.impressions 
        "63pg1"     "133227" 
         id_data.metrics.tweets_send  id_data.metrics.follows 
        "10"       "9" 
         id_data.metrics.retweets  id_data.metrics.likes 
        "17"      "96" 
        id_data.metrics.engagements  id_data.metrics.clicks 
       "2165"      "2134" 
        id_data.metrics.replies id_data.metrics.url_clicks 
        "5"      "1204" 
        id id_data.metrics.impressions 
       "6cdvy"     "176164" 
    id_data.metrics.tweets_send id_data.metrics.retweets 
        "2"      "10" 
    id_data.metrics.likes id_data.metrics.engagements 
        "121"      "9708" 
    id_data.metrics.clicks id_data.metrics.url_clicks 
        "620"      "160" 

、私はコードの下に使用される複数のIDが&メトリック値を読み取ることが..? ?私は正しいアプローチを使用していますか?ネストされたJSONオブジェクトを解析してデータフレームに直接入れることができる代替方法はありますか?

助けてください!前もって感謝します..!

+2

JSONが構文的に有効な場合、Rでは 'jsonlite :: fromJSON(your_text)'を実行できます。しかし、あなたはあなたの括弧でいくつかの問題を抱えているようです。 – Gregor

+0

これは私のJOSN FOrmatです。 –

+0

さて、JSONが有効になりました。 'jsonlite :: fromJSON(your_text)'を実行して有用な結果を得ることができます。なんでしょう? *あなたが望んでいない出力を表示するのではなく、あなたが望む出力を表示できますか? – Gregor

答えて

0

コメントに記載されているように、についてもう少し詳しく知りたい場合は、をお探しください。いずれにしても、次のことが役立つ方向性を提供することを期待しています。 tidyjson READMEは役立つ概観を少し提供します。

残念ながら、JSONオブジェクトにデータがないと、データに存在するもの(nullオブジェクトで期待されるもの)を説明することが難しくなります。見つめている。 tidyjsonは、データがない場合でも、一貫性のあるdata.frame出力を生成する機能を提供します。キー動詞はgatherspreadです。これはtidyrとよく似ていますが、JSONの味です。

str <- "{\"data_type\":[\"stats\"],\"time_series_length\":[1],\"data\":[{\"id\":[\"XXXXX\"],\"id_data\":[{\"segment\":{},\"metrics\":{\"impressions\":{},\"tweets_send\":{},\"qualified_impressions\":{},\"follows\":{},\"app_clicks\":{},\"retweets\":{},\"likes\":{},\"engagements\":{},\"clicks\":{},\"card_engagements\":{},\"replies\":{},\"url_clicks\":{},\"carousel_swipes\":{}}}]},{\"id\":[\"XXXX1\"],\"id_data\":[{\"segment\":{},\"metrics\":{\"impressions\":{},\"tweets_send\":{},\"qualified_impressions\":{},\"follows\":{},\"app_clicks\":{},\"retweets\":{},\"likes\":{},\"engagements\":{},\"clicks\":{},\"card_engagements\":{},\"replies\":{},\"url_clicks\":{},\"carousel_swipes\":{}}}]}]} " 

library(dplyr) 
library(tidyjson) 

prep <- as.tbl_json(str) %>% enter_object("data") %>% gather_array("objid") 

p1 <- prep %>% enter_object("id") %>% 
    gather_array("idnum") %>% append_values_string("id") 

p2 <- prep %>% enter_object("id_data") %>% gather_array("datanum") %>% 
enter_object("metrics") %>% 
spread_values(
impressions = jstring("impressions", "value") 
, tweets_send = jnumber("tweets_send", "somekey") 
) 

p1 %>% tbl_df() %>% left_join(p2 %>% tbl_df(), by = c("document.id", "objid")) 
#> # A tibble: 2 x 7 
#> document.id objid idnum id datanum impressions tweets_send 
#>   <int> <int> <int> <chr> <int>  <chr>  <dbl> 
#> 1   1  1  1 XXXXX  1  <NA>   NA 
#> 2   1  2  1 XXXX1  1  <NA>   NA 
関連する問題