Первоначально опубликовано в 2019 году как Развлекая интеллект в Джупитер Блог .
Развлекая интеллект Включает данные о разработке и доставке программного обеспечения и процессов доставки в действующее понимание, как BI делает для бизнеса. Jupyter — это идеальный инструмент для этого, с его комбинацией мощных сред кодирования и пользовательский интерфейс, облегчающий эксперименты с ультракороткими циклами обратной связи.
Настройка на основе Jupyter поддерживает анализ рисков и принятия решений в процессах разработки и операций — типичные процедуры управления бизнес-аналитикой/данными могут быть применены к «Бизнесу создания программного обеспечения». Идея состоит в том, чтобы создать петли обратной связи и содействовать принятию человеческих решений путем автоматического обеспечения надежного ввода в виде современных фактов. Ведь разработка является нашим бизнесом — поэтому давайте укажем KPI для разработки, выпуска и операционного программного обеспечения.
Типичные использования
Вот некоторые очевидные области применения, где анализ данных может быть полезен на технической стороне.
- Миграционные процессы всех видов (текущее состояние, отслеживание прогресса, достижение целей)
- Инвентаризация отчетности для повышенной прозрачности и поддержки оперативных решений
- Автоматизация процессов внутренней отчетности, чтобы освободить скудные активы и опыт человека
Архитектура платформы
Простой Jupyterhub SETUP может позволить вам сделать анализ на своих уже доступных, но недоступных и едва понимаемых данных, без каких-либо великих усилий или капитала. Добавляя один хост Jupyterhub, вы можете использовать встроенный ядр Python3 для доступа к существующим источникам внутренних данных.
Следующая диаграмма показывает, какую роль Jupyterhub может играть в существующей среде.
Чтобы сделать такое развертывание легко, 1and1/Debianized-Jupyterhub Проект предоставляет услугу Jupyterhub, включая полностью оборудованное ядро Python3 в качестве единого пакета Debian — только Python3, Nodejs и пакеты Chromium должны быть установлены в дополнение к jupyterhub
один. Если вы подняли бровь на хром-хроме в этом списке, он используется каркасами визуализации на основе JavaScript для рендеринга PNG-изображений.
В том числе Nginx-Powered SSL Off-погрузчик , Полная настройка можно сделать в течение часа.
Корпус использования: миграционная отчетность
На момент написания этого письма (начало 2019 года) широко распространенная задача — миграция из Oracle Java для других поставщиков, а также начать миграцию с Java 8 до новых версий (Java 11). Если вы делаете это в масштабе во многих машинах и командах, вам определенно нужна какое-то управление, а постоянная обратная связь по текущему состоянию и скорости прогресса.
Далее следует выдержка из продуктивной ноутбуки с анонимными данными о Утверждать Развертывание. Что данные изначально были извлечены из системы, называемой «Отчет о управлении патчами» , который собирает информацию о установленных пакетах для всех хозяев в центре обработки данных. Мы в желтом «Источники данных» Коробка вышеуказанного рисунка здесь.
Во-первых, мы читаем данные и покажу наборы значений категорических колонн, а также образец.
import numpy as np import pandas as pd raw_data = pd.read_csv("../_data/cmdb-aoj.csv", sep=',') print('♯ of Records: {}\n'.format(len(raw_data))) for name in raw_data.columns[1:]: if not name.startswith('Last '): print(name, '=', list(sorted(set(raw_data[name].fillna(''))))) print(); print(raw_data.head(3).transpose())
♯ of Records: 104 Distribution = ['Debian 8.10', 'Debian 8.11', 'Debian 8.6', 'Debian 8.9', 'Debian 9.6', 'Debian 9.7', 'Debian 9.8'] Architecture = ['amd64'] Environment = ['--', 'DEV', 'LIVE', 'QA'] Team = ['Team Blue', 'Team Green', 'Team Red', 'Team Yellow'] Installed version = ['11.0.2.9-83(amd64)', '11.0.2.9-85(amd64)', '8.202.b08-66(amd64)', '8.202.b08-83(amd64)', '8.202.b08-85(amd64)'] 0 1 2 CMDB_Id 108380195 298205230 220678839 Distribution Debian 8.11 Debian 9.6 Debian 8.11 Architecture amd64 amd64 amd64 Environment DEV -- DEV Team Team Red Team Red Team Red Last seen 2019-03-18 06:42 2019-03-18 06:42 2019-03-18 06:42 Last modified 2019-03-18 06:42 2019-03-18 06:42 2019-03-18 06:42 Installed version 11.0.2.9-83(amd64) 11.0.2.9-83(amd64) 11.0.2.9-83(amd64)
Далее поступает обычные данные очистки данных. Распределение
Столбец немного разнообразна, и не у всех есть кодовые знамена Debian, а соответствующие основные версии запоминаются. map_distro
Функция исправляет это.
def map_distro(name): """Helper to create canonical OS names.""" return (name.split('.', 1)[0] .replace('Debian 7', 'wheezy') .replace('Debian 8', 'jessie') .replace('Debian 9', 'stretch') .replace('Debian 10', 'buster') .replace('squeeze', 'Squeeze [6]') .replace('wheezy', 'Wheezy [7]') .replace('jessie', 'Jessie [8]') .replace('stretch', 'Stretch [9]') .replace('buster', 'Buster [10]') )
Вместе с другими шагами очистки функция Mapper применяется в A DFPLY трубопровод. Результат можно контролировать, показывая образец точек данных с уникальными номерами версий.
from dfply import * cleaned = (raw_data >> mutate(Version=X['Installed version'].str.split('[()]', 1, expand=True)[0]) >> mutate(Environment=X.Environment .fillna('--').str.replace('--', 'N/A').str.upper()) >> mutate(Distribution=X.Distribution.apply(map_distro)) >> drop(X.CMDB_Id, X['Last seen'], X['Last modified'], X['Installed version']) ) print((cleaned >> distinct(X.Version)).transpose())
0 13 14 62 \ Distribution Jessie [8] Stretch [9] Jessie [8] Stretch [9] Architecture amd64 amd64 amd64 amd64 Environment DEV N/A DEV DEV Team Team Red Team Blue Team Red Team Blue Version 11.0.2.9-83 11.0.2.9-85 8.202.b08-83 8.202.b08-85 68 Distribution Jessie [8] Architecture amd64 Environment DEV Team Team Blue Version 8.202.b08-66
Время представить очищенные данные, начиная с таблицы команд и их количества установленных пакетов. В производственной ноутбуке API корпоративного управления идентификацией используется для обогащения таблицы с контактными данными команды. Наличие организационных данных также позволяет фильтровать или составлять данные по бизнес-единицам.
counts = cleaned.groupby(['Team']).size() print(counts.reset_index(name='Count'))
Team Count 0 Team Blue 42 1 Team Green 16 2 Team Red 45 3 Team Yellow 1
Чтобы создать тепловую карту того, насколько разнообразна спектр версий команды, мы рассчитываем процент версий на команду.
percentage = cleaned.groupby(['Team', 'Version']).size().reset_index(name='Count') percentage = percentage.assign(Percent= percentage.apply(lambda x: 100.0 * x[-1] / counts[x[0]], axis=1)) print(percentage.head(3))
Team Version Count Percent 0 Team Blue 11.0.2.9-85 1 2.380952 1 Team Blue 8.202.b08-66 1 2.380952 2 Team Blue 8.202.b08-85 40 95.238095
Холовым просмотвам Делает создание тепломапа, включая этикетку наложить ветер.
import holoviews as hv hv.extension('bokeh') publish = 1 # publishing or interactive mode? heatmap = hv.HeatMap(percentage[['Version', 'Team', 'Percent', 'Count']]).opts( hv.opts.HeatMap( title='Version Distribution by Team', width=480, xrotation=25, zlim=(0, 100), cmap='kbc_r', clipping_colors=dict(NaN='#ffffe0'), colorbar=True, tools=['hover'], toolbar=None if publish else 'right', ) ).sort() label_dimension = hv.Dimension('Percent', value_format=lambda x: '%.1f' % x) labels = hv.Labels(heatmap, vdims=label_dimension).opts( hv.opts.Labels( text_color='Percent', text_font_size='10pt', text_font_style='bold', ) ) chart = heatmap * labels if publish: import time import phantomjs_bin from IPython.display import HTML, clear_output %env BOKEH_PHANTOMJS_PATH={phantomjs_bin.executable_path} chart_img = 'img/devops/aoj-heatmap.png' hv.save(chart, chart_img) chart = HTML(''.format(chart_img, time.time())) clear_output() chart
Из тепловой карты вы можете легко взглянуть, использует ли команда преимущественно одной версией, а в том, как последние используемые версии являются.
Заключение
Использование платформы Powered by Проект Jupyter И большой кусок научного стека Python позволяет легко прессмировать ваши данные в нужную вам форму, а затем выбрать из широкого спектра вариантов визуализации, чтобы принести ваше сообщение.
👍 Кредиты изображений: DevOps-Toolchain
Оригинал: «https://dev.to/jhermann/a-jupyterhub-showcase-devops-intelligence-5ea»