Создание информативных диаграмм для показателей работы приложения
Визуализация данных приложения на Python
Анализ работы приложения часто требует графического представления метрик, ошибок и нагрузочных показателей. Matplotlib и Seaborn дают широкие возможности для создания диаграмм, которые помогают обнаружить тренды, выбросы и взаимосвязи. В этой статье рассматриваются разные способы визуализации, от базовых до расширенных.
Как получить общий набор графиков для исследования метрик?
Основной подход заключается в загрузке данных в DataFrame и последующем построении нескольких графиков на одном полотне. Такой вариант подходит для первичного анализа датасета с метриками приложения.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('app_metrics.csv')
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values('timestamp')
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
axes[0, 0].plot(df['timestamp'], df['response_time'])
axes[0, 0].set_title('Response time by timestamp')
sns.countplot(data=df, x='error_code', ax=axes[0, 1])
sns.histplot(df['cpu_usage'], kde=True, ax=axes[1, 0])
sns.scatterplot(data=df, x='mem_usage', y='cpu_usage', hue='error_code', ax=axes[1, 1])
plt.tight_layout()
plt.show()
библиотеки визуализации python (библиотеки визуализации данных python)
После выполнения этого кода появляется окно с набором графиков: слева вверху виден временной ряд отклика, справа вверху количества ошибок разных кодов, слева внизу распределение загрузки центрального процессора, справа внизу зависимость между памятью и процессором с окраской по коду ошибки.
Частая проблема при использовании данного приема состоит в неверном формате времени, который не распознается функцией pd.to_datetime. Помогает указание параметра format, например datetime_format='%Y-%m-%d %H:%M:%S'. Другая трудность возникает с посторенними заголовками на кириллице, они превращаются в прямоугольники. Для решения этой проблемы следует задать шрифт с поддержкой символов через matplotlib.rcParams['font.family'] = 'DejaVu Sans'.
Как сгладить временной ряд метрик?
Вариант решения для сглаживания флуктуаций временного ряда использует метод скользящего среднего. Он востребован для выявления долгосрочных тенденций при наличии кратковременных выбросов.
plt.figure(figsize=(10, 4))
df['rolling_mean'] = df['response_time'].rolling(window=5).mean()
plt.plot(df['timestamp'], df['response_time'], alpha=0.4, label='raw')
plt.plot(df['timestamp'], df['rolling_mean'], linewidth=2, label='rolling')
plt.xlabel('timestamp')
plt.ylabel('response time')
plt.legend()
plt.show()
визуализация приложения python (визуализация приложения на python)
В результате на графике отображаются исходные данные полупрозрачными маркерами и сглаживающая кривая, показывающая общую тенденцию.
Как выявить корреляцию между метриками приложения?
Тепловая карта корреляционной матрицы позволяет быстро увидеть взаимосвязи между числовыми метриками. Такой вариант применяется для выбора признаков при диагностике работы приложения.
plt.figure(figsize=(8, 6))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.show()
Python создание графика (создание графика в python)
На экране появляется матрица, в которой цвет ячейки показывает силу и направление линейной связи между парами метрик. Коэффициенты Пирсона подписаны внутри ячеек.
Как сравнить распределение метрики для разных категорий ошибок?
Ящичные диаграммы с категорией на оси X наглядно демонстрируют различия в медианах и разбросе метрики среди групп. Вариант полезен для сравнения нагрузки или быстродействия при разных погодных условиях работы приложения.
plt.figure(figsize=(10, 5))
sns.boxplot(data=df, x='error_code', y='cpu_usage')
plt.xticks(rotation=45)
plt.show()
По итогу выводится набор ящиков с усами для каждого значения error_code. Выбросы отображаются точками, что помогает находить аномальные наблюдения.
Расширенные примеры визуализации на Matplotlib и Seaborn
Данный раздел содержит примеры, которые используются реже стандартных графиков, но дают более глубокое понимание структуры данных приложения.
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
g = sns.FacetGrid(tips, col='time', row='smoker', hue='sex', margin_titles=True)
g.map(plt.scatter, 'total_bill', 'tip', s=50)
g.add_legend()
plt.show()
На экран выводится сетка из четырех графиков. Каждая строка соответствует некурящим или курящим посетителям, столбец времени обеда или ужина. Точки окрашены по полу, что позволяет проследить зависимость суммы счета от чаевых внутри каждой подгруппы.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset('iris')
g = sns.PairGrid(iris, hue='species', corner=True)
g.map_offdiag(sns.scatterplot)
g.map_diag(sns.kdeplot)
g.add_legend()
plt.show()
В каждой паре признаков расположен точечный график, по диагонали отображаются сглаженные распределения для трех видов ирисов. Этот прием полезен для поиска разделяющих признаков при анализе многомерных данных из приложения.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.DataFrame({
'category': ['A', 'B', 'C', 'D'],
'values': [21, 17, 30, 12]
})
custom_palette = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']
fig, ax = plt.subplots()
sns.barplot(data=df, x='category', y='values', palette=custom_palette)
ax.set_title('Values by category')
plt.savefig('my_plot.pdf', dpi=120, bbox_inches='tight')
В рабочем каталоге создается файл my_plot.pdf с векторным графиком. Ширина и высота подстраиваются под содержимое, обеспечивая компактный вид при печати.
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.default_rng(2024)
times = np.arange(1000)
latency = np.exp(rng.normal(2, 0.5, 1000)) * 100
plt.figure(figsize=(10, 4))
plt.plot(times, latency)
plt.yscale('log')
plt.title('Latency on log scale')
plt.xlabel('request number')
plt.ylabel('milliseconds')
plt.show()
График задержек, построенный в логарифмической шкале по оси Y, становится читаемым при наличии очень большого разброса значений. Медленные изменения масштаба видны лучше, чем на линейной шкале.