Применение методов решения проблем в реальном мире

На прошлой неделе я использовал скрипт Google Apps для автоматизации части нашего рабочего процесса в Jupiter Disco - в частности, анализировал ежедневный отчет о продажах, который наша система точек продаж («POS») отправляет каждый день, и заполнял нашу основную электронную таблицу продаж данными.

Скрипт отлично работает - больше не нужно копировать и вставлять данные из одного места в другое - но он также экономит нам всего пять-десять минут в день и не создает новый поток данных, который мы можем использовать для улучшения бизнеса.

Что я действительно хотел исследовать, так это создание аналогичной автоматизации с набором продуктов (PMix), который прилагается к этому электронному письму в виде файла .htm. В настоящее время мы не отслеживаем PMix на ежедневной основе, в основном потому, что это очень раздражающая, трудоемкая и повторяющаяся ежедневная задача.

Пытаясь запустить этот автоматизированный процесс, я столкнулся с проблемой, которая была до странности знакомой.

Если вы, как и я, ищете работу в качестве специалиста по данным, инженера-программиста, веб-разработчика, инженера по обработке данных и т. HackerRank или аналогичный сайт - Codewars, LeetCode, Coderbyte, Project Euler и т. Д.

Проблемы могут отклоняться в сторону абстрактности, по крайней мере для людей, не связанных с информатикой, таких как я, и часто требуют навигации или преобразования массива, в чем я и оказался сегодня.

Проблема

Как я обсуждал на прошлой неделе, библиотеки, имеющиеся в нашем распоряжении для синтаксического анализа HTML в скрипте Google Apps, довольно ограничены, поэтому мое взломанное решение заключалось в том, чтобы создать массив с каждой строкой в ​​качестве элемента, а затем вытащить соответствующее значение в таблицу Google. по индексу.

Это работает с хорошо структурированной страницей, такой как ежедневный отчет о продажах, но не для отчета PMix, поскольку гости будут заказывать разные товары от ночи к ночи, а это означает, что разные товары будут отображаться в разных строках.

Использование индекса недостаточно динамично, и мы действительно хотим воссоздать формат таблицы, в которой доставляется отчет. Отчет отправляется в виде вложения и выглядит следующим образом (это всего лишь снимок экрана):

И HTML-код этого же вложения выглядит так:

Не вдаваясь в подробности этого поста, как я определенно сделал на прошлой неделе, процесс автоматизации ежедневной загрузки этого вложения Gmail в Google Sheet более или менее выглядит следующим образом:

  • Возьмите приложение о ассортименте из ежедневного отчета о продажах.
  • Преобразуйте HTML в строку, которую мы можем проанализировать.
  • Разделите строку на массив строк - каждый элемент представляет собой отдельную строку HTML - и удалите все теги HTML.
  • Структурируйте массив в табличном формате, напоминающем исходный документ.
  • Заполните Google Таблицу структурированными данными.

Как оказалось, вся работа над массивами и алгоритмами на HackerRank действительно помогла, когда дело дошло до четвертого шага. Я предоставлю свой код через минуту, но если вы хотите его попробовать, вопрос можно сформулировать следующим образом:

Учитывая массив элементов, следующих по согласованному шаблону (например, каждый третий элемент - это продукт, каждый пятый элемент - это количество, а каждый седьмой элемент - это цена, вплоть до n-го элемента, который представляет последний элемент наблюдения), создайте новый массив, который организован таким образом, что все элементы nth выстраиваются друг с другом по столбцам и могут быть добавлены строка за строкой в ​​электронную таблицу.

Чтобы поставить более точную точку на нем, вам необходимо создать массив массивов, и каждый вложенный массив будет содержать x элементов, где x - общее количество точек данных для каждого наблюдения.

Решение

Эта проблема, вероятно, была бы отнесена к категории легкая в HackerRank, но это также забавный, реальный пример необходимости использовать тот самый набор инструментов, который мы практикуем каждый день.

В отчете о ассортименте продукции за 2019–09–18 на Jupiter Disco исходный массив содержал 288 элементов, которые повторяются через каждые девять элементов (так что окончательный массив будет содержать 288/9 = 32 массива).

Как бы вы ее решили?

Моя функция была:

Я уверен, что есть более эффективный способ решения этой проблемы, поделитесь своим ниже, если он у вас есть!

Остальная часть функции аналогична той, что была на прошлой неделе - все, что мне нужно сделать, это добавить каждый из этих вложенных массивов в электронную таблицу Google Sheets. Результат выглядит так:

Я смогу использовать расширенную версию этого скрипта для автоматического заполнения базы данных нашим ежедневным ассортиментом продуктов, что очень круто.