Графики водопада (или диаграммы) часто используются для демонстрации кумулятивного изменения определенного значения с течением времени. В качестве альтернативы они могут использовать фиксированные категории (например, определенные события) вместо времени. Таким образом, такого рода сюжет может быть очень полезен при проведении презентаций для заинтересованных сторон бизнеса, поскольку мы можем легко показать, например, эволюцию доходов нашей компании/клиентской базы с течением времени.
В этой статье мы покажем вам, как легко создавать водопадные диаграммы на Python. Для этого мы будем использовать 3 разные библиотеки.
Настройка и данные
Как всегда, мы начинаем с импорта нескольких библиотек.
import pandas as pd # plotting import matplotlib.pyplot as plt import waterfall_chart from waterfall_ax import WaterfallChart import plotly.graph_objects as go # settings plt.rcParams[«figure.figsize»] = (16, 8)
Затем мы готовим вымышленные данные для нашего игрушечного примера. Давайте предположим, что мы являемся специалистом по обработке данных в стартапе, который создал какое-то мобильное приложение. Чтобы подготовиться к следующим общим собраниям, нас попросили предоставить график, показывающий пользовательскую базу нашего приложения в 2022 году. Чтобы представить полную историю, мы хотим принять во внимание количество пользователей на конец 2021 года и ежемесячный подсчет в 2022 году. Для этого мы готовим следующий фрейм данных:
Minecraft waterfalls are so satisfying now
df = pd.DataFrame( data= < «time»: [«2021 end», «Jan», «Feb», «Mar», «Apr», «May», «Jun», «Jul», «Aug», «Sep», «Oct», «Nov», «Dec»], «users»: [100, 120, 110, 150, 160, 190, 240, 200, 230, 240, 250, 280, 300] >)
Подход №1: waterfall_ax
Начнем с самого простого подхода. Должен сказать, я был очень удивлен, обнаружив, что Microsoft разработала небольшую библиотеку на основе matplotlib для создания каскадных графиков. Библиотека называется waterfall_ax , и вы можете прочитать о ней здесь. Чтобы создать график с использованием нашего набора данных, нам нужно запустить следующее:
fig, ax = plt.subplots(1, 1, figsize=(16, 8)) waterfall = WaterfallChart(df[«users»].to_list()) wf_ax = waterfall.plot_waterfall(ax=ax, title=»# of users in 2022″)
Одна вещь, которую следует отметить в библиотеке, заключается в том, что она работает со списками Python и на самом деле не поддерживает кадры данных pandas . Поэтому мы должны использовать метод to_list при указании столбца со значениями.
Хотя сюжет, безусловно, презентабелен, мы можем добиться немного большего, включив больше информации и заменив названия шагов по умолчанию. Мы делаем это в следующем фрагменте.
fig, ax = plt.subplots(1, 1, figsize=(16, 8)) waterfall = WaterfallChart( df[«users»].to_list(), step_names=df[«time»].to_list(), metric_name=»# users», last_step_label=»now» ) wf_ax = waterfall.plot_waterfall(ax=ax, title=»# of users in 2022″)
Подход №2: waterfall
Немного более сложный подход использует библиотеку waterfall. Чтобы создать график с использованием этой библиотеки, нам нужно добавить столбец, содержащий дельты, то есть различия между шагами.
Мы можем легко добавить новый столбец во фрейм данных и вычислить дельту, используя метод diff . Мы заполняем значение NA в первой строке количеством пользователей с конца 2021 года.
df_1 = df.copy() df_1[«delta»] = df_1[«users»].diff().fillna(100) df_1
Затем мы можем использовать следующую однострочную строку для создания графика:
waterfall_chart.plot(df_1[«time»], df_1[«delta»])
waterfall также предлагает возможность настройки сюжета. Мы делаем это в следующем фрагменте.
waterfall_chart.plot( df_1[«time»], df_1[«delta»], threshold=0.2, net_label=»now», y_lab=»# users», Title=»# of users in 2022″ );
Хотя большинство дополнений говорят сами за себя, стоит упомянуть, что делает аргумент threshold . Он выражается в процентах от начального значения и группирует все изменения меньше указанного процента в новую категорию. По умолчанию эта категория называется other , но мы можем настроить ее с помощью аргумента other_label .
По сравнению с предыдущим графиком мы видим, что наблюдения с изменением 10 сгруппированы вместе: 3 раза +10 и 1 раз -10 дают чистую +20.
Эта функция группировки может быть полезна, когда мы хотим скрыть довольно много индивидуально незначительных значений. Например, такая логика группировки используется в библиотеке shap при построении значений SHAP на каскадном графике.
Подход № 3: plotly
В то время как в первых двух подходах использовались довольно нишевые библиотеки, последний будет использовать библиотеку, с которой вы наверняка знакомы — plotly . Еще раз, нам нужно сделать некоторые приготовления на входном фрейме данных, чтобы сделать его совместимым с plotly подходом.
df_2 = df_1.copy() df_2[«delta_text»] = df_2[«delta»].astype(str) df_2[«measure»] = [«absolute»] + ([«relative»] * 12) df_2
Мы создали новый столбец с именем delta_text , который содержит изменения, закодированные в виде строк. Мы будем использовать их в качестве меток на графике. Затем мы также определили столбец measure , который содержит меры, используемые plotly . Существует три типа мер, принимаемых библиотекой:
- relative — указывает на изменения в последовательности,
- absolute — используется для установки начального значения или сброса вычисленного итога,
- total — используется для вычисления сумм.
Подготовив кадр данных, мы можем создать каскадный график, используя следующий фрагмент:
fig = go.Figure( go.Waterfall( measure=df_2[«measure»], x=df_2[«time»], textposition=»outside», text=df_2[«delta_text»], y=df_2[«delta»], ) ) fig.update_layout( title=»# of users in 2022″, showlegend=False ) fig.show()
Естественно, самым большим преимуществом использования библиотеки plotly является тот факт, что графики полностью интерактивны — мы можем увеличивать масштаб, просматривать всплывающие подсказки для получения дополнительной информации (в данном случае, чтобы увидеть совокупную сумму) и т.д.
Одно явное отличие от предыдущих графиков заключается в том, что мы не видим последний блок, показывающий нетто/итого. Естественно, мы также можем добавить его с помощью plotly . Чтобы сделать это, мы должны добавить новую строку во фрейм данных.
total_row = pd.DataFrame( data=< «time»: «now», «users»: 0, «delta»:0, «delta_text»: «», «measure»: «total» >, index=[0] ) df_3 = pd.concat([df_2, total_row], ignore_index=True)
Как вы можете видеть, нам не нужно указывать конкретные значения. Вместо этого мы предоставляем показатель “total”, который будет использоваться для вычисления суммы. Кроме того, мы добавляем метку “now”, чтобы получить тот же график, что и раньше.
Код, используемый для генерации графика, на самом деле не изменился, единственное отличие состоит в том, что мы используем фрейм данных с дополнительной строкой.
fig = go.Figure( go.Waterfall( measure=df_3[«measure»], x=df_3[«time»], textposition=»outside», text=df_3[«delta_text»], y=df_3[«delta»], ) ) fig.update_layout( title=»# of users in 2022″, showlegend=False ) fig.show()
Вы можете прочитать больше о создании водопадных графиков в plotly здесь.
Подведение итогов
- Мы показали, как легко и быстро подготовить графики водопада на Python, используя три различные библиотеки: waterfall_ax , waterfall и plotly .
- При создании ваших графиков стоит помнить, что разные библиотеки используют разные типы входных данных (либо необработанные значения, либо дельты).
Вы можете найти код, используемый в этой статье, на GitHub.
Источник: dev-gang.ru
Agile или Waterfall. Какой метод организации выбрать для работы с заказчиками?
Это статей я крупно рискую быть затоптанным армией фанатов Scrum, Kanban, XP и других методик гибкого планирования. Мне придется привести аргументы в пользу того, что мир не черно-белый, и что стандартная диаграмма Ганта тоже полезна, а в некоторых случаях даже приоритетна для менеджмента проектов в IT.
Ладно, я знаю, что оправдания и водянистые введения никому не нравятся, но этот дисклеймер нужен для того, чтобы вы обратили внимание и на альтернативный опыт.
Небольшое введение для новичков в проектном менеджменте. Что такое Agile и Waterfall модели, и чем они отличаются друг от друга?
Waterfall — каскадная модель, в которой четко видна последовательность действий в проекте. Рабочие задачи выставлены одна за другой, что визуально показано сменой блоков. По оси X отложено время выполнения, поэтому диаграмма Ганта показывает не только последовательность и взаимосвязи, но и время на каждую задачу.
В целом, бессмысленно словами описывать визуально понятную вещь. Проще показать.
Это классическое изображение Waterfall модели, но задачи не обязательно идут последовательно. Некоторые процессы могут идти параллельно, особенно если не зависят от предыдущих отрезков реализации проекта. Такой метод называется гибридным и частично решает главную проблему каскадной модели — «неповоротливость» и большие затраты времени на разработку.
Agile — с английского название этой модели переводится как «Гибкая», и это лучшее описание принципов метода планирования. На самом деле, Agile — это целая группа методов проектного менеджмента, самые известные из которых: Scrum, Kanban, FDD и другие концепции.
Объединены они одним принципом работы. Проект делится на итерации (отрезки), называемые спринтами. Они ограничены во времени (неделя, две недели, месяц). Перед каждым спринтом ставятся конкретные задачи по параллельной работе над частью проекта. Результатом спринта должна быть полноценная часть продукта, готовая к тестированию.
Проверка на ошибки, к слову, проводится сразу, а не в конце реализации проекта, как при Waterfall. Это позволяет их быстро исправлять, и экономить время на доработки крупных проблем, которые возникнут из-за ошибки в дальнейшем.
При Agile моделях организациях команды работа над элементами проекта ведется параллельно, а не последовательно. Такой подход имеет много преимуществ:
- Высокая скорость достижения результатов.
- Изменения в проект могут быть внесены на любом этапе и реализованы уже в следующем спринте.
- Постоянный фидбек от заказчика и гибкое планирование.
- Распределенная и децентрализованная модель работы команды.
И многие другие плюсы. Но есть один значимый минус — сроки и стоимость реализации такого проекта оценить заранее невозможно. Все будет зависеть от того, в какую сторону пойдет разработка, сколько потребуется спринтов, и какое время специалистов будет в итоге задействовано.
Возвращаемся к вопросу в заголовке: «Agile или Waterfall. Какой метод организации выбрать для работы с заказчиками?»
Большинство новичков в менеджменте IT проектов выросли в парадигме: «Agile/Scrum — хорошо, Диаграмма Ганта — устаревший метод». Для них тезис: «Waterfall — лучшее решение для разработки проектов на заказ» звучит почти как оскорбление. Но реальный опыт работы с заказчиками показывает, что 90%+ клиентов IT-компаний хотят еще до начала сотрудничества точно знать, сколько времени и денег нужно для получения результата.
Абсолютное большинство заказчиков — это представители бизнеса. Их почти никогда не устраивает формулировка: «Точно сказать сложно, давайте начнем работу над проектом, а потом определимся, когда сможем закончить, и сколько это стоит» от менеджера IT-компании. Для предпринимателя подписаться на что-то неограниченное по времени и бюджету очень сложно. Это договор с неизмеримой степенью риска. И сколько ты не доказывай ему преимущества Scrum и гибкого подхода, в мозгу бизнесмена эти доводы будут звучать как попытка обмануть поубедительней.
Четкое понимание сроков и стоимости разработки дает только планирование работ по модели Waterfall со включением временных буферов и погрешности на непредвиденные задержки.
Из этого утверждения есть 2 исключения, при которых можно использовать гибкие системы менеджмента для проектов под заказ:
- Заказчик абсолютно доверяет подрядчику. Сценарий, который практически не встречается в реальной жизни. Клиент должен быть полностью уверен, что исполнитель не преувеличит сроки и не раздует смету. Даже когда директор компании-заказчика и менеджер проекта хорошо знакомы лично, договориться на «открытые» сроки и бюджет очень сложно. Более того, это даже опасно для личных отношений между людьми. Мысль о том, что смета раздута, все равно промелькнет.
- Заказчик полностью погружен в работу над проектом. Это более реалистичный сценарий, актуальный для стартапов. Когда у клиента бизнеса еще по факту нет, он прямо сейчас строится силами сторонней команды. Тогда он на правах руководителя будет ежедневно включен в разработку, а также лично будет видеть и утверждать объем работ. Заказчик должен понимать, что подписывается на «открытый» бюджет и сроки разработки.
Но даже в этом случае четкое предложение от другой команды разработчиков с фиксированной ценой и определенным дедлайном для заказчика будет выглядеть привлекательней. Бессознательно предприниматель будет стараться сократить риски, где это возможно. Это профдеформация.
Представьте себя на его месте: Вы ищете сантехника, чтобы починить протекающий кран. Первый говорит — 10 долларов, сделаю за полтора часа, а второй — не может назвать сумму и утверждает, что итоговая цена будет зависеть от того, как пойдет работа.
Agile методики менеджмента — отличное решение для работы над собственными проектами IT-компании. В таком случае проблемы прогнозирования сроков и суммы затрат перестает быть острым, а компания может использовать все преимущества гибкой системы работы над проектом.
Но именно для продаж, взаимодействия с клиентами ничего лучше старой доброй диаграммы Ганта придумано не было. Американский институт управления проектами (PMI) до сих пор рекомендует Waterfall в качестве оптимальной методологии планирования и управления. По версии организации, лучший подход — использование гибридных моделей, когда этапы работы идут не строго последовательно, а некоторые дела выполняются параллельно. В целях экономии времени и оптимизации управления проектом.
Ссылка на курс для жителей России
Источник: habr.com
Модель водопада: плюсы, минусы, подводные камни
Рассказываю о концепции каскадной методологии, её принципах, минусах и плюсах, а также о том, в каких ситуациях её лучше применять.
Слушай аудиоверсию этой статьи в нашем подкасте:
Продолжаю разбираться в теории управления проектами и изучать методологии, методики и методы. Про Agile, гибкую методологию, я уже рассказывал. Теперь пришло время поговорить о её противоположности — каскадной методологии, которую также называют «водопадной моделью» или просто Waterfall.
В чём идея
Говорят, без знания хотя бы одной методологии разработки бессмысленно лезть в управление проектами — всё начнёт разваливаться. Waterfall — тот самый неплохой минимум, с которого можно начать. Мы привыкли мыслить последовательными категориями, поэтому каскадная методология кажется более близкой, в отличие от непоследовательности Agile.
Впервые Waterfall представил в 1970 году Уинстон Ройс, директор Lockheed Software Technology Center, в своей статье. Но не сказать, чтоб до него про такой подход никто не знал — всё-таки структура каскадной методологии во многом заимствована у диаграммы Ганта, а она, как я уже рассказывал, уходит корнями далеко в прошлое. Просто так вышло, что славу за Waterfall Ройс (намеренно или случайно — не известно) присвоил себе.
Согласно Waterfall работа над проектом должна идти в несколько этапов, следующих друг за другом, от первого и до последнего. Их количество от проекта к проекту, от схемы к схеме может меняться, но суть одна.
Из-за схожести с водопадом методология и получила такое название.
- Требования. Самый первый этап, во время которого определяют и анализируют требования проекта: системные требования, требования к ПО, пожелания заказчика и т. д. и т. п. На основе всей этой информации создают входную документацию, где описывают, что должно получиться в итоге (не важно, что это будет — софт или авианосец), но не то, как именно это всё нужно будет делать. Короче, на этом этапе пишут первую, обобщённую, версию ТЗ.
- Проектирование. Когда первая версия ТЗ готова и есть общее понимание, что нужно сделать, команда приступает к проектированию — детализирует ТЗ, согласует с заказчиком логику работы системы, описывает, что и как будет работать. На выходе этого этапа всё ещё не проясняется вопрос реализации, но уже становится примерно понятно, сколько нужно людей и часов на работу.
- Реализация. Затем команда окончательно проясняет, как именно будет происходить разработка проекта, с помощью каких инструментов (языков программирования, оборудования, сервисов и т. д.). Каркас, который проработали на предыдущих этапах, становится более целостным, потихоньку формируется облик продукта. На этот этап приходится большая часть работы над проектом.
- Проверка. На этом этапе проводят полноценное тестирование продукта, чтобы найти и исправить критические (и не очень) проблемы.
- Развёртывание. И, наконец, когда всё протестировано и отлажено, переходят к последнему этапу, в рамках которого сдают проект заказчику, устанавливают, внедряют — в общем, вводят продукт в эксплуатацию. Кроме того, сюда может входить и последующее сопровождение, и поддержка, в том числе техническая.
Получается идеальная схема: продумали и согласовали ТЗ, сделали всё в точности по нему, протестировали, отдали клиенту — все довольны. А большой-пребольшой детализированный план, который создаёшь в самом начале, и которому все должны неотрывно следовать, создаёт иллюзию безопасности
У нас есть чёткий план. Что может пойти не так?
А пойти не так может всё.
Постулаты каскадной методологии
Как и у Agile, у Waterfall есть свои принципы, на которых всё строится:
- документы и инструкции очень важны;
- следующий этап должен начинаться только после окончания предыдущего;
- перескакивать через этапы нельзя;
- возвращаться на предыдущие этапы, чтобы что-то изменить, нельзя;
- если изменились требования — переделываем ТЗ;
- ошибки выявляют и исправляют только во время тестирования;
- клиент не участвует в работе над проектом после создания ТЗ.
Но не всё так однозначно. Взять хотя бы требование к жёсткой последовательности этапов и невозможности возвращаться назад. Говорят, в этом и состоит основное отличие Waterfall от Agile, Scrum и т. д. Но если заглянуть в оригинальный документ за авторством Ройса, выяснится, что он вполне предполагал возврат на предыдущие этапы для той же корректировки.
Думаю, ключевое отличие Waterfall от гибких методологий и методик в том, что, как ни крути, итерация здесь всего одна. И никакая возможности вернуться на этап назад, чтобы что-то поправить, этого не изменит. Но и сказать, что тот же Agile однозначно лучше каскадной методологии тоже нельзя.
Чем плох Waterfall
Сейчас Waterfall всё ещё популярен, но для того же IT подходит всё меньше по ряду причин.
- Очень много документов, который нужно постоянно актуализировать. Из-за этого работа над проектом часто превращается в сущую бюрократию — пока всё со всеми не согласуешь, в документах всё не пропишешь, с места ничто не сдвинется.
- Подробнейший план может создать не только иллюзию безопасности, но и ложные впечатления о работе над проектом. За фразами типа «60% проекта выполнено» может не быть никакого полезного результата. Это всего лишь манипуляция. Всё-таки «делать» — не значит «сделать».
- Пользователя и заказчика полностью изолируют от процесса разработки. В итоге первый не может постепенно привыкать к продукту, а второй — вносить корректировки, если что-то идёт не так. Поэтому продукты, сделанные по каскадной методологии, оказываются не ориентированы на массового пользователя.
- Все требования должны быть сразу известны. Сделать это очень сложно, потому что заказчик часто и сам не знает, чего он хочет. В таких ситуациях гибкие методологии сподручнее.
- Из-за того, что в Waterfall тестирование происходит только в самом конце, проектом могут заниматься некомпетентные специалисты, и этого никто не заметит, пока не станет поздно. А когда на этапе тестирования находят вагон и маленькую тележку проблем, их начинают просто закрывать заплатками, ведь иного выбора нет. На первых этапах модель может быть более-менее гибкой, но масса проблем на этапе тестирования влечёт плачевные последствия.
Чем хорош Waterfall
В IT всё больше команд переходит на гибкие методологии по двум причинам: команды разработчиков небольшие, а дедлайны можно легко подвинуть. Но для крупных проектов каскадная методология всё ещё актуальна, потому что:
- Устойчива к обновлению кадров. Благодаря очень подробному документированию каждого этапа, участники могут приходить и уходить, но на сроки работы это никак не повлияет.
- Дисциплинирует, благодаря плану и чёткой последовательности этапов и строгому менеджменту.
- Гибкая на ранних этапах. До этапа разработки можно вполне легко вносить изменения в предыдущие этапы.
- Прозрачна. Заранее понятно, на каком этапе что будет происходить, поэтому становится проще прогнозировать бюджеты и набирать команду.
Где лучше применять
Перечисленные плюсы и минусы не исключают использование каскадной методологии (она в некоторых случаях всё ещё уместнее Agile), но сужают пространство для применения. Waterfall подойдёт, если:
- Заказчик хорошо понимает, что хочет. У него есть проработанная концепция, которая не изменится.
- Заказчик не планирует участвовать в проекте после принятия ТЗ, а полностью отдаёт его на аутсорс.
- Заказчик хочет заранее знать точные сроки и результаты каждого этапа.
- Заранее понятно, что, как и с помощью каких инструментов нужно будет делать.
- Это сложный продукт, который требует очень много затрат, и у которого есть очень чёткая последовательность разработки (сомнительно, что подводные лодки когда-нибудь будут делать по Agile).
- Команда уже делала аналогичный проект.
Ну и вообще, как бы все ни хотели «быть Agile», человеческая любовь к последовательности и порядку слишком сильна. Особенно у разработчиков. Поэтому Waterfall ещё долгое время будет доминировать в сфере управления проектами.
Источник: weeek.net