Platformă de Business Intelligence: Tutorial folosind MongoDB Aggregation Pipeline

Publicat: 2022-03-11

Utilizarea datelor pentru a răspunde la întrebări interesante este ceea ce fac cercetătorii în lumea actuală bazată pe date. Având în vedere volume uriașe de date, provocarea procesării și analizării acestora este una mare; în special pentru statisticienii sau analiștii de date care nu au timp să investească în învățarea platformelor sau tehnologiilor de business intelligence furnizate de ecosistemul Hadoop, Spark sau bazele de date NoSQL, care i-ar ajuta să analizeze terabytes de date în câteva minute.

Norma de astăzi este ca cercetătorii sau statisticienii să-și construiască modelele pe subseturi de date în pachete de analiză precum R, MATLAB sau Octave, apoi să ofere formulele și pașii de procesare a datelor echipelor IT care apoi construiesc soluții de analiză de producție.

O problemă cu această abordare este că, dacă cercetătorul realizează ceva nou după ce a rulat modelul său pe toate datele din producție, procesul trebuie repetat din nou.

Ce se întâmplă dacă cercetătorul ar putea lucra cu un dezvoltator MongoDB și ar putea să-și execute analiza pe toate datele de producție și să le folosească ca set de date exploratorii, fără a fi nevoit să învețe vreo tehnologie nouă sau limbaje de programare complexe sau chiar SQL?

mongodb și business intelligence

Dacă folosim Aggregation Pipeline și MEAN de la MongoDB în mod eficient, putem realiza acest lucru într-un timp rezonabil de scurt. Prin acest articol și prin codul care este disponibil aici în acest depozit GitHub, am dori să arătăm cât de ușor este să realizați acest lucru.

Majoritatea instrumentelor de Business Intelligence care se află pe piață oferă cercetătorilor modalități de a importa seturi de date din NoSQL și alte tehnologii Big Data în instrument, apoi transformările și analiza sunt efectuate în interiorul instrumentului. Dar, în acest tutorial de business intelligence, folosim puterea MongoDB Aggregation Pipeline fără a scoate datele din MongoDB, iar cercetătorul folosește o interfață simplă pentru a face tot felul de transformări pe un sistem de date mari de producție.

Conducta de agregare MongoDB pentru Business Intelligence

Mai simplu spus, conducta de agregare a MongoDB este un cadru pentru a efectua o serie de transformări de date pe un set de date. Prima etapă ia ca intrare întreaga colecție de documente și, de atunci, fiecare etapă ulterioară ia ca intrare setul de rezultate ale transformării anterioare și produce o ieșire transformată.

Există 10 tipuri de transformări care pot fi utilizate într-o conductă de agregare:

  • $geoNear: scoate documentele în ordinea de la cel mai apropiat până la cel mai îndepărtat de un punct specificat

  • $match: filtrează înregistrarea de intrare setată de orice expresii date

  • $project: creează un set de rezultate cu un subset de câmpuri de intrare sau câmpuri calculate

  • $redact: restricționează conținutul documentelor pe baza informațiilor din document

  • $unwind: preia un câmp de matrice cu n elemente dintr-un document și returnează n documente cu fiecare element adăugat la fiecare document ca un câmp care înlocuiește acea matrice

  • $group: se grupează pe una sau mai multe coloane și se realizează agregări pe alte coloane

  • $limit: alege primele n documente din seturile de intrare (utilă pentru calcule de percentile etc.)

  • $skip: ignoră primele n documente din setul de intrare

  • $sort: sortează toate documentele de intrare conform obiectului dat

  • $out: preia toate documentele returnate din etapa anterioară și le scrie într-o colecție

Cu excepția primului și ultimului din lista de mai sus, nu există reguli cu privire la ordinea în care aceste transformări pot fi aplicate. $out ar trebui folosit o singură dată, iar la sfârșit, dacă dorim să scriem rezultatul conductei de agregare într-o colecție nouă sau existentă. $geoNear poate fi folosit doar ca primă etapă a unei conducte.

Pentru a face lucrurile mai ușor de înțeles, să trecem prin două seturi de date și două întrebări relevante pentru aceste seturi de date.

Diferența de salarii în funcție de desemnare

Pentru a explica puterea conductei de agregare a MongoDB, am descărcat un set de date care conține informații despre salariile personalului didactic universitar pentru întreaga SUA. Aceste date sunt disponibile la nces.ed.gov. Avem date de la 7598 de instituții cu următoarele domenii:

 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 }

Cu aceste date dorim să aflăm (în medie) care este diferența dintre salariile conferențiarului și profesorilor pe stat. Apoi, un conferențiar își poate da seama în ce stare este evaluat mai aproape de un profesor din punct de vedere salarial.

Pentru a răspunde la această întrebare, un cercetător trebuie mai întâi să elimine datele proaste din colecție, deoarece există câteva rânduri/documente în setul nostru de date în care salariul mediu este un șir nul sau gol. Pentru a realiza această curățare a setului de date vom adăuga următoarea etapă:

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

Aceasta va filtra toate entitățile care au valori de șir în acele două câmpuri. În MongoDB, fiecare tip este reprezentat cu un număr unic - pentru șiruri, numărul de tip este 2.

Acest set de date este un exemplu bun, deoarece în analiza datelor din lumea reală, inginerii trebuie adesea să se ocupe și cu curățarea datelor.

Acum că avem niște date stabile, putem trece la următoarea etapă în care vom media salariile pe stat:

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

Trebuie doar să rulăm o proiecție a setului de rezultate de mai sus și să obținem diferența dintre salariile medii de stat, așa cum se arată mai jos în etapa 3 a conductei noastre:

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

Acest lucru ar trebui să ne ofere diferența de salariu mediu la nivel de stat între profesori și profesori asociați dintr-un set de date de 7519 instituții de învățământ din toată SUA. Pentru a face și mai convenabil interpretarea acestor informații, să facem o sortare simplă, astfel încât să știm care stare are cea mai mică diferență prin adăugarea unei etape $sort:

 {$sort: { SalaryDifference: 1}}

Din acest set de date, reiese că Idaho, Kansas și Virginia de Vest sunt trei state în care diferența dintre salariile profesorilor asociați și profesorilor este cea mai mică în comparație cu toate celelalte state.

Canalul complet de agregare generat pentru aceasta este prezentat mai jos:

 [ {$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}} ]

Setul de date rezultat care apare arată astfel. De asemenea, cercetătorii pot exporta aceste rezultate în CSV pentru a le raporta folosind pachete de vizualizare precum Tableau sau prin diagrame simple Microsoft Excel.

exemplu de set de date mongodb

Salariul mediu în funcție de tipul de angajare

Un alt exemplu pe care îl vom explora în acest articol implică un set de date obținut de la www.data.gov. Având în vedere informațiile despre salarizare ale tuturor organizațiilor guvernamentale de stat și locale din Statele Unite ale Americii, am dori să ne dăm seama de salariul mediu al angajaților cu normă întreagă și cu normă parțială din „Administrația financiară” din fiecare stat.

Setul de date a fost importat, rezultând documente din 1975 în care fiecare document urmează această schemă:

 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'});

Răspunsul la această întrebare poate ajuta un angajat al Administrației Financiare să aleagă cel mai bun stat în care să se mute. Cu instrumentul nostru bazat pe pipeline de agregare MongoDB, acest lucru se poate face destul de ușor:

În prima etapă, filtrați pe coloana GovernmentFunction pentru a elimina toate entitățile care nu sunt „Administrația financiară”:

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

În următoarea etapă a tutorialului, vom grupa entitățile pe stat și vom calcula salariile medii cu normă întreagă și cu fracțiune de normă în fiecare stat:

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

În cele din urmă, vom sorta rezultatele de la state cu plăți mai mari la state cu plăți mai mici:

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

Acest lucru ar trebui să permită instrumentului să genereze următoarea conductă de agregare:

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

Rularea conductei de agregare ar trebui să producă câteva rezultate ca acesta:

conducta de agregare mongodb

Blocuri de construcție

Pentru a construi această aplicație de business intelligence am folosit MEAN, care este o combinație de MongoDB, ExpressJS, AngularJS și NodeJS.

MEAN Business intelligence

După cum probabil știți deja, MongoDB este o bază de date de documente fără schemă. Chiar dacă fiecare document pe care îl stochează este limitat la 16 MB în dimensiune, flexibilitatea și performanța sa, împreună cu cadrul de pipeline de agregare pe care îl oferă, fac din MongoDB o potrivire perfectă pentru acest instrument. Începeți cu MongoDB este foarte ușor, datorită documentației sale cuprinzătoare.

Node.js, o altă componentă integrală a MEAN, furnizează mediul Javascript bazat pe server, bazat pe evenimente. Node.js rulează Javascript folosind motorul V8 al Google Chrome. Promisiunile de scalabilitate ale Node.js sunt ceea ce conduce multe organizații către aceasta.

Express.js este cel mai popular cadru de aplicații web pentru Node.js. Facilitează construirea de API-uri sau orice alt tip de strat de afaceri pe partea de server pentru aplicații web. Este foarte rapid datorită naturii sale minimaliste, dar este și destul de flexibil.

AngularJS, creat și întreținut de un număr de ingineri Google, devine rapid unul dintre cele mai populare cadre Javascript front-end disponibile la dispoziția noastră.

Există două motive pentru care MEAN este atât de popular și alegerea noastră pentru dezvoltarea de aplicații la techXplorers:

  • Setul de abilități este simplu. Un inginer care înțelege JavaScript este bine să meargă pe toate straturile.

  • Comunicarea între straturile front-end la business și la baza de date se realizează prin obiecte JSON, ceea ce ne economisește timp semnificativ în proiectare și dezvoltare la diferite straturi.

Concluzie

În acest tutorial pentru pipeline de agregare MongoDB, am demonstrat o modalitate eficientă din punct de vedere al costurilor de a oferi cercetătorilor un instrument în care pot folosi datele de producție ca seturi de date exploratorii și pot rula diferite seturi de transformări pentru a analiza și a construi modele.

Am reușit să dezvoltăm și să implementăm această aplicație end-to-end în doar 3 zile. Această aplicație a fost dezvoltată de o echipă de 4 ingineri cu experiență (2 în SUA și 2 în India) și un designer și expert UX independent care ne ajută cu câteva gânduri despre designul interfeței. La un moment dat în viitor, îmi voi face timp să explic cum funcționează acest nivel de colaborare pentru a construi produse extraordinare într-un timp incredibil de scurt.

Sperăm că profitați de pipeline de agregare MongoDB și puneți puterea în mâinile cercetătorilor dvs., care pot schimba lumea cu analiza și cunoștințele lor inteligente.

Această aplicație este live pentru a fi jucată aici.