brunch

매거진 데일리 R

You can make anything
by writing

C.S.Lewis

by 더기 May 09. 2016

R에서 json을 dataframe으로, csv로

jsonlite 패키지를 사용해서 json 데이터를 다뤄보자

데이터를 다루다 보면 json을 사용해야 하는 경우가 생긴다. API를 통해서 데이터를 받아올 때도 그렇고, json 형태로 하는 시각화 라이브러리도 있다. 매번 table로 된 데이터만 사용하다, json을 보면 어떻게 데이터를 다뤄야 할지 모르는 경우가 생긴다. (문과생으로 코딩을 시작한 제가 그랬습니다.. )


json은 대략 이런 형태를 띄고 있다. (출처 : https://ko.wikipedia.org/wiki/JSON)  

{
    "이름": "테스트",
    "나이": 25,
    "성별": "여",
    "주소": "서울특별시 양천구 목동",
    "특기": ["농구", "도술"],
    "가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},
    "회사": "경기 안양시 만안구 안양7동"
 }


이번 포스트에서는 

1. json 불러와서 dataframe으로 만들기

2. csv로 출력하기

3. dataframe을 json으로 출력하기


이렇게 3가지를 해본다. 매우 간단하다.


일단 패키지는 “jsonlite”을 사용한다. 


1. json 불러와서 dataframe으로 만들기

<예제 데이터 링크>

#jsonlite 패키지를 설치하고 불러온다.

> install.packages("jsonlite")
> library(jsonlite)

#json 파일을 읽는다. 

> data = fromJSON("sample.json")

> data = data.frame(data) #dataframe으로 변환시켜준다.
#dataframe column name 지정

> names(data) = c("id", "like", "share", "commnet", "unique", "msg", "time") 


여기서 데이터를 조금더 다듬어야 한다.

> class(data$like)

[1] "factor" 

데이터가 factor로 저장되어있다. 이럴경우 ggplot2를 활용해서 데이터를 시각화 하는데 사용되기 어렵다.

일단 charater로 바꿔준다음, 숫자는 numeric로, 날짜는 날짜 형식으로 변환해줘야한다. 


data$like의 경우에는 숫자 이므로. as.charater -> as.numric 이런 순서로 변환시켜 준다.

data$like = as.charater(data$like)

data$like = as.numeric(data$like)


2. csv로 출력하기

#dataframe에서 csv로

write.csv(data, "data.csv")


3. dataframe을 json으로 출력하기

#dataframe에서 json으로

data_json = toJSON(data) #data_json이란 변수에 저장해주고

write(data_json, "data.json") #파일로 출력한다


지금와서 보면 매우 간단하다. 하지만 작년에 R코딩을 시작하기 전 무작정 d3에서 json을 사용할 때가 생각나서 포스트를 남겼다. 그 때 네트워크 그래프를 그리는데 json을 사용했는데, 그때는 csv를 json으로 변환하는 법을 몰라서 일일히 손으로 입력했다. (손으로 5시간 걸렸던 걸로 기억한다...)


새로 R코딩을 시작하는 문과생들이 나와 같은 삽질을 경험하길 바라지 않으며...

오랜만에 포스팅을 남긴다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari