현장에서 Couchbase와 R의 통합에 대해 많은 관심을 보았는데요, 지금 바로 사용할 수 있는 몇 가지 예제를 소개합니다.
약간의 배경 지식을 말씀드리자면, R은 통계 컴퓨팅과 그래픽을 위한 언어이자 환경입니다. 데이터 분석, 머신 러닝 또는 데이터 크런칭을 위한 최고의 언어 순위에서 1위를 차지하고 있습니다. 데이터 과학자들은 R을 가장 강력한 도구 중 하나로 사용합니다.
데이터 수집을 위해 R은 간단한 명령줄로 csv, 엑셀, html, 일반 텍스트 등과 같은 다양한 형식의 파일을 로드할 수 있습니다. R은 또한 HTTP를 사용하여 원격 사이트에서 데이터를 로드할 수 있으며, JSON으로 쉽게 작업할 수 있습니다.
이 모든 것을 염두에 두고 Couchbase에서 R로 데이터를 로드하려면 어떻게 해야 할까요? 특별한 어댑터가 필요할까요? N1QL이 정답입니다. Couchbase 쿼리 엔진은 REST 요청을 수락하여 JSON 문서를 반환하므로 추가 구성 요소 없이도 데이터를 R로 직접 가져올 수 있습니다.
여기에는 예제 데이터 집합으로 Couchbase에 포함된 "travel-sample" 버킷의 데이터가 포함된 몇 가지 예가 있습니다. 여기서는 R 3.4.1 버전과 Couchbase 4.6.2 버전을 사용하고 있습니다.
첫 번째 연습으로 항공편 수가 많은 상위 20개 항공사를 시스템에 로드해 보겠습니다. 이 데이터를 R 데이터 프레임에 로드하고 콘솔에 결과를 표시하고 간단한 막대 그래프를 만들어 보겠습니다.
카우치베이스 측에서는 이것이 실행할 쿼리입니다:
1 2 3 4 5 6 |
선택 a.이름, 카운트(*) as 합계_항공편 FROM `여행-샘플` r JOIN `여행-샘플` a 켜기 키 r.airlineid 어디 r.유형 ="경로" AND a.유형="항공사" 그룹 BY a.이름 주문 BY 총 항공편 DESC LIMIT 20 |
R 측에서는 R 콘솔을 사용하겠습니다. 먼저 이 연습에 사용된 라이브러리를 가져와야 합니다:
1 2 3 4 |
라이브러리(httr) 라이브러리(jsonlite) 라이브러리(ggplot2) 라이브러리(전단지) |
다음 단계는 Couchbase 쿼리 노드 주소와 쿼리를 포함한 몇 가지 변수를 빌드하는 것입니다. 이스케이프된 큰따옴표(\")에 유의하세요:
1 2 |
cbServer <- "http://cb451box:8093/query/service" 쿼리 <- "SELECT a.name, count(*) as total_flights FROM `travel-sample` r JOIN `travel-sample` a ON KEYS r.airlineid WHERE r.type =\"route\" AND a.type=\"airline\" GROUP BY a.name ORDER BY total_flights DESC LIMIT 20" |
그런 다음 HTTP 요청을 구성하고 JSON 형식의 응답을 읽어야 합니다:
1 2 |
req <- httr::POST(cbServer, httr::add_headers("콘텐츠 유형" = "application/x-www-form-urlencoded;charset=UTF-8"), body = 붙여넣기("statement=", 쿼리)) res <- fromJSON(httr::콘텐츠(req, "text")) |
참고: 비밀번호로 보호된 버킷을 사용하는 경우 다음과 같은 자격 증명을 포함해야 합니다:
1 2 |
크레딧 <- "[{\"user\":\"local:bucketName\", \"pass\":\"password\"}]" req <- httr::POST(cbServer, httr::add_headers("콘텐츠 유형" = "application/x-www-form-urlencoded;charset=UTF-8"), body = 붙여넣기("statement=", 쿼리, "&creds=", 크레딧)); |
그런 다음 결과를 변수에 저장할 수 있습니다.
1 |
항공사항공편 <- res$결과 |
값을 확인하려면 변수 이름을 입력하는 것으로 충분합니다:
ggplot 라이브러리를 사용하여 막대 그래프를 만들 수도 있습니다:
1 |
ggplot(데이터=항공사항공편, aes(x=이름, y=총 항공편)) + 테마(축.텍스트.x=element_text(각도=90,hjust=1)) + geom_bar(stat="identity") |
이것이 결과입니다:
두 번째 예로 런던에서 반려동물 동반 가능 호텔을 검색하여 지도 위에 표시해 보겠습니다. N1QL 쿼리는 다음과 같습니다:
1 2 3 |
선택 이름,geo.위도 as 위도,geo.lon as long FROM `여행-샘플` 어디 유형="호텔" AND 도시="London" AND pets_ok=true |
쿼리를 실행하고 결과를 저장하는 R 코드입니다:
1 2 3 4 |
쿼리 <- "SELECT name, geo.lat as lat, geo.lon as long FROM `travel-sample` WHERE type=\"hotel\" AND city=\"London\" AND pets_ok=true" req <- httr::POST(cbServer, httr::add_headers("콘텐츠 유형" = "application/x-www-form-urlencoded;charset=UTF-8"), body = 붙여넣기("statement=", 쿼리)) res <- fromJSON(httr::콘텐츠(req, "text")) 반려동물 친화호텔런던 <- res$결과 |
결과는 다음과 같습니다:
이제 리플렛 라이브러리를 사용하여 지도 위에 결과를 그릴 수 있습니다:
1 |
전단지(데이터 = 반려동물 친화호텔런던) %>% 추가 타일() %>% 추가 마커(~long, ~위도, 팝업 = ~as.캐릭터(이름), 레이블 = ~as.캐릭터(이름)) %>% 추가 공급자 타일(공급자$오픈스트리트맵) |
지도가 브라우저에서 열립니다:
여기까지입니다. R에서 카우치베이스를 사용하는 첫 단계로 도움이 되었기를 바랍니다. 행복한 데이터 분석이 되시길 바랍니다!
자세한 내용은 여기를 참조하세요:
N1QL REST API 참조
R: 통계 컴퓨팅을 위한 R 프로젝트
R용 리플렛
안녕하세요,
n1ql에 도달할 URL이 여러 개 있는 경우 처리하는 방법.
안부
안녕하세요 스네하시스입니다.
node.js, Java, .Net 등과 같은 Couchbase SDK를 사용하는 경우 초기 연결에서 클러스터 맵을 가져오고 클라이언트는 쿼리 활성화 노드에 대한 요청의 균형을 맞추는 방법을 알고 있습니다.
R을 사용하면 이러한 클라이언트가 없으므로 "클러스터 보기"가 없으며 코드에서 서버 주소를 관리해야 합니다. 요약하면, 클러스터에서 하나의 쿼리 노드를 선택해야 합니다.