안녕하세요. 언제나 휴일에 언휴예요.
이전 강의에서 카카오 API를 이용하여 도서 데이터를 검색한 후 CSV 파일로 저장하였습니다.
data.csv 파일 로딩 오류 data.frame 항목 list의 문자열을 합치기(paste) , 콤마 제거하기(str_replace_all) data.frame의 행 개수(nrow), 열 개수(ncol) 저장하고 로딩하여 확인하기
data.csv 파일 로딩 오류
그런데 분석하기 위해 로딩을 시도하니 오류가 나네요.
파일 내용을 보내 테이블 구조가 들쑥날쑥 하네요.
아무래도 data.csv 파일은 애물단지인 것 같군요.
너무 고민하지 마시고 가감히 영구 삭제하세요.
이번에는 이전 강의에 이어 정제화 작업을 수행하기로 합시다.
다음은 이전 강의 내용에 data.csv 파일 내용을 로딩하기 위해 실패하는 부분까지 입력한 전체 내용입니다.
> site_url = "https://dapi.kakao.com/v3/search/book" > query = "R언어" > query = URLencode(iconv(query,to="UTF-8")) > query_str = sprintf("%s?target=title&query=%s",site_url,query) > query_str [1] "https://dapi.kakao.com/v3/search/book?target=title&query=R언어" > kakao_api_key = "발급받은 REST API 키" > auth_key = sprintf("KakaoAK %s",kakao_api_key) > library(httr) > resp = GET(query_str,add_headers("Authorization"=auth_key)) > resp > resp Response [https://dapi.kakao.com/v3/search/book?target=title&query=R%EC%96%B8%EC%96%B4] Date: 2020-05-16 03:05 Status: 200 Content-Type: application/json;charset=UTF-8 Size: 8.7 kB {"documents":[{"authors":["장기천","강병진"],"contents":"▶ 이 책은R언어로 짜는 금융프로그래밍 ... > class(resp) [1] "response" > resp.str = as.character(resp) > library(jsonlite) > d= fromJSON(resp.str) > class(d) [1] "list" > df = data.frame(d) > write.csv(df,"data.csv") Error in write.table(df, "data.csv", col.names = NA, sep = ",", dec = ".", : 'list'은 'EncodeElement'에서 구현되지 않은 유형입니다 > df2 = as.matrix(df) > write.csv(df2,'data.csv') > read.csv("data.csv") Error in read.table(file = file, header = header, sep = sep, quote = quote, : 열의 개수가 열의 이름들보다 많습니다
data.frame 항목 list의 문자열을 합치기 , 콤마 제거하기
“data.csv” 파일을 관찰해 보면 저자가 여러 명 있을 때 여러 열을 차지하네요.
콤마가 들어가 있는 내용도 여러 열을 차지하고 있습니다.
이제 저자 여러 명 있을 때 하나로 합치는 작업과 콤마를 제거합시다.
문자열을 하나로 합칠 때는 paste 함수를 호출합니다.
paste (…, sep = ” “, collapse = NULL)
특정 문자를 제거할 때 str_replace_all 함수를 호출합니다. (stringr 라이브러리 사용)
str_replace_all(string, pattern, replacement)
data.frame에 전체 항목을 방문하면서 변경할 거예요. 이를 위해 행과 열의 개수를 알아야겠죠. 이 때 nrow 함수와 ncol 함수를 호출합니다.
행 개수: nrow(df)
열 개수: ncol(df)
> library(stringr) > for(r in 1:nrow(df)){ + for(c in 1:ncol(df)){ + df[r,c] = paste(df[r,c]) + df[r,c] = str_replace_all(df[r,c],",",":") + } + }
저장하고 로딩하여 확인하기
matix로 변환한 후 저장하는 것은 이전 강의에서 얘기했죠.
그리고 csv 파일에 저장할 때 row.names 를 FALSE로 지정하여 저장하세요.
> dm = as.matrix(df) > write.csv(dm,"data2.csv",row.names = FALSE) > df3 = read.csv("data2.csv") > df3 documents.authors 1 c(장기천: 강병진) 2 c(박성호: 문경희: 이호창: 조미숙) 3 마이클 크롤리 4 제임스 W 파팅턴 5 가렛 그롤먼드 6 켈리 블랙 7 제임스 W 파팅턴 == 이하 생략 ===
이제 데이터 분석을 위한 준비가 어느 정도 된 것 같네요.