Платформа бизнес-аналитики: руководство по использованию конвейера агрегации MongoDB
Опубликовано: 2022-03-11Использование данных для ответа на интересные вопросы — это то, чем заняты исследователи в современном мире, управляемом данными. Учитывая огромные объемы данных, задача их обработки и анализа является серьезной; особенно для статистиков или аналитиков данных, у которых нет времени вкладывать средства в изучение платформ бизнес-аналитики или технологий, предоставляемых экосистемой Hadoop, Spark или базами данных NoSQL, которые помогли бы им анализировать терабайты данных за считанные минуты.
Сегодня нормой для исследователей или статистиков является построение своих моделей на подмножествах данных в аналитических пакетах, таких как R, MATLAB или Octave, а затем передача формул и шагов обработки данных ИТ-командам, которые затем создают решения для производственной аналитики.
Одна из проблем с этим подходом заключается в том, что если исследователь понимает что-то новое после запуска своей модели на всех данных в производстве, процесс должен повторяться снова и снова.
Что, если бы исследователь мог работать с разработчиком MongoDB, проводить анализ всех производственных данных и использовать их в качестве исследовательского набора данных без необходимости изучать какие-либо новые технологии, сложные языки программирования или даже SQL?
Если мы эффективно используем конвейер агрегации MongoDB и MEAN, мы можем достичь этого за достаточно короткое время. С помощью этой статьи и кода, доступного здесь, в этом репозитории GitHub, мы хотели бы показать, как легко этого добиться.
Большинство инструментов бизнес-аналитики, представленных на рынке, предоставляют исследователям возможность импортировать наборы данных из NoSQL и других технологий больших данных в инструмент, после чего преобразования и анализ выполняются внутри инструмента. Но в этом руководстве по бизнес-аналитике мы используем возможности конвейера агрегации MongoDB, не извлекая данные из MongoDB, а исследователь использует простой интерфейс для выполнения всех видов преобразований в производственной системе больших данных.
Конвейер агрегации 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 }
С помощью этих данных мы хотим выяснить (в среднем), какова разница между окладами доцентов и профессоров по штатам. Тогда доцент может понять, в каком штате он ценится ближе к профессору по зарплате.
Чтобы ответить на этот вопрос, исследователю сначала нужно отсеять плохие данные из коллекции, потому что в нашем наборе данных есть несколько строк/документов, где средняя зарплата является нулевой или пустой строкой. Чтобы выполнить эту очистку набора данных, мы добавим следующий этап:
{$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}}
Из этого набора данных видно, что Айдахо, Канзас и Западная Вирджиния — это три штата, где разница в зарплатах доцентов и профессоров наименьшая по сравнению со всеми другими штатами.
Полный конвейер агрегации, сгенерированный для этого, показан ниже:
[ {$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}} ]
Результирующий набор данных, который отображается, выглядит следующим образом. Исследователи также могут экспортировать эти результаты в CSV, чтобы составить отчет о них с помощью пакетов визуализации, таких как Tableau, или с помощью простых диаграмм Microsoft Excel.
Средняя заработная плата по типу занятости
Другой пример, который мы рассмотрим в этой статье, касается набора данных, полученного с сайта 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, чтобы отбросить все объекты, не относящиеся к «Финансовому управлению»:
{$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}} ]
Запуск конвейера агрегации должен привести к следующим результатам:
Строительные блоки
Для создания этого приложения бизнес-аналитики мы использовали MEAN, представляющий собой комбинацию MongoDB, ExpressJS, AngularJS и NodeJS.
Как вы, возможно, уже знаете, MongoDB — это база данных документов без схемы. Несмотря на то, что размер каждого документа, который он хранит, ограничен 16 МБ, его гибкость и производительность, а также предоставляемая им структура конвейера агрегации делают MongoDB идеально подходящим для этого инструмента. Начать работу с MongoDB очень просто благодаря обширной документации.
Node.js, еще один неотъемлемый компонент MEAN, предоставляет серверную среду Javascript, управляемую событиями. Node.js запускает Javascript, используя движок Google Chrome V8. Обещания масштабируемости Node.js — это то, что побуждает к нему многие организации.
Express.js — самая популярная среда веб-приложений для Node.js. Это упрощает создание API или любого другого бизнес-уровня на стороне сервера для веб-приложений. Он очень быстрый из-за своего минималистского характера, но при этом достаточно гибкий.
AngularJS, созданный и поддерживаемый несколькими инженерами Google, быстро становится одним из самых популярных интерфейсных фреймворков Javascript, доступных в нашем распоряжении.
Есть две причины, по которым MEAN так популярен и почему мы выбрали его для разработки приложений в techXplorers:
Набор навыков прост. Инженер, понимающий JavaScript, может работать на всех уровнях.
Связь между внешним интерфейсом, бизнесом и уровнями базы данных происходит через объекты JSON, что значительно экономит время при проектировании и разработке на разных уровнях.
Заключение
В этом учебном пособии по конвейеру агрегации MongoDB мы продемонстрировали экономичный способ предоставить исследователям инструмент, с помощью которого они могут использовать производственные данные в качестве исследовательских наборов данных и запускать различные наборы преобразований для анализа и построения моделей.
Мы смогли полностью разработать и развернуть это приложение всего за 3 дня. Это приложение было разработано командой из 4 опытных инженеров (2 в США и 2 в Индии), а также дизайнера и внештатного эксперта по UX, который помог нам с некоторыми мыслями по дизайну интерфейса. В какой-то момент в будущем я найду время, чтобы объяснить, как этот уровень сотрудничества позволяет создавать потрясающие продукты в невероятно короткие сроки.
Мы надеемся, что вы воспользуетесь преимуществами конвейера агрегации MongoDB и передадите власть своим исследователям, которые могут изменить мир своим умным анализом и идеями.
Это приложение живое, чтобы играть здесь.