study blog

R에서 JSON 데이터 처리(jsonlite, httr 패키지) 본문

R/3. 데이터 조작

R에서 JSON 데이터 처리(jsonlite, httr 패키지)

ivo_lee 2020. 1. 12. 17:48

JSON 데이터 받아서 data frame 생성하기

- Network을 통해서 JSON 데이터를 받아서 Data Frame으로 만들기 위해 새로운 package를 이용

 


1) 도서검색 데이터 불러와서 저장하기

1-1) package 설치

install.packages("jsonlite")    #json처리하는데 많이 사용하는 패키지
install.packages("httr")        #network 사용하는데 필요한 패키지들

 

1-2) package를 사용하기 위해 loading작업 필요

library(jsonlite);   library(httr)

1-3) 문자열 처리하기 위한 package

library(stringr)

 

1-4) 주소 완성하기 (request_url)

url <- "http://localhost:8080/bookSearch/search?keyword="
request_url <- str_c(url, scan(what=character()))         #str_c : stringr 패키지 내에 있는 문자열 결합 함수

# 검색어에 검색할 단어 입력 : java   -> 한글 치면 오류뜸 !
# 한글 처리가 되도록 해보자 (인코딩 변경)

request_url <- URLencode(request_url)   #URLencode: 특정 문자set으로 해당 문자열을 바꿔주겠다 
request_url                             #해보면 한글이 유니코드형태로 바뀌어서 나오는 것을 볼 수 있음

 
df <- fromJSON(request_url)             #데이터프레임 형태로 나옴
View(df)                                #data frame형태로 보여줌. V: 대문자
str(df)                                 #12행 4열   #str(): data frame의 구조를 파악
names(df)                               #data frame혹은 matrix의 column명 검색

 

1-5) 찾은 도서 제목 console에 출력하기

for(idx in 1:nrow(df)){
  print(df$title[idx])
}

 

1-6) JSON을 이용해서 data frame 생성

# data frame을 csv형식(,로 구분된 값)으로 파일에 저장

write.csv(df,                                       #파일 생성
          file="C:/R_lecture/data/book.csv",
          row.names=F,
          quote=F)          # ""사라짐 -> ,나오는 경우(ex.저자 여러명) 문제생김

 

(+) Data Frame JSON으로 변경하려면 어떻게 하나요?

df_json <- toJSON(df)
prettify(df_json)             # prettify(): json 예쁘게 보여줌

write(df_json,               #문자열 출력할거기 때문에(csv형식 아니므로 ) .csv안
      file="C:/R_lecture/data/book_json.txt")

write(prettify(df_json),       #구조화시켜 알아보기 쉽게. 그러나 크기 커지므로 prettify 잘 사용 안함
      file="C:/R_lecture/data/book_json2.txt")

 


2) 박스오피스 자료

# 2018년 10월 30일 박스오피스 제목과 누적 관람객 수 csv파일로 저장
boxOffice <- "http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=a96309aef828bcb00e744d6f2cf738bc&targetDt=20181030"
df <- fromJSON(boxOffice)        # 주소에 있는 파일 json으로 읽어들이기 

write.csv(df,                                       #파일 생성
          file="C:/R_lecture/data/boxOffice.csv",
          row.names=F,
          quote=F)  # ""사라짐 -> ,나오는 경우(저자 여러명) 문제생김

 

2-1) 데이터에서 필요한 내용만 추출 -> data frame으로 뽑아와서 만들기

# 얻어온 데이터에서 필요한 내용만 추출해서 data frame을 새로 생성한 후 파일 출력
myDf <- df$boxOfficeResult$dailyBoxOfficeList[c("movieNm","audiAcc")]

write.csv(myDf,                                       #파일 생성
          file="C:/R_lecture/data/myBoxOffice.csv",
          row.names=F,
          quote=F)  # ""사라짐 -> ,나오는 경우(저자 여러명) 문제생김

 

2-2) 데이터에서 필요한 내용만 추출 -> for문 이용해서 만들기

myDf2 <- df$boxOfficeResult$dailyBoxOfficeList

myMovieNm = c(); myAudiAcc =c();
# myMovieNm2 = c(); myAudiAcc2 =c();

for(idx in 1:nrow(myDf2)){
  myMovieNm <- c(myMovieNm,myDf2$movieNm[idx])
  myAudiAcc <- c(myAudiAcc,myDf2$audiAcc[idx])

  #append 이용해서 붙이기
  #myMovieNm2 <- append(myMovieNm2,myDf2$movieNm[idx])    
  #myAudiAcc2 <- append(myMovieNm2,myDf2$audiAcc[idx])
}

x <- data.frame("영화제목"=myMovieNm,"누적관객수"=myAudiAcc)

write.csv(x,                                       #파일 생성
          file="C:/R_lecture/data/myBoxOffice2.csv",
          row.names=F,
          quote=F)                            # ""사라짐 -> ,나오는 경우(저자 여러명) 문제생김

 

 

2-3) 데이터에서 필요한 내용만 추출 ->  for문 안에서 파일 생성해서 내용 추가하기

# data frame에서 로직처리(for문)해서 데이터를 추출해 text파일에 append해서 파일 출력

myDf3 <- df$boxOfficeResult$dailyBoxOfficeList

write.csv(NULL,                                       #파일 생성
          file="C:/R_lecture/data/myBoxOffice3.csv",
          row.names=F,
          quote=F )

for(idx in 1:nrow(myDf3)){
  write.table(myDf3$movieNm[idx],                                       #파일 생성
              file="C:/R_lecture/data/myBoxOffice3.csv",
              row.names=F,
              quote=F,
              append=T
  )
}

 

Comments