Ich sage euch: man muß noch Chaos in sich haben, um einen tanzenden Stern gebären zu können (“Also sprach Zarathustra”, Friedrich Nietzsche)
Вас не тормозят привычные инструменты бизнес‑аналитики?
Коллеги-экономисты, вас не тормозят привычные инструменты бизнес-аналитики? Может быть пора уже попробовать встать на правильный путь, изучить Python и заняться более глубоким анализом социально‑экономических процессов, так, как это делается во всём мире?
Если сейчас Вы занимаетесь анализом своих данных, используя привычный инструментBusiness Intelligenceએ (BI), то пришло время спросить себя, а всем-ли я доволен? Нужно быть честным с собой. Всё в порядке, я обещаю, что никому не скажу. Большинство моих коллег‑экономистов из Высшей школы экономики и управленияЮУрГУ (НИУ) используют такие инструменты, как Excelએ, потому что это удобно. Они знают, что с ним делать, как управлять и чувствуют себя уверенно, убеждённые в надёжности его работы. Но, похоже, подошло время вырваться в этом вопросе из привычной зоны комфорта, переключившись на программный подход, например, такой как использование Pythonએ.
Зачем переключаться на программирование?
Я не люблю штампов, но в этой ситуации действительно «на соседском поле трава зеленее». Три причины, по которым Excelએ может нас ограничить при анализе данных и манипулировании ими:
Те, кто работает с большими наборами данных, встречаются с трудностями управления, когда они ограничены количеством строк и столбцов таблиц и скоростью поиска нужной информации. Кроме того, очень значительного времени требуют операции открытия файлов и загрузки данных, настолько значительного, что можно постареть. С каждым днём сбор данных становится всё более популярным, наборы данных становятся все больше и больше. Только программное управление позволит в дальнейшем оптимизировать организацию ваших данных в базах и позволит делать простой импорт во фреймы для анализа.
Даже если Excelએ и позволит вам выполнить работу, вы всё равно очень ограничены небольшим набором шаблонов для визуализации данных. Конечно, с вашей фантазией нужны более гибкие инструменты, чтобы донести свой взгляд на данные гораздо более эффективно, представляя их так, чтобы отразить смыслы, рассказать историю и оставаться под своим брендом.
Масштабная коллективная работа и совместное использование материалов или, как сейчас модно говорить — коллаборация, просто неудобна с Excelએ. Обычно, участники вынуждены обращаться к таким инструментам, как DropBoxએ, Google Дискએ, Яндекс дискએ или электронная почта для обмена файлами, что, опять же, связано с ограничениями. Именно программирование легко позволяет редактировать информацию, сотрудничать и обмениваться данными без особых усилий.
Переключайтесь на Python
Пора встать на верный путь и освоить современный язык программирования Python. Благодаря своей мощной инфраструктуре и гибкости, Pythonએ быстро набирает популярность при анализе и управлении данными. Итак, что же делает этот язык программирования таким привлекательным? Для начала — его просто выучить и так же просто использовать. Синтаксис языка ясен и прост для понимания, а его исключительно доступная и мощная поддержка фанатами делает его идеальным для начинающих. Кроме того, широкие возможности интеграции Python с различными ИТ-инструментами могут значительно повысить вашу продуктивность.
В чём же цимус?
В этой статье я хочу показать вам один из великолепных фреймворков Pythonએ, Dash от Plotly, который должен убедить в преимуществах программного подхода, убедить в том, что здесь всё не так сложно и «не боги горшки обжигают». Используя фреймворк от Plotly, вы получите великолепный инструмент визуализации, который позволит вам создавать, тестировать и развертывать красивые интерактивные приложения. Да, да, вы верно прочитали, полностью интерактивные приложения в свойм браузере, доступные всему миру. Потому что Dash построен поверх plotly.js и диаграммы по своей сути интерактивны. Кроме того, Dash позволяет строить полноценный интерфейс для управления отображением и добавлять дополнительные интерактивные элементы управления, такие как выпадающие меню, ползунки и кнопки, которыми можно оснастить свой код обработки данных.
Но. прежде чем мы начнём, посмотрите на эти великолепные web‑приложения, где вы изменяя состояние элементов в окне своего браузера, управляете картинкой, в том числе, и отображением актуальной информации в реальном времени:
Вот что такое настоящий интерактив в Web, который достигается с помощью предлагаемого инструмента.
Библиотека пользовательского интерфейса
Dash — библиотека пользовательского интерфейса для создания аналитических веб-приложений. Те, кто использует Python для анализа данных, исследования данных, визуализации, моделирования, управления приборами и отчетности, сразу же найдут применение для Dash.
Dash убийственно просто позволяет построить графический интерфейс в вашем коде анализа и обработки данных. Вот 43‑строчный пример приложения Dash, которое связывает выпадающее меню с графиком. Когда пользователь выбирает значение в раскрывающемся списке, код приложения динамически экспортирует данные из Google Financeએ в фрейм данных Pandas. Это приложение было написано всего в 43 строках кода, (посмотрите ). Все просто.
Код приложения Dash является декларативным, что позволяет легко создавать сложные приложения, содержащие множество интерактивных элементов. Вот пример с 5 элементами управления, 3 диаграммами и перекрестной фильтрацией. Для реализации этого приложения потребовалось всего около 160 строчек кода на Pythonએ.
Каждый эстетический элемент приложения настраивается: размер, позиционирование, цвета, шрифты. Приложения Dash создаются и публикуются в интернете, поэтому доступна полная мощность CSS. Вот пример интерактивного приложения для отчетов Dash, выполненного в фирменном стиле отчета Goldman Sachsએ, где без CSS просто невозможно.
Dash‑приложения просматриваются в веб-браузере, но вам не надо писать никаких Javascript или HTML. В Dash есть полный интерфейс Python для богатого набора интерактивных веб-компонентов.
Когда элемент управления изменяет своё состояние (например, вы открыли раскрывающийся список или перетаскиваете ползунок), декоратор Dash передаёт вашему коду Python новое значение элемента управления.
С этим новым значением ваша функция Python может делать все, что угодно: фильтровать DataFramePandas, сделать SQL‑запрос, запустить моделирование, выполнить расчет или начать эксперимент. Dash ожидает, что в результате ваша функция вернет какое-то новое свойство некоторого элемента в пользовательском интерфейсе, будь то новый график, новая таблица или новый элемент текста.
Например, вот простое Dash‑приложение, которое обновляет текстовое поле при взаимодействии с Graph элементом. Код приложения фильтрует данные в DataFramePandas, используя значение в текущей выбранной точке.
Следующее Dash‑приложение отображает мета-информацию о наркотиках при наведении курсора мыши на точки в Graph элементе. Код приложения также добавляет строки в Table компонент, когда элементы добавляются в мульти Dropdown элемент.
С помощью этих двух компонентов — абстракций Python и реактивных функциональных декораторов, Dash абстрагирует все технологии и протоколы, необходимые для создания интерактивного веб-приложения. Dash достаточно прост, чтобы вы могли связать пользовательский интерфейс вокруг своего кода Python после обеда.
Архитектура
Flask & React
Dash‑приложения — это веб-серверы, работающие под управлением Flask и передающие пакеты JSONએ в запросах HTTPએ. Внешний интерфейс Dash отображает компоненты с помощью React.jsએ, библиотеки пользовательского интерфейса Javascript, написанной и поддерживаемой Facebookએ.
Flask (веб-фреймворк)એ — это классно. Он с радостью принят сообществом Python и повсюду развернут в production. Базовый экземпляр Flask и все его настраиваемые свойства доступны разработчикам приложений Dash. Продвинутые смогут расширить приложения Dash с помощью богатого набора плагинов Flask.
Dash использует силу Flask и React, включая их в обработку данных Python аналитиками c не богатым опытом веб‑разработки.
От React.js к Python Dash-компонентам
Компоненты Dash — это классы Python, которые кодируют свойства и значения конкретного компонента React и сериализуются как JSON. Dash предоставляет набор инструментов для быстрого пакетирования компонентов React (написанных на Javascript) в качестве компонентов, которые могут быть использованы в Dash. Эта группа инструментов использует динамическое программирование для автоматического генерирования стандартных классов Python из аннотированных React propTypes. Полученные классы Python, представляющие компоненты Dash, удобны для пользователя: они поставляются с автоматической проверкой аргументов, записями документов и т. д.
Вот пример проверки динамически генерируемого аргумента:
и пример динамически генерируемых компонентов docstrings:
>>> help(dcc.Dropdown)
class Dropdown(dash.development.base_component.Component)
| A Dropdown component.
| Dropdown is an interactive dropdown element for selecting one or more
| items.
| The values and labels of the dropdown items are specified in the `options`
| property and the selected item(s) are specified with the `value` property.
|
| Use a dropdown when you have many options (more than 5) or when you are
| constrained for space. Otherwise, you can use RadioItems or a Checklist,
| which have the benefit of showing the users all of the items at once.
/
| Keyword arguments:
| - id (string; optional)
| - className (string; optional)
| - disabled (boolean; optional): If true, the option is disabled
| - multi (boolean; optional): If true, the user can select multiple values
| - options (list; optional)
| - placeholder (string; optional): The grey, default text shown when no option is selected
| - value (string | list; optional): The value of the input. If `multi` is false (the default)
| then value is just a string that corresponds to the values
| provided in the `options` property. If `multi` is true, then
| multiple values can be selected at once, and `value` is an
| array of items with values corresponding to those in the
| `options` prop.
|
| Available events: 'change
Полный набор HTML-тегов, например, div, img, table также отображается динамически с помощью React, и их классы Python доступны через dash_html_component библиотеку. Основной набор интерактивных компонентов, таких как, Dropdown, Graph, Slider будет поддерживаться командой Dash core через библиотеку dash_core_components. Обе эти библиотеки используют стандартную цепочку инструментов React-to-Dash с открытым исходным кодом, которую можно использовать, если вы захотите написать свою собственную библиотеку компонентов.
Вы не привязаны к стандартной библиотеке компонентов Dash. Библиотеки компонентов Dash импортируются отдельно от основной библиотеки. С помощью цепочки инструментов React-to-Dash вы можете легко написать или перенести React.компонент js в класс Python, который можно использовать в своём приложении Dash. Вот учебник по созданию собственных компонентов или команда Dash, которая всегда рада помочь и сделать для вас что-то абсолютно оригинальное.
Параллельные многопользовательские приложения
Состояние приложения Dash хранится во внешнем интерфейсе (т. е. в веб-браузере). Это позволяет использовать приложения Dash одновременно несколькими пользователями, создавая независимые сеансы при одновременном взаимодействии. Dash‑код приложения является функциональным и ваш код имеет доступ к значениям глобального состояния Python, однако, не может их изменить. Такой функциональный подход легко понять и проверить — это просто элементы управления и элементы отображения без побочных эффектов или состояний.
CSS и стили по умолчанию
CSS и стили по умолчанию не включаются в основную библиотеку для обеспечения модульности, независимого управления версиями и поощрения разработчиков приложений Dash к настройке индивидуального внешнего вида своих приложений. Команда Dash core поддерживает CSS ядра.
Визуализация данных
В Dash включён компонент Graph, который отображает диаграммы с помощью plotly.js. Plotly.js отлично подходит для Dash — декларативный, с открытым исходным кодом, быстрый и поддерживает полный спектр научных, финансовых и бизнес‑диаграмм. Plotly.js построен поверх D3.js (для качественной публикации, векторизованного экспорта изображений) и WebGLએ (для высокопроизводительной визуализации).
Компонент Graph имеет тот же синтаксис, что и библиотека с открытым кодом plotly.py, так что вы можете легко переключаться между ними. Компонент Graph Dash подключается к plotly.js через события js, и позволяет писать приложения, реагирующие на наведение курсора, щелчок мыши или выбор точки на графике.
Репозитарии с открытым исходным кодом
Вы можете проверить код самостоятельно в нескольких репозиториях.:
Dash — новинка в экосистеме Python, но концепции и мотивы Dash существуют на протяжении десятилетий в различных языках и приложениях.
Если вы хотите что-то лучшее, чем Excelએ, то ваша голова в нужном месте и работает в нужном направлении. И Dash, и Excel используют «реактивную» модель программирования. В Excel все ячейки обновляются автоматически при изменении в одной из них. Вот пример приложения Excel:
По аналогии с Excel в Dash вместо ячеек у нас есть множество управляющих веб-компонентов, таких как слайдеры, ячейки данных, выпадающие списки и графики. Вместо того чтобы писать сценарии, как в Excel или VBA, мы пишем код Python. Вот то же самое приложение для работы с электронными таблицами, переписанное в Dash:
Мне очень нравится этот пример. Excel по-прежнему царит в финансах и даже в технических вычислениях. Я не думаю, что доминирование Excel — это вопрос технических возможностей. В конце концов, есть огромное количество программистов электронных таблиц, которые уже знают нюансы Excelએ, VBAએ и даже SQLએ.
Более того, электронные таблицы Excel частенько легче распространить, чем программы Python, а ячейки Excel легче редактировать, чем аргументы командной строки.
Тем не менее, моделирование в Excel имеет хорошо известные ограничения: таблицы часто перерастают сами себя. Они становятся слишком большими или слишком хрупкими для миграции в производственную среду, для рецензирования, тестирования и обслуживания. Помните опечатку 2013 года про экономию в Excel?
Если в бизнес-аналитике вы полагаетесь на язык программирования R, то вам повезло. Shiny — среда для генерации веб-приложений на чистом R великолепна! Вы даже можете создавать интерактивную графику с библиотекой Plotly’s R Shiny. Dash и Shiny похожи, но Dash не стремится быть точной копией Shiny. Идиомы и философии между Python и R достаточно различны, чтобы гарантировать иной синтаксис.
Если вы программируете в MATLAB, то можете быть знакомы с руководством по библиотеке пользовательского интерфейса MATLAB «GUIDE». Mathworksએ был одним из подлинных новаторов в области технических вычислений — «GUIDE» было написано в 2004 году, 15 лет назад!
Если вы работаете с базами данных, то, возможно, используете Tableau или другие похожие инструменты бизнес-аналитики. Tableau невероятен. Он оправдал новые ожидания в отрасли — конечные пользователи должны иметь автономию и инструменты для исследования данных своей организации. Он помог популяризировать концепции «детализации» и перекрестной фильтрации.
Dash дополняет инструменты бизнес-аналитики, подобные этим. Такие инструменты отлично работают на структурированных данных. Но когда дело доходит до преобразования данных, то трудно превзойти широту и гибкость языков программирования и сообществ, таких как Python. Dash абстрагирует от множества сложностей в создании пользовательских интерфейсов, позволяя вам создать красивый внешний интерфейс для манипулирования пользовательской базы данных при анализе.
И наконец, я хотел бы сказать несколько добрых слов в пользу Jupyter. Виджеты Jupyter предоставляют действительно хороший ход в рамках интерфейса ноутбука. Вы можете добавить ползунки на свои графики в записных книжках Jupyter, используя его локально.
Виджеты в Dash похожи на виджеты в Jupyter. В Jupyter Notebooks вы можете добавлять виджеты прямо рядом со своим кодом. В Dash элементы управления и приложения хранятся отдельно от кода. Dash больше ориентирован на разделяемые приложения, чем на разделяемый код и ноутбуки. Вы всегда можете смешивать и сочетать инструменты и писать свои Dash-приложения в среде Jupyter Notebook.
Честь и хвала проекту nteract, который действительно снижает барьер для входа на ноутбуки Python и Jupyter, заключая Jupyter Notebook и настольное приложение.
Я надеюсь, что Dash облегчит использование Python для ваших проектов, связанных с анализом данных. Используя одни и те же функциональные и реактивные принципы, написать приложение для Dash почти так же просто, как написать аналитическую таблицу. Но это, вне всяких сомнений, более мощно и презентабельно.
Дополнительные ресурсы и ссылки
Вся документация Dash по адресу https://plot.ly/dash;
Вся наша работа с открытым исходным кодом находится на GitHub по адресу https://github.com/plotly.