비즈니스 인텔리전스 플랫폼: MongoDB 집계 파이프라인을 사용한 자습서

게시 됨: 2022-03-11

흥미로운 질문에 답하기 위해 데이터를 사용하는 것은 오늘날의 데이터 중심 세계에서 연구자들이 하고 있는 일입니다. 방대한 양의 데이터를 감안할 때 이를 처리하고 분석하는 것은 큰 과제입니다. 특히 몇 분 만에 테라바이트 규모의 데이터를 분석하는 데 도움이 되는 Hadoop 생태계, Spark 또는 NoSQL 데이터베이스에서 제공하는 비즈니스 인텔리전스 플랫폼 또는 기술을 학습하는 데 투자할 시간이 없는 통계학자 또는 데이터 분석가에게 적합합니다.

오늘날의 표준은 연구원이나 통계학자가 R, MATLAB 또는 Octave와 같은 분석 패키지의 데이터 하위 집합을 기반으로 모델을 구축한 다음 IT 팀에 공식 및 데이터 처리 단계를 제공한 다음 생산 분석 솔루션을 구축하는 것입니다.

이 접근 방식의 한 가지 문제는 연구원이 프로덕션의 모든 데이터에 대해 자신의 모델을 실행한 후 새로운 것을 깨닫는 경우 프로세스를 완전히 다시 반복해야 한다는 것입니다.

연구원이 새로운 기술이나 복잡한 프로그래밍 언어 또는 SQL을 배우지 않고도 MongoDB 개발자와 협력하여 모든 프로덕션 데이터에 대한 분석을 실행하고 이를 탐색 데이터 세트로 사용할 수 있다면 어떨까요?

mongodb와 비즈니스 인텔리전스

MongoDB의 집계 파이프라인과 MEAN을 효과적으로 사용하면 합리적으로 짧은 시간에 이를 달성할 수 있습니다. 이 기사와 여기 이 GitHub 리포지토리에서 사용할 수 있는 코드를 통해 이를 달성하는 것이 얼마나 쉬운지 보여주고 싶습니다.

시장에 나와 있는 대부분의 비즈니스 인텔리전스 도구는 연구원이 NoSQL 및 기타 빅 데이터 기술의 데이터 세트를 도구로 가져올 수 있는 방법을 제공하고 있으며, 그런 다음 도구 내에서 변환 및 분석이 수행됩니다. 그러나 이 비즈니스 인텔리전스 튜토리얼에서는 MongoDB에서 데이터를 가져오지 않고 MongoDB Aggregation Pipeline의 기능을 사용하고 있으며 연구원은 프로덕션 빅 데이터 시스템에서 모든 종류의 변환을 수행하기 위해 간단한 인터페이스를 사용하고 있습니다.

비즈니스 인텔리전스를 위한 MongoDB 집계 파이프라인

간단히 말해서, MongoDB의 집계 파이프라인은 데이터 세트에서 일련의 데이터 변환을 수행하는 프레임워크입니다. 첫 번째 단계에서는 전체 문서 컬렉션을 입력으로 사용하고 그 다음부터는 각 후속 단계에서 이전 변환의 결과 집합을 입력으로 사용하여 일부 변환된 출력을 생성합니다.

집계 파이프라인에서 사용할 수 있는 10가지 유형의 변환이 있습니다.

  • $geoNear: 지정된 지점에서 가장 가까운 것부터 가장 먼 것 순으로 문서를 출력합니다.

  • $match: 주어진 표현식으로 설정된 입력 레코드를 필터링합니다.

  • $project: 입력 필드 또는 계산 필드의 하위 집합으로 결과 집합을 만듭니다.

  • $redact: 문서의 정보를 기반으로 문서의 내용을 제한합니다.

  • $unwind: 문서에서 n개의 요소가 있는 배열 필드를 가져오고 해당 배열을 대체하는 필드로 각 문서에 추가된 각 요소가 있는 n개의 문서를 반환합니다.

  • $group: 하나 이상의 열로 그룹화하고 다른 열에 대해 집계 수행

  • $limit: 입력 세트에서 처음 n개의 문서를 선택합니다(백분위수 계산 등에 유용).

  • $skip: 입력 세트에서 처음 n개의 문서를 무시합니다.

  • $sort: 주어진 객체에 따라 모든 입력 문서를 정렬합니다.

  • $out: 이전 단계에서 반환된 모든 문서를 가져와 컬렉션에 씁니다.

위 목록의 첫 번째와 마지막을 제외하고 이러한 변환이 적용될 수 있는 순서에 대한 규칙은 없습니다. $out은 한 번만 사용해야 하며, 집계 파이프라인의 결과를 새 컬렉션이나 기존 컬렉션에 쓰려는 경우 마지막에 사용해야 합니다. $geoNear는 파이프라인의 첫 번째 단계로만 사용할 수 있습니다.

이해를 돕기 위해 두 개의 데이터 세트와 이러한 데이터 세트와 관련된 두 가지 질문을 살펴보겠습니다.

직급별 급여차이

MongoDB 집계 파이프라인의 위력을 설명하기 위해 미국 전역의 대학 교직원 급여 정보가 포함된 데이터 세트를 다운로드했습니다. 이 데이터는 nces.ed.gov에서 확인할 수 있습니다. 다음 필드를 가진 7598개 기관의 데이터가 있습니다.

 var FacultySchema = mongoose.Schema({ InstitutionName : String, AvgSalaryAll : Number, AVGSalaryProfessors : Number, AVGSalaryAssociateProfessors : Number, AVGSalaryAssistantProfessors : Number, AVGSalaryLecturers : Number, AVGSalaryInstructors : Number, StreetAddress : String, City : String, State : String, ZIPCode : String, MenStaffCount : Number, WomenStaffCount : Number }

이 데이터를 사용하여 주별 부교수와 교수의 급여의 차이가 (평균) 무엇인지 알아내고자 합니다. 그러면 부교수는 연봉 면에서 자신이 어떤 상태에서 교수에 더 가깝게 평가되는지 알 수 있습니다.

이 질문에 답하기 위해 연구원은 먼저 컬렉션에서 잘못된 데이터를 제거해야 합니다. 데이터 세트에 평균 급여가 null 또는 빈 문자열인 행/문서가 몇 개 있기 때문입니다. 이 데이터 세트 정리를 수행하기 위해 다음 단계를 추가합니다.

 {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}

이렇게 하면 해당 두 필드에 문자열 값이 있는 모든 엔터티가 필터링됩니다. MongoDB에서 각 유형은 고유 번호로 표시됩니다. 문자열의 경우 유형 번호는 2입니다.

이 데이터 세트는 실제 데이터 분석에서 엔지니어가 종종 데이터 정리도 처리해야 하기 때문에 좋은 예입니다.

이제 안정적인 데이터가 있으므로 주별 급여를 평균화하는 다음 단계로 계속 진행할 수 있습니다.

 {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}

파이프라인의 3단계에서 아래와 같이 위의 결과 집합을 프로젝션하고 주 평균 급여의 차이를 얻으면 됩니다.

 {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}

이것은 미국 전역의 7519개 교육 기관의 데이터 세트에서 교수와 부교수 사이의 주 수준 평균 급여 차이를 제공해야 합니다. 이 정보를 더 쉽게 해석할 수 있도록 $sort 단계를 추가하여 어떤 상태의 차이가 가장 적은지 알 수 있도록 간단한 정렬을 수행합니다.

 {$sort: { SalaryDifference: 1}}

이 데이터 세트에서 Idaho, Kansas 및 West Virginia는 다른 모든 주에 비해 부교수와 교수의 급여 차이가 가장 적은 세 개 주임을 알 수 있습니다.

이를 위해 생성된 전체 집계 파이프라인은 아래와 같습니다.

 [ {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}, {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}, {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}, {$sort: { SalaryDifference: 1}} ]

표시되는 결과 데이터 세트는 다음과 같습니다. 연구원은 Tableau와 같은 시각화 패키지를 사용하거나 간단한 Microsoft Excel 차트를 통해 보고하기 위해 이러한 결과를 CSV로 내보낼 수도 있습니다.

mongodb 데이터 세트 예

고용 유형별 평균 급여

이 기사에서 살펴볼 또 다른 예는 www.data.gov에서 얻은 데이터 세트와 관련이 있습니다. 미국의 모든 주 및 지방 정부 조직의 급여 정보를 감안할 때 각 주에서 정규직 및 시간제 "재무청" 직원의 평균 급여를 파악하고자 합니다.

데이터세트를 가져와서 각 문서가 이 스키마를 따르는 1975개의 문서가 생성되었습니다.

 mongoose.Schema({ State : String, GovernmentFunction : String, FullTimeEmployees : Number, VariationPCT : Number, FullTimePay : Number, PartTimeEmployees : Number, PartTimePay : Number, PartTimeHours : Number, FullTimeEquivalentEmployment : Number, TotalEmployees : Number, TotalMarchPay : Number }, {collection: 'payroll'});

이 질문에 대한 답은 재무 관리 직원이 이사하기에 가장 좋은 주를 선택하는 데 도움이 될 수 있습니다. MongoDB 애그리게이터 파이프라인 기반 도구를 사용하면 이 작업을 매우 쉽게 수행할 수 있습니다.

첫 번째 단계에서 GovernmentFunction 열을 필터링하여 "Financial Administration"이 아닌 모든 엔터티를 삭제합니다.

 {$match:{GovernmentFunction:'Financial Administration'}}

자습서의 다음 단계에서는 엔터티를 주별로 그룹화하고 각 주의 평균 정규직 및 시간제 급여를 계산합니다.

 {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}

마지막으로 급여가 높은 주에서 급여가 낮은 주까지 결과를 정렬합니다.

 {$sort: {FTP_AVG: -1, PTM_AVG: -1}}

이렇게 하면 도구에서 다음 집계 파이프라인을 생성할 수 있습니다.

 [ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]

집계 파이프라인을 실행하면 다음과 같은 결과가 생성되어야 합니다.

mongodb 집계 파이프라인

빌딩 블록

이 비즈니스 인텔리전스 애플리케이션을 구축하기 위해 MongoDB, ExpressJS, AngularJS 및 NodeJS의 조합인 MEAN을 사용했습니다.

MEAN 비즈니스 인텔리전스

이미 알고 계시겠지만 MongoDB는 스키마가 없는 문서 데이터베이스입니다. 저장하는 각 문서의 크기가 16MB로 제한되어 있지만 MongoDB가 제공하는 집계 파이프라인 프레임워크와 함께 유연성과 성능이 이 도구에 완벽하게 적합합니다. 포괄적인 문서 덕분에 MongoDB를 시작하는 것은 매우 쉽습니다.

MEAN의 또 다른 필수 구성 요소인 Node.js는 이벤트 기반 서버 측 Javascript 환경을 제공합니다. Node.js는 Chrome의 V8 엔진을 사용하여 Javascript를 실행합니다. Node.js의 확장성 약속은 많은 조직이 Node.js를 향해 나아가는 원동력입니다.

Express.js는 Node.js용으로 가장 널리 사용되는 웹 애플리케이션 프레임워크입니다. 웹 애플리케이션을 위한 API 또는 다른 종류의 서버 측 비즈니스 계층을 쉽게 구축할 수 있습니다. 미니멀한 특성 때문에 매우 빠르지만 매우 유연합니다.

많은 Google 엔지니어가 만들고 유지 관리하는 AngularJS는 우리가 마음대로 사용할 수 있는 가장 인기 있는 프론트 엔드 Javascript 프레임워크 중 하나가 되었습니다.

MEAN이 인기 있는 두 가지 이유와 techXplorers에서 애플리케이션 개발을 선택한 이유는 다음과 같습니다.

  • 스킬셋은 간단합니다. 자바스크립트를 이해하는 엔지니어는 모든 계층을 다루는 것이 좋습니다.

  • 프론트 엔드에서 비즈니스 및 데이터베이스 계층 간의 통신은 모두 JSON 개체를 통해 이루어지므로 다른 계층에서 설계 및 개발에 소요되는 시간을 크게 절약할 수 있습니다.

결론

이 MongoDB 집계 파이프라인 자습서에서는 연구원에게 프로덕션 데이터를 탐색 데이터 세트로 사용하고 다양한 변환 세트를 실행하여 모델을 분석 및 구성할 수 있는 도구를 제공하는 비용 효율적인 방법을 보여주었습니다.

단 3일 만에 이 애플리케이션을 엔드 투 엔드로 개발하고 배포할 수 있었습니다. 이 응용 프로그램은 4명의 숙련된 엔지니어(미국 2명, 인도 2명)와 디자이너이자 프리랜서 UX 전문가로 구성된 팀이 인터페이스 디자인에 대한 몇 가지 생각을 도우면서 개발했습니다. 미래의 어느 시점에서, 나는 믿을 수 없을 정도로 짧은 시간에 멋진 제품을 만들기 위해 이 수준의 협업이 어떻게 작동하는지 설명하는 시간을 가질 것입니다.

MongoDB의 집계 파이프라인을 활용하고 영리한 분석과 통찰력으로 세상을 바꿀 수 있는 연구원의 손에 힘을 실어주기를 바랍니다.

이 응용 프로그램은 여기에서 플레이할 수 있습니다.