Создавайте отчеты в формате PDF с красивой визуализацией за 10 минут или меньше

Отчеты есть везде, поэтому любой технический специалист должен знать, как их создавать. Это утомительная и трудоемкая задача, что делает ее идеальным кандидатом для автоматизации с помощью Python.

Вы можете извлечь выгоду из автоматического создания отчетов, будь вы специалистом по обработке данных или разработчиком программного обеспечения. Например, специалисты по обработке данных могут использовать отчеты для демонстрации производительности или объяснения моделей машинного обучения.

В этой статье вы узнаете, как создавать отчеты на основе визуализации данных и сохранять их в формате PDF. Чтобы быть более точным, вы узнаете, как объединить несколько визуализаций данных (фиктивные данные о продажах) в один файл PDF.

И самое лучшее - это проще, чем вы думаете!

Статья построена следующим образом:

  • Генерация данных
  • Визуализация данных
  • Создать структуру страницы PDF
  • Создавайте отчеты в формате PDF
  • Заключение

Вы можете скачать Блокнот с исходным кодом здесь.

Генерация данных

Без данных не может быть отчетов. Вот почему вам сначала нужно сгенерировать некоторые из них - подробнее об этом чуть позже.

Начнем с импорта. Вам понадобится куча вещей, но библиотека FPDF, вероятно, единственное, что неизвестно. Проще говоря, он используется для создания PDF-файлов, и вы будете работать с ним чуть позже. Обратитесь к следующему фрагменту для импорта:

Теперь давайте сгенерируем фальшивые данные. Идея состоит в том, чтобы объявить функцию, которая возвращает фрейм фиктивных данных о продажах за данный месяц. Это достигается путем создания диапазона дат для всего месяца и последующего присвоения суммы продаж как случайного целого числа в пределах заданного диапазона.

Вы можете использовать библиотеку calendar, чтобы получить последний день для любой комбинации года / месяца. Вот весь фрагмент кода:

Вызов generate_sales_data(month=3) сгенерировал 31 точку данных за март 2020 года. Вот как выглядят первые несколько строк:

Вот и все - теперь у вас есть функция, которая генерирует фиктивные данные о продажах. Давайте посмотрим, как это визуализировать дальше.

Визуализация данных

Ваша следующая задача - создать функцию, которая визуализирует ранее созданный набор данных в виде линейного графика. Это наиболее подходящий тип визуализации, поскольку вы работаете с данными временных рядов.

Вот функция для визуализации данных и пример вызова:

В двух словах - вы создаете визуализацию данных, задаете заголовок, играете со шрифтами - ничего особенного. Визуализация не отображается пользователю, а сохраняется на машине. Позже вы увидите, насколько это мощно.

Пример вызова сохранит визуализацию данных за декабрь 2020 года. Вот как это выглядит:

И это ваша функция визуализации. Остается только один шаг, прежде чем вы сможете создавать PDF-документы, и это сохранение всей визуализации и определение структуры страницы отчета.

Создайте структуру страницы PDF

Теперь задача состоит в том, чтобы создать функцию, которая будет делать следующее:

  • Создает папку для графиков - удаляет, если она существует, и создает заново
  • Сохраняет визуализацию данных для каждого месяца в 2020 году, кроме января, чтобы вы могли видеть, как работать с разным количеством элементов на странице (не стесняйтесь включать и январь)
  • Создает PDF-матрицу из визуализаций - двухмерную матрицу, в которой строка представляет одну страницу в PDF-отчете.

Вот фрагмент кода функции:

Возможно, это много для переваривания, поэтому просмотрите его строка за строкой. Комментарии должны помочь. Идея сортировки состоит в том, чтобы получить целочисленное представление месяца из строки - например, 3 из «3.png» и использовать это значение для сортировки диаграмм. Удалите эту строку, если порядок не имеет значения, но это не относится к месяцам.

Вот пример вызова функции construct():

После выполнения приведенного выше фрагмента вы должны увидеть в своем блокноте следующее:

Если вам интересно - вот как папка plots/ выглядит на моем компьютере (после вызова функции construct()):

И это все, что вам нужно для создания отчетов в формате PDF - вы узнаете, как это сделать дальше.

Создавайте отчеты в формате PDF

Здесь все сходится. Теперь вы создадите собственный PDF класс, унаследованный от FPDF. Таким образом, в нашем классе доступны все свойства и методы, если вы не забыли вызвать super().__init__() в конструкторе. Конструктор также будет содержать значения ширины и высоты страницы (бумага A4).

Ваш PDF класс будет иметь несколько методов:

  • header() - используется для определения заголовка документа. Пользовательский логотип размещается слева (убедитесь, что он есть, или удалите эту строку кода), а жестко закодированный текст размещается справа.
  • footer() - используется для определения нижнего колонтитула документа. Он просто покажет номер страницы
  • page_body() - используется для определения внешнего вида страницы. Это будет зависеть от количества визуализаций, отображаемых на странице, поэтому позиции для полей устанавливаются соответствующим образом (не стесняйтесь экспериментировать со значениями)
  • print_page() - используется для добавления пустой страницы и заполнения ее содержимым

Вот полный фрагмент кода для класса:

Пришло время создать его экземпляр и добавить страницы из двухмерной матрицы контента:

Выполнение указанной выше ячейки займет некоторое время, и по завершении вернет пустую строку. Это ожидаемо, поскольку ваш отчет сохраняется в папке, где хранится Блокнот.

Вот как должна выглядеть первая страница отчета:

Конечно, ваш будет выглядеть по-другому из-за другого логотипа и из-за того, что данные о продажах полностью случайны.

Вот как вы создаете отчеты в формате PDF с визуализацией данных с помощью Python. Давайте подведем итоги.

Заключение

Сегодня вы узнали много нового - как создавать фиктивные данные для любого случая, как визуализировать их и как встраивать визуализации в один отчет в формате PDF. Встраивание ваших визуализаций потребует минимальных изменений кода - в основном для позиционирования и полей.

Сообщите мне, если вы хотите увидеть руководство по автоматическому созданию отчетов на основе интерпретаций моделей машинного обучения (SHAP или LIME) или что-то еще, связанное с наукой о данных.

Спасибо за прочтение.

Подключитесь к LinkedIn.

Присоединяйтесь к моему личному списку рассылки для получения более полезных идей.

Учить больше

Первоначально опубликовано на https://www.betterdatascience.com 18 января 2021 г.