Однажды в моем инстаграме появились сразу несколько блоков рекламы об ознакомительных презентациях нескольких Российских онлайн-школ на тему "Аналитика данных на Python для чайников". Подумав о том, что можно с пользой для себя провести несколько часов и прокачать свои навыки по анализу, я записался и посетил данные курсы. Самое забавное, что практически все что я видел начиналось словами: "Давайте выбросим MS Excel (далее с вашего позволения просто - "эксель") и начнем работать на Python". Возмущению моему не было предела. В разумных рамках. Пройдя свой путь от разработчика (до черти как это назвать) и постоянно работая с данными, могу только привести в ответ фразу знаменитого персонажа Alf - "Вы просто не умеете их готовить".

картинка взята с keddr.com
картинка взята с 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. Меня начало напрягать - запускать хранимку и вытаскивать из кучи датасетов нужное. Поэтому в двух видео ниже показано как красиво (а для кого-то, возможно, и не очень) можно представлять данные по клику, используя "эксельку".

Про планы писать не буду, чтобы не удивлять. Но, основываясь на собственном опыте, как мне кажется, потенциал имеется.

Update: Пост не о том что эксель [не] умеет обрабатывать большие данные и это нужно делать. Пост о том как можно красиво вытаскивать подготовленные данные и представлять их клиенту чтобы он не растерялся и знал куда смотреть. В первом видео возможно сумбурно, но показан вариант применения.