Platforma Business Intelligence: samouczek z wykorzystaniem potoku agregacji MongoDB

Opublikowany: 2022-03-11

Wykorzystywanie danych do odpowiadania na interesujące pytania jest tym, czym zajmują się badacze w dzisiejszym świecie opartym na danych. Biorąc pod uwagę ogromne ilości danych, wyzwanie związane z ich przetwarzaniem i analizą jest duże; w szczególności dla statystyków lub analityków danych, którzy nie mają czasu na inwestowanie w naukę platform lub technologii Business Intelligence dostarczanych przez bazy danych ekosystemu Hadoop, Spark lub NoSQL, które pomogłyby im analizować terabajty danych w ciągu kilku minut.

Obecnie normą jest, że badacze lub statystycy budują swoje modele na podzbiorach danych w pakietach analitycznych, takich jak R, MATLAB lub Octave, a następnie przekazują formuły i etapy przetwarzania danych zespołom IT, które następnie tworzą rozwiązania do analizy produkcyjnej.

Jednym z problemów związanych z tym podejściem jest to, że jeśli badacz zda sobie sprawę z czegoś nowego po uruchomieniu swojego modelu na wszystkich danych w produkcji, proces musi zostać powtórzony od nowa.

Co by było, gdyby badacz mógł współpracować z deweloperem MongoDB i przeprowadzić analizę wszystkich danych produkcyjnych i wykorzystać je jako swój eksploracyjny zbiór danych, bez konieczności uczenia się jakiejkolwiek nowej technologii lub skomplikowanych języków programowania, a nawet SQL?

mongodb i wywiad biznesowy

Jeśli efektywnie wykorzystamy Agregation Pipeline i MEAN MongoDB, możemy to osiągnąć w rozsądnie krótkim czasie. Poprzez ten artykuł i kod, który jest dostępny w tym repozytorium GitHub, chcielibyśmy pokazać, jak łatwo jest to osiągnąć.

Większość narzędzi Business Intelligence dostępnych na rynku umożliwia badaczom importowanie zestawów danych z NoSQL i innych technologii Big Data do narzędzia, a następnie transformacje i analizy są wykonywane wewnątrz narzędzia. Jednak w tym samouczku dotyczącym analizy biznesowej wykorzystujemy moc MongoDB Aggregation Pipeline bez wyciągania danych z MongoDB, a badacz używa prostego interfejsu do wykonywania wszelkiego rodzaju przekształceń w produkcyjnym systemie Big Data.

Potok agregacji MongoDB dla analizy biznesowej

Mówiąc najprościej, potok agregacji MongoDB to platforma do wykonywania serii transformacji danych w zestawie danych. W pierwszym etapie jako dane wejściowe pobierany jest cały zbiór dokumentów, a od tego momentu każdy kolejny etap przyjmuje jako dane wejściowe zestaw wyników poprzedniej transformacji i wytwarza przekształcone dane wyjściowe.

Istnieje 10 typów przekształceń, których można użyć w potoku agregacji:

  • $geoNear: wyświetla dokumenty w kolejności najbliższej do najdalszej od określonego punktu

  • $match: filtruje rekord wejściowy ustawiony według podanych wyrażeń

  • $project: tworzy zestaw wyników z podzbiorem pól wejściowych lub pól obliczanych

  • $redact: ogranicza zawartość dokumentów na podstawie informacji z dokumentu

  • $unwind: pobiera pole tablicy zawierające n elementów z dokumentu i zwraca n dokumentów z każdym elementem dodanym do każdego dokumentu jako pole zastępujące tę tablicę

  • $group: grupuje według jednej lub więcej kolumn i wykonuje agregacje na innych kolumnach

  • $limit: pobiera pierwsze n dokumentów z zestawów wejściowych (przydatne do obliczeń percentyla itp.)

  • $skip: ignoruje pierwsze n dokumentów z zestawu wejściowego

  • $sort: sortuje wszystkie dokumenty wejściowe według podanego obiektu

  • $out: bierze wszystkie dokumenty zwrócone z poprzedniego etapu i zapisuje je w kolekcji

Z wyjątkiem pierwszego i ostatniego na powyższej liście, nie ma reguł dotyczących kolejności, w jakiej te przekształcenia mogą być stosowane. $out należy użyć tylko raz i na końcu, jeśli chcemy zapisać wynik potoku agregacji do nowej lub istniejącej kolekcji. $geoNear może być używany tylko jako pierwszy etap potoku.

Aby ułatwić zrozumienie, przejrzyjmy dwa zestawy danych i dwa pytania dotyczące tych zestawów danych.

Różnica w wynagrodzeniach według przeznaczenia

Aby wyjaśnić moc potoku agregacji MongoDB, pobraliśmy zbiór danych, który zawiera informacje o wynagrodzeniu personelu dydaktycznego uniwersyteckiego dla całych Stanów Zjednoczonych. Dane te są dostępne na stronie nces.ed.gov. Posiadamy dane z 7598 instytucji o następujących polach:

 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 }

Na podstawie tych danych chcemy dowiedzieć się (średnio) jaka jest różnica między wynagrodzeniami profesorów nadzwyczajnych i profesorów według stanu. Wtedy docent może zdać sobie sprawę, w jakim stanie jest ceniony bliżej profesora pod względem wynagrodzenia.

Aby odpowiedzieć na to pytanie, badacz musi najpierw usunąć złe dane z kolekcji, ponieważ w naszym zbiorze danych znajduje się kilka wierszy/dokumentów, w których średnia pensja jest ciągiem zerowym lub pustym. Aby wykonać to czyszczenie zbioru danych, dodamy następujący etap:

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

Spowoduje to odfiltrowanie wszystkich jednostek, które mają wartości łańcuchowe w tych dwóch polach. W MongoDB każdy typ jest reprezentowany przez unikalny numer - w przypadku łańcuchów numer typu to 2.

Ten zestaw danych jest dobrym przykładem, ponieważ w rzeczywistej analizie danych inżynierowie często mają również do czynienia z czyszczeniem danych.

Teraz, gdy mamy już stabilne dane, możemy przejść do następnego etapu, w którym będziemy uśredniać pensje według stanu:

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

Musimy tylko przeprowadzić projekcję powyższego zestawu wyników i uzyskać różnicę w średnich pensjach stanowych, jak pokazano poniżej w Etapie 3 naszego potoku:

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

Powinno to dać nam średnią różnicę w pensjach na poziomie stanu między profesorami i docentami ze zbioru danych 7519 instytucji edukacyjnych w całych Stanach Zjednoczonych. Aby interpretacja tych informacji była jeszcze wygodniejsza, zróbmy proste sortowanie, abyśmy wiedzieli, który stan ma najmniejszą różnicę, dodając etap $sort:

 {$sort: { SalaryDifference: 1}}

Z tego zestawu danych wynika, że ​​Idaho, Kansas i Zachodnia Wirginia to trzy stany, w których różnica w wynagrodzeniach profesorów nadzwyczajnych i profesorów jest najmniejsza w porównaniu ze wszystkimi innymi stanami.

Wygenerowany w tym celu pełny potok agregacji pokazano poniżej:

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

Wynikowy zestaw danych, który się pojawi, wygląda tak. Badacze mogą również wyeksportować te wyniki do pliku CSV, aby opisać je za pomocą pakietów wizualizacyjnych, takich jak Tableau, lub za pomocą prostych wykresów Microsoft Excel.

Przykład zbioru danych mongodb

Średnia płaca według rodzaju zatrudnienia

Innym przykładem, który omówimy w tym artykule, jest zbiór danych uzyskany z www.data.gov. Biorąc pod uwagę informacje o płacach wszystkich stanowych i lokalnych organizacji rządowych w Stanach Zjednoczonych Ameryki, chcielibyśmy obliczyć średnią pensję pełnoetatowych i niepełnoetatowych pracowników „Administracji Finansowej” w każdym stanie.

Zestaw danych został zaimportowany, w wyniku czego powstały dokumenty z 1975 r., w których każdy dokument jest zgodny z tym schematem:

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

Odpowiedź na to pytanie może pomóc pracownikowi administracji finansowej w wyborze najlepszego stanu do przeprowadzki. Dzięki naszemu narzędziu opartemu na potoku MongoDB można to zrobić dość łatwo:

W pierwszym etapie przefiltruj kolumnę GovernmentFunction, aby odrzucić wszystkie podmioty niebędące „Administracją finansową”:

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

W kolejnym etapie samouczka pogrupujemy podmioty według stanów i obliczymy średnie wynagrodzenia w pełnym i niepełnym wymiarze godzin w każdym stanie:

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

Na koniec posortujemy wyniki od stanów z wyższymi opłatami do stanów o niższych opłatach:

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

Powinno to umożliwić narzędziu wygenerowanie następującego potoku agregacji:

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

Uruchomienie potoku agregacji powinno dać takie wyniki:

Potok agregacji mongodb

Cegiełki

Do budowy tej aplikacji business intelligence wykorzystaliśmy MEAN, który jest kombinacją MongoDB, ExpressJS, AngularJS i NodeJS.

ŚREDNIA Wywiad gospodarczy

Jak być może już wiesz, MongoDB to nieschematyczna baza danych dokumentów. Mimo że każdy dokument, który przechowuje, ma rozmiar ograniczony do 16 MB, jego elastyczność i wydajność wraz ze strukturą potoku agregacji, którą zapewnia, sprawia, że ​​MongoDB idealnie pasuje do tego narzędzia. Rozpoczęcie pracy z MongoDB jest bardzo łatwe dzięki obszernej dokumentacji.

Node.js, kolejny integralny składnik MEAN, zapewnia sterowane zdarzeniami środowisko Javascript po stronie serwera. Node.js uruchamia Javascript przy użyciu silnika V8 przeglądarki Google Chrome. Obietnice skalowalności Node.js są tym, co kieruje do niego wiele organizacji.

Express.js to najpopularniejszy framework aplikacji internetowych dla Node.js. Ułatwia tworzenie interfejsów API lub innego rodzaju warstwy biznesowej po stronie serwera dla aplikacji internetowych. Jest bardzo szybki ze względu na swój minimalistyczny charakter, ale jest też dość elastyczny.

AngularJS, stworzony i utrzymywany przez wielu inżynierów Google, szybko staje się jednym z najpopularniejszych front-endowych frameworków Javascript dostępnych do naszej dyspozycji.

Istnieją dwa powody, dla których MEAN jest tak popularny i nasz wybór do tworzenia aplikacji w techXplorers:

  • Zestaw umiejętności jest prosty. Inżynier, który rozumie JavaScript, dobrze radzi sobie ze wszystkimi warstwami.

  • Komunikacja między warstwami front-endu, biznesu i bazy danych odbywa się za pośrednictwem obiektów JSON, co oszczędza nam dużo czasu na projektowaniu i rozwoju na różnych warstwach.

Wniosek

W tym samouczku dotyczącym potoku agregacji MongoDB zademonstrowaliśmy opłacalny sposób udostępnienia naukowcom narzędzia, w którym mogą używać danych produkcyjnych jako eksploracyjnych zestawów danych i uruchamiać różne zestawy przekształceń w celu analizowania i konstruowania modeli.

Udało nam się opracować i wdrożyć tę aplikację w całości w zaledwie 3 dni. Ta aplikacja została opracowana przez zespół 4 doświadczonych inżynierów (2 w USA i 2 w Indiach) oraz projektanta i niezależnego eksperta UX, który pomaga nam w przemyśleniach na temat projektowania interfejsu. W pewnym momencie w przyszłości poświęcę czas, aby wyjaśnić, jak działa ten poziom współpracy, aby tworzyć niesamowite produkty w niewiarygodnie krótkim czasie.

Mamy nadzieję, że skorzystasz z potoku agregacji MongoDB i oddasz władzę w ręce badaczy, którzy mogą zmienić świat dzięki swoim sprytnym analizom i spostrzeżeniom.

Ta aplikacja jest dostępna na żywo tutaj.