Piattaforma di Business Intelligence: tutorial sull'utilizzo della pipeline di aggregazione MongoDB
Pubblicato: 2022-03-11Usare i dati per rispondere a domande interessanti è ciò che i ricercatori sono impegnati a fare nel mondo odierno basato sui dati. Dati gli enormi volumi di dati, la sfida di elaborarli e analizzarli è grande; in particolare per statistici o analisti di dati che non hanno il tempo di investire nell'apprendimento di piattaforme di business intelligence o tecnologie fornite dall'ecosistema Hadoop, da database Spark o NoSQL che li aiuterebbero ad analizzare terabyte di dati in pochi minuti.
La norma oggi è che ricercatori o statistici costruiscano i loro modelli su sottoinsiemi di dati in pacchetti di analisi come R, MATLAB o Octave, e quindi forniscano le formule e le fasi di elaborazione dei dati ai team IT che quindi creano soluzioni di analisi della produzione.
Un problema con questo approccio è che se il ricercatore realizza qualcosa di nuovo dopo aver eseguito il suo modello su tutti i dati in produzione, il processo deve essere ripetuto ancora una volta.
E se il ricercatore potesse lavorare con uno sviluppatore MongoDB ed eseguire la sua analisi su tutti i dati di produzione e utilizzarli come set di dati esplorativi, senza dover apprendere nuove tecnologie o linguaggi di programmazione complessi, o persino SQL?
Se utilizziamo efficacemente la pipeline di aggregazione di MongoDB e MEAN, possiamo raggiungere questo obiettivo in un tempo ragionevolmente breve. Attraverso questo articolo e il codice disponibile qui in questo repository GitHub, vorremmo mostrare quanto sia facile raggiungere questo obiettivo.
La maggior parte degli strumenti di Business Intelligence presenti sul mercato forniscono ai ricercatori modi per importare set di dati da NoSQL e altre tecnologie Big Data nello strumento, quindi le trasformazioni e l'analisi vengono eseguite all'interno dello strumento. Ma in questo tutorial di business intelligence utilizziamo la potenza di MongoDB Aggregation Pipeline senza estrarre i dati da MongoDB e il ricercatore utilizza un'interfaccia semplice per eseguire tutti i tipi di trasformazioni su un sistema di big data di produzione.
Pipeline di aggregazione MongoDB per la business intelligence
In poche parole, la pipeline di aggregazione di MongoDB è un framework per eseguire una serie di trasformazioni di dati su un set di dati. La prima fase prende l'intera raccolta di documenti come input, e da allora in poi ogni fase successiva prende come input il set di risultati della trasformazione precedente e produce un output trasformato.
Esistono 10 tipi di trasformazioni che possono essere utilizzate in una pipeline di aggregazione:
$geoNear: restituisce i documenti in ordine dal più vicino al più lontano da un punto specificato
$match: filtra il record di input impostato da una determinata espressione
$progetto: crea un insieme di risultati con un sottoinsieme di campi di input o campi calcolati
$redact: limita il contenuto dei documenti in base alle informazioni del documento
$unwind: prende un campo array con n elementi da un documento e restituisce n documenti con ogni elemento aggiunto a ciascun documento come campo che sostituisce quell'array
$gruppo: raggruppa per una o più colonne ed esegue aggregazioni su altre colonne
$limit: preleva i primi n documenti dai set di input (utile per calcoli percentili, ecc.)
$skip: ignora i primi n documenti dal set di input
$sort: ordina tutti i documenti di input in base all'oggetto fornito
$out: prende tutti i documenti restituiti dalla fase precedente e li scrive in una raccolta
Fatta eccezione per la prima e l'ultima nell'elenco sopra, non ci sono regole sull'ordine in cui queste trasformazioni possono essere applicate. $out dovrebbe essere utilizzato solo una volta e, alla fine, se vogliamo scrivere il risultato della pipeline di aggregazione in una raccolta nuova o esistente. $geoNear può essere utilizzato solo come prima fase di una pipeline.
Per rendere le cose più facili da capire, esaminiamo due set di dati e due domande rilevanti per questi set di dati.
Differenza salariale per designazione
Per spiegare la potenza della pipeline di aggregazione di MongoDB, abbiamo scaricato un set di dati che contiene informazioni sugli stipendi del personale docente universitario per tutti gli Stati Uniti. Questi dati sono disponibili su nces.ed.gov. Abbiamo dati da 7598 istituzioni con i seguenti campi:
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 }
Con questi dati vogliamo scoprire (in media) qual è la differenza tra gli stipendi dei professori associati e dei professori per stato. Quindi, un professore associato può rendersi conto in quale stato è valutato più vicino a un professore in termini di stipendio.
Per rispondere a questa domanda, un ricercatore deve prima eliminare i dati errati dalla raccolta, perché ci sono alcune righe/documenti nel nostro set di dati in cui lo stipendio medio è una stringa nulla o vuota. Per eseguire questa pulizia del set di dati, aggiungeremo la seguente fase:
{$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}
Questo filtrerà tutte le entità che hanno valori di stringa in quei due campi. In MongoDB, ogni tipo è rappresentato con un numero univoco: per le stringhe, il numero del tipo è 2.
Questo set di dati è un buon esempio perché nell'analisi dei dati del mondo reale, gli ingegneri spesso devono occuparsi anche della pulizia dei dati.
Ora che abbiamo alcuni dati stabili, possiamo passare alla fase successiva in cui faremo la media degli stipendi per stato:
{$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}
Abbiamo solo bisogno di eseguire una proiezione del set di risultati di cui sopra e ottenere la differenza negli stipendi medi statali, come mostrato di seguito nella Fase 3 della nostra pipeline:
{$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}
Questo dovrebbe darci la differenza salariale media a livello statale tra professori e professori associati da un set di dati di 7519 istituzioni educative in tutti gli Stati Uniti. Per rendere ancora più conveniente interpretare queste informazioni, eseguiamo un semplice ordinamento in modo da sapere quale stato ha la minima differenza aggiungendo una fase $sort:

{$sort: { SalaryDifference: 1}}
Da questo set di dati, è evidente che Idaho, Kansas e West Virginia sono tre stati in cui la differenza negli stipendi di professori associati e professori è la minima rispetto a tutti gli altri stati.
La pipeline di aggregazione completa generata per questo è mostrata di seguito:
[ {$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}} ]
Il set di dati risultante che appare è simile a questo. I ricercatori possono anche esportare questi risultati in CSV per creare report su di essi utilizzando pacchetti di visualizzazione come Tableau o tramite semplici grafici Microsoft Excel.
Retribuzione media per tipo di occupazione
Un altro esempio che esploreremo in questo articolo riguarda un set di dati ottenuto da www.data.gov. Date le informazioni sui salari di tutte le organizzazioni statali e locali negli Stati Uniti d'America, vorremmo calcolare la retribuzione media dei dipendenti dell'"Amministrazione finanziaria" a tempo pieno e part-time in ogni stato.
Il set di dati è stato importato, risultando in documenti del 1975 in cui ogni documento segue questo schema:
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'});
La risposta a questa domanda può aiutare un dipendente dell'amministrazione finanziaria a scegliere lo stato migliore in cui trasferirsi. Con il nostro strumento basato sulla pipeline di aggregazione MongoDB, questo può essere fatto abbastanza facilmente:
Nella prima fase, filtra sulla colonna GovernmentFunction per eliminare tutte le entità non "Amministrazione finanziaria":
{$match:{GovernmentFunction:'Financial Administration'}}
Nella fase successiva del tutorial, raggrupperemo le entità per stato e calcoleremo gli stipendi medi a tempo pieno e part-time in ogni stato:
{$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}
Infine, ordineremo i risultati dagli stati paganti più alti agli stati paganti più bassi:
{$sort: {FTP_AVG: -1, PTM_AVG: -1}}
Ciò dovrebbe consentire allo strumento di generare la seguente pipeline di aggregazione:
[ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]
L'esecuzione della pipeline di aggregazione dovrebbe produrre alcuni risultati come questo:
Costruzioni
Per creare questa applicazione di business intelligence abbiamo utilizzato MEAN, che è una combinazione di MongoDB, ExpressJS, AngularJS e NodeJS.
Come forse già saprai, MongoDB è un database di documenti senza schema. Anche se ogni documento archiviato ha una dimensione limitata a 16 MB, la sua flessibilità e prestazioni insieme al framework della pipeline di aggregazione che fornisce rendono MongoDB perfetto per questo strumento. Iniziare con MongoDB è molto semplice, grazie alla sua documentazione completa.
Node.js, un altro componente integrale di MEAN, fornisce l'ambiente Javascript lato server basato su eventi. Node.js esegue Javascript utilizzando il motore V8 di Google Chrome. Le promesse di scalabilità di Node.js sono ciò che sta spingendo molte organizzazioni verso di essa.
Express.js è il framework di applicazioni Web più popolare per Node.js. Semplifica la creazione di API o qualsiasi altro tipo di livello aziendale lato server per applicazioni Web. È molto veloce per la sua natura minimalista, ma è anche abbastanza flessibile.
AngularJS, creato e gestito da numerosi ingegneri di Google, sta rapidamente diventando uno dei framework Javascript front-end più popolari a nostra disposizione.
Ci sono due ragioni per cui MEAN è così popolare e la nostra scelta per lo sviluppo di applicazioni in techXplorers:
Lo skillset è semplice. Un ingegnere che capisce JavaScript è bravo a passare a tutti i livelli.
La comunicazione tra il front-end, il business e i livelli di database avviene attraverso oggetti JSON, il che ci fa risparmiare molto tempo nella progettazione e nello sviluppo a livelli diversi.
Conclusione
In questo tutorial sulla pipeline di aggregazione MongoDB abbiamo dimostrato un modo conveniente per fornire ai ricercatori uno strumento in cui possono utilizzare i dati di produzione come set di dati esplorativi ed eseguire diversi insiemi di trasformazioni per analizzare e costruire modelli.
Siamo stati in grado di sviluppare e distribuire questa applicazione end-to-end in soli 3 giorni. Questa applicazione è stata sviluppata da un team di 4 ingegneri esperti (2 negli Stati Uniti e 2 in India) e un designer ed esperto di UX freelance che ci hanno aiutato con alcune riflessioni sulla progettazione dell'interfaccia. Ad un certo punto in futuro, mi prenderò il tempo per spiegare come funziona questo livello di collaborazione per creare prodotti fantastici in un tempo incredibilmente breve.
Ci auguriamo che tu possa trarre vantaggio dalla pipeline di aggregazione di MongoDB e mettere il potere nelle mani dei tuoi ricercatori che possono cambiare il mondo con le loro analisi e approfondimenti intelligenti.
Questa applicazione è live per essere giocata qui.