И снова про MS Excel
Однажды в моем инстаграме появились сразу несколько блоков рекламы об ознакомительных презентациях нескольких Российских онлайн-школ на тему "Аналитика данных на Python для чайников". Подумав о том, что можно с пользой для себя провести несколько часов и прокачать свои навыки по анализу, я записался и посетил данные курсы. Самое забавное, что практически все что я видел начиналось словами: "Давайте выбросим MS Excel (далее с вашего позволения просто - "эксель") и начнем работать на Python". Возмущению моему не было предела. В разумных рамках. Пройдя свой путь от разработчика (до черти как это назвать) и постоянно работая с данными, могу только привести в ответ фразу знаменитого персонажа Alf - "Вы просто не умеете их готовить".
![картинка взята с keddr.com картинка взята с keddr.com](https://webcf.waybackmachine.org/web/20210706153237/https://habrastorage.org/getpro/habr/upload_files/bdf/674/92d/bdf67492d56c001cf25453ef7aaa9daa.jpg)
Да, да, да. Можно хранить в "экселе" миллионы строк, пытаясь использовать его вместо базы данных (к слову говоря в одной из организаций по-началу мне пришлось воспользоваться этой "фичей"). Можно строить сложные вычисления на формулах (один из проектов доставшихся мне высчитывал Scheme Fee процентовку на "экселе"). Можно даже не изобретая "ардуино проекты" - написать код на VBA для эмуляции движения мыши. А можно просто использовать его там где он силен - в представлении табличных данных для анализа человеком. Об этом я и попытаюсь вкратце (в очередной 100500 раз) рассказать.
Прежде всего хочу начать с простого описания самих проблем когда приходится брать в руки швейцарские часы и забивать ими гвозди:
Ограниченность программных продуктов на рабочем месте
Необходимость для аналитиков в изучении новых продуктов (Power BI, Tableau и т.д.)
Простота использования - Нажми на кнопку и получишь результат (С) Технология
В тех страховых и финансовых компаниях которых я работал, не существовало возможности установить дополнительно программное обеспечение на компьютер или тонкий клиент. Вообще. Совсем. На последнем месте было невозможно запустить даже cmd. Но везде и всегда был установлен нелюбимый многими M$ Офис. Если бы мне раньше сказали что после Delphi/C#/Java/JavaScrip я скачусь до VBA, то возможно я бы плюнул человеку в глаза. Но жизнь расставила фишечки по-другому. Перейдя в сферу анализа данных, волшебных пузырьков отчетов после работы с Jasper Reports/Crystal reports/Business Objects и еще другими подобными продуктами я понял как устал выбирать пиксели рисуя красивые отчеты, чтобы будучи экспортированными в Excel у таблиц в буквальном смысле не "плыла крыша". Попав в одно из подразделений страхового брокера AON, мне предстояло анализировать ежемесячные выгрузки филиальных данных, на которых в последствии должен быть построен дашборд и продан как продукт другим страховщикам. Нас было трое. 4 потока новых ежемесячных страховых полюсов с 4х разных стран, использующих абсолютно разные программные продукты, нам нужно было проанализировать до следующего экстракта и после причесания данных (ETL) загрузить в корпоративное хранилище. Были выданы "ложка-вилка-нож" в виде SQL Server Management Studio и оно понеслось. Начав разгребать данные, у меня со временем появились свои наработки в виде SQL скриптов, но задалбывало копировать результаты выполнения в "эксельку" для анализа. В итоге начали появляться наброски кода на VBA + SQL для анализа. Уходя из компании через 2 года и оставляя законченный продукт в виде XLSM, 4 аналитика уже "шерстили" 28 ежемесячных выгрузок данных за 2 недели.
Следующим этапом в новой компании (мировой платежный провайдер) была автоматизация загрузок счетов от Visa & MasterCard. Представьте что в вашей компании имеются 40 банковских счетов. по каждому счету каждый день MasterCard выставляет счет. Специальная "тетенька" с высшим образованием в начале каждого месяца заходила на сайт компании и путем задания фильтра по счетам и различных кликов мышой скачивала 1200 документов. Которые в последствии нужно было агрегировать в один документ. И в данном случае снова на помощь пришел "эксель". Пока компания решала какой из серверов БД будет использоваться, пришлось сначала сливать и делать анализ в самих "экселевских" файлах, а затем был найден чудесным образом установленный на тонком клиенте - SQL CE. В последствии все перекочевало на нормальный SQL Server 2008R2 с небольшой доработкой VBA кода. А далее был продлен контракт с очень интересным для меня проектом.
Обрабатывая многомиллионные ежедневные транзакционные данные, нужно было посчитать Scheme Fee (микро платежи в пользу Visa/MasterCard начисляемые по различным параметрам как например - за каждые 1000 платежей по магнитной полоске, бесконтактно или Chip&Pin. За использование заморской карты в данном регионе и т.д.) и по результатам месячный активности выставить счета потребителям услуг (H&M, Tesco, Emirates Airlines, Apple, AliExpress etc). Вся забава начиналась тогда, когда тот или иной клиент запрашивал дополнительные данные по месячному срезу - например разбивку по типам карт или по дневному трафику. Вот тогда пошли в дело шаблоны на "эксельках". Для каждого клиента рисовался отдельный шаблон, который заполнялся из нужного датасета в процессе обработке на первой неделе каждого месяца. Хотите график? Без проблем! Что мы имели на выходе? XLS или PDF файл который направлялся менеджеру по работе с клиентом после предварительного просмотра девчатами из нашего отдела. Все что требовалось от них в случае изменения "% ставки клиента" - выгрузить таблицу в "эксельку", подправить данные, загрузить обратно и сгенерить новый счет нажав большую красивую кнопку и указав часть имени клиента по которому были произведены изменения. Все.
К чему такой длинный короткий опус? Когда мне говорят, что нужно "выбросить эксельку и взяться за анализ данных на Python купив наш курс" - я начинаю рыдать. Тащить миллионы строк данных на Python нет смысла - лучше обрабатывать это все на самом сервере (об этом кстати может быть отдельный опус с примерами "как я пытался перенести и оптимизировать расчет Scheme Fee с SQL Server на Python"). А презентацию конечных данных лучше производить уже в тот, живой формат с которым будут работать пользователи - XLS
Можно пытаться долго и красиво описать что я делал, но все это наверняка будет не совсем понятно без живого примера. Недавно я начал воссоздавать старый код в библиотеку "для сэбэ" для коммерческого использования. В качестве же подопытного кролика, я решил взять библиотеку sp_Blitz написанную Brent Ozar и его товарищами. Библиотека представляет набор хранимых процедур для SQL Server DBA. Меня начало напрягать - запускать хранимку и вытаскивать из кучи датасетов нужное. Поэтому в двух видео ниже показано как красиво (а для кого-то возможно и не очень) можно представлять данные по клику, используя "эксельку".
Про планы писать не буду, чтобы не удивлять. Но основываясь на собственном опыте, как мне кажется потенциал имеется.