И снова про MS Excel
Однажды в моем инстаграме появились сразу несколько блоков рекламы об ознакомительных презентациях нескольких Российских онлайн-школ на тему «Аналитика данных на Python для чайников». Подумав о том, что можно с пользой для себя провести несколько часов и прокачать свои навыки по анализу, я записался и посетил данные курсы. Самое забавное, что практически все что я видел начиналось словами: «Давайте выбросим MS Excel (далее с вашего позволения просто — «эксель») и начнем работать на Python». Возмущению моему не было предела. В разумных рамках. Пройдя свой путь от разработчика (до черти как это назвать) и постоянно работая с данными, могу только привести в ответ фразу знаменитого персонажа Alf — «Вы просто не умеете их готовить».
картинка взята с keddr.comДа, да, да. Можно хранить в «экселе» миллионы строк, пытаясь использовать его вместо базы данных (к слову говоря в одной из организаций по-началу мне пришлось воспользоваться этой «фичей»). Можно строить сложные вычисления на формулах (один из проектов доставшихся мне высчитывал Scheme Fee процентовку на «экселе»). Можно даже не изобретая «ардуино проекты» — написать код на VBA для эмуляции движения мыши. А можно просто использовать его там где он силен — в представлении табличных данных для анализа человеком. Об этом я и попытаюсь вкратце (в очередной 100500 раз) рассказать.
Прежде всего хочу начать с простого описания самих проблем когда приходится брать в руки швейцарские часы и забивать ими гвозди:
Ограниченность программных продуктов на рабочем месте
Необходимость для аналитиков в изучении новых продуктов (Power BI, Tableau и т.д.)
Простота использования — Нажми на кнопку и получишь результат © Технология
В тех страховых и финансовых компаниях которых я работал, не существовало возможности установить дополнительно программное обеспечение на компьютер или тонкий клиент. Вообще. Совсем. На последнем месте было невозможно запустить даже cmd. Но везде и всегда был установлен нелюбимый многими M$ Офис. И тут напрашивается старый анекдот для женщин полицейских:
Если на вас напал насильник, вы должны попытаться защититься дубинкой. Если это не помогает, необходимо сделать три предупредительных выстрела из револьвера в воздух. Если это не помогает, расслабьтесь и попытайтесь получить удовольствие
Если бы мне раньше сказали что после Delphi/C#/Java/JavaScript я скачусь до 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. Меня начало напрягать — запускать хранимку и вытаскивать из кучи датасетов нужное. Поэтому в двух видео ниже показано как красиво (а для кого-то возможно и не очень) можно представлять данные по клику, используя «эксельку».
Про планы писать не буду, чтобы не удивлять. Но основываясь на собственном опыте, как мне кажется потенциал имеется.