Применение методов решения проблем в реальном мире
На прошлой неделе я использовал скрипт 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. Результат выглядит так:
Я смогу использовать расширенную версию этого скрипта для автоматического заполнения базы данных нашим ежедневным ассортиментом продуктов, что очень круто.