Appearance
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.pyplot3. Инспекция доступных бэкендов отрисовки
Задача: 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) # False10. Расчет физического веса 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