Skip to content

1. Введение в Matplotlib: роль в ИИ, установка и запуск в окружениях ​

Роль визуализации в конвейере ИИ ​

Зачем бэкендеру графики, если существуют готовые BI-системы ​

Инженеры с бэкенд-опытом часто задаются вопросом: зачем вручную писать код для генерации картинок, если в индустрии есть мощные готовые BI-системы (Tableau, PowerBI) или интерактивные веб-дашборды (Plotly, Streamlit).

В инженерии искусственного интеллекта и глубокого обучения (Deep Learning) роль графиков принципиально иная. Здесь визуализация — это не витрина бизнес-отчетов, а критически важный низкоуровневый инструмент дебага и мониторинга вычислений.

Когда вы запускаете обучение нейросети, которая будет настраивать миллиарды весов в течение нескольких дней или недель, вам необходимо в режиме реального времени видеть, как ведет себя модель. Логи в консоли в виде бесконечных столбцов цифр не позволяют человеческому глазу мгновенно заметить микроскопические, но фатальные аномалии — например, затухание градиентов или взрыв функции потерь. График сходимости, отрендеренный на сервере, сразу показывает проблему. Кроме того, на этапе первичного анализа (EDA) визуальное представление распределений признаков позволяет моментально отсечь бракованные данные и выбросы.

Окружение, установка и специфика сред запуска ​

Установка библиотеки ​

Пакет визуализации ставится в рабочее виртуальное окружение стандартными инструментами:

bash
# Installation inside a standard pip environment
pip install matplotlib

# Installation inside a conda package manager architecture
conda install matplotlib

Правила импорта в промышленной разработке ​

По аналогии с NumPy и Pandas, в сообществе принято использовать сокращения вроде import matplotlib.pyplot as plt. Однако для enterprise-разработки и написания жестко типизированного, читаемого бэкенд-кода мы отказываемся от любых сокращений. Полное имя подмодуля matplotlib.pyplot делает цепочки вызовов прозрачными для любого разработчика в команде:

python
import matplotlib

# Checking the current version of the library
print(matplotlib.__version__)

Интерактивный запуск в Jupyter Notebook ​

При проведении экспериментов в файлах Jupyter Notebook (.ipynb) графики должны отображаться мгновенно прямо под ячейками кода. Для активации этого режима в самую первую ячейку ноутбука встраивается специальная магическая команда среды:

python
# Activating inline interactive plotting environment inside Jupyter
%matplotlib inline

import matplotlib.pyplot

Запуск в чистых Python-скриптах ​

Если код выполняется в виде стандартного фонового скрипта (файл .py) на локальном компьютере, вызов функций отрисовки лишь подготавливает изображение в оперативной памяти, но не выводит его на экран автоматически. Чтобы физически открыть графическое окно операционной системы с холстом, в самом конце скрипта необходимо вызвать блокирующий метод matplotlib.pyplot.show().

python
import matplotlib.pyplot

# ... code that configures the canvas data elements ...

# Open the desktop OS graphical window (blocking execution thread)
matplotlib.pyplot.show()

Упражнения базовые (5 шт) (только с опорой на объясненную в данном уроке теорию) ​

1. Проверка окружения и версии Matplotlib ​

Задача: Напишите скрипт, который импортирует корневой пакет matplotlib полным именем и выводит в консоль строковое значение текущей установленной версии.

Посмотреть решение
python
import matplotlib

# Verifying library environment using explicit naming
current_version = matplotlib.__version__
print("Matplotlib environment version:", current_version)

2. Конфигурация интерактивного вывода Jupyter ​

Задача: Напишите две строки кода для первой ячейки Jupyter Notebook: первая строка активирует инлайн-отображение графиков, а вторая — выполняет полный импорт подмодуля matplotlib.pyplot.

Посмотреть решение
python
# Magic command to enable inline rendering in notebooks
%matplotlib inline

import matplotlib.pyplot

3. Инспекция доступных бэкендов отрисовки ​

Задача: Matplotlib использует разные движки (бэкенды) для вывода графики в зависимости от ОС. Напишите вызов функции matplotlib.get_backend(), которая возвращает имя текущего активного бэкенда системы.

Посмотреть решение
python
import matplotlib

# Checking the current active graphics engine backend
active_engine = matplotlib.get_backend()
print("Active backend engine:", active_engine)

4. Вызов блокирующего графического интерфейса в скрипте ​

Задача: Напишите финальную команду подмодуля pyplot, которая останавливает выполнение стандартного Python-скрипта и принудительно открывает десктопное окно с холстом.

Посмотреть решение
python
import matplotlib.pyplot

# Graphical user interface loop trigger
matplotlib.pyplot.show()

5. Интроспекция параметров главного модуля в Jupyter ​

Задача: Напишите строку кода для ячейки Jupyter, которая открывает полную справочную интерактивную документацию Docstring по подмодулю matplotlib.pyplot с помощью символа интроспекции.

Посмотреть решение
python
import matplotlib.pyplot

# Running this statement opens the built-in documentation panel inside Jupyter
?matplotlib.pyplot

Упражнения смешанные (5 шт) (включают сквозную интеграцию с NumPy и Pandas) ​

6. Извлечение C-буфера массива для последующей визуализации ​

Задача: Сгенерируйте линейную числовую последовательность из 5 элементов от 0.0 до 10.0 через numpy.linspace() (Урок 3 модуля NumPy). Оберните этот массив в одномерную структуру pandas.Series (Урок 2 модуля Pandas). Перед будущей отправкой данных в графические функции извлеките обратно чистый низкоуровневый массив numpy.ndarray с помощью обращения к свойству .values (Урок 2 модуля Pandas) и выведите его на экран.

Посмотреть решение
python
import numpy
import pandas

# Step 1: Linear coordinates generation (NumPy Lesson 3)
numpy_vector = numpy.linspace(0.0, 10.0, 5)

# Step 2: Packaging into pandas series container (Pandas Lesson 2)
features_series = pandas.Series(data=numpy_vector)

# Step 3: Extracting raw underlying array memory layout buffer
target_array = features_series.values
print("Extracted numpy array buffer:", target_array)
print("Type classification:", type(target_array))

7. Чтение Parquet-файла и проверка dtypes перед рендерингом ​

Задача: При подготовке графиков важно знать типы фичей. Прочитайте файл "training_logs.parquet" (Урок 8 модуля Pandas). Выведите на экран типы данных всех столбцов через атрибут .dtypes (Урок 5 модуля Pandas). Напишите поисковый запрос по маске для Jupyter, который покажет все функции в pandas, начинающиеся на слово read (Урок 2 модуля Pandas).

Посмотреть решение
python
import pandas

# Loading binary columnar file storage from disk (Pandas Lesson 8)
dataset_df = pandas.read_parquet(path="training_logs.parquet")

# Inspecting column features data types (Pandas Lesson 5)
print("Features data types definitions:\n", dataset_df.dtypes)

# Searching for data loading utilities inside pandas namespace
pandas.read*?

8. Очистка батча от дубликатов строк перед отправкой на холст ​

Задача: Дан сырой датасет параметров, содержащий дубликаты строк: df_raw = pandas.DataFrame({"loss": [0.9, 0.1, 0.9], "epoch":}) (Урок 5 модуля Pandas). Удалите идентичные строки-повторения на месте (Урок 9 модуля Pandas). Выделите чистый вектор значений потерь по имени ключа "loss", преобразуйте его в массив NumPy методом .to_numpy() (Урок 11 модуля Pandas) и выведите результат.

Посмотреть решение
python
import pandas

df_raw = pandas.DataFrame({"loss": [0.9, 0.1, 0.9], "epoch":})

# Removing duplicate records within data buffer in place (Pandas Lesson 9)
df_raw.drop_duplicates(inplace=True)

# Extracting vector and exporting to array format (Pandas Lesson 5 & 11)
loss_array = df_raw["loss"].to_numpy()
print("Clean array configuration ready for plotting:", loss_array)

9. Поиск логарифмических аномалий NaN/Inf в признаках перед визуализацией ​

Задача: Дан вектор вероятностей numpy.array([0.0, 0.5, 1.0]). Примените к нему векторизованную функцию натурального логарифма numpy.log() (Урок 9 модуля NumPy). В результате возникнет маркер отрицательной бесконечности -inf (Урок 9 модуля NumPy). Напишите логическую проверку с использованием numpy.any(), которая проверяет, есть ли в полученном массиве скрытые неопределенности NaN с помощью numpy.isnan(). Выведите результат проверки.

Посмотреть решение
python
import numpy

probabilities = numpy.array([0.0, 0.5, 1.0])

# Vectorized logarithm execution triggers RuntimeWarning (NumPy Lesson 9)
log_signals = numpy.log(probabilities)  # Contains [-inf, -0.693, 0.0]

# Screening the array for missing fields markers (NumPy Lesson 9)
has_nan_anomalies = numpy.any(numpy.isnan(log_signals))
print("Are there any invalid NaN tokens in the array?", has_nan_anomalies)  # False

10. Расчет физического веса 2D матрицы весов в памяти ​

Задача: Перед визуализацией весов скрытого слоя нейросети нужно оценить их объем. Создайте матрицу весов из одних единиц размерностью (100, 100), принудительно задав полуточечный тип numpy.float16 для экономии памяти видеокарты (Урок 4 / Урок 11 модуля NumPy). Посчитайте общий физический вес полученной матрицы в байтах с помощью атрибута .nbytes и выведите его в консоль (Урок 2 модуля NumPy).

Посмотреть решение
python
import numpy

# Allocating a memory-optimized low-precision 2D weights layer (NumPy Lesson 4 & 11)
weights_matrix = numpy.ones((100, 100), dtype=numpy.float16)

# Accessing memory metrics tracking attributes (NumPy Lesson 2)
total_bytes = weights_matrix.nbytes
print("Total matrix weight in hardware RAM:", total_bytes, "bytes")  # 10000 elements * 2 bytes = 20000 bytes