Pandas, Анализ данных

Инструменты Python. Создание нестандартных отчетов.

Время прочтения: 3 мин.

Для примера представим задачу:

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

Имеем:

  • папку, в которой располагаются необходимые изображения;
  • excel-файл, в котором представлены идентификаторы изображений с пояснениями.

Полный код функции, а также вспомогательные материалы можно найти на github странице. Начнем с создания ipynb-файла в том же месте, где располагается папка с изображениями и Excel-файл. Для работы нам понадобятся только 2 библиотеки:

import pandas as pd
import os

Загрузим информацию с Excel-файла, а также имена файлов, которые располагаются в папке «Изображения»:

df = pd.read_excel('Пояснения.xlsx', encoding='utf8')
list_img = os.listdir('Изображения/')

Далее необходимо реализовать функцию, которая сформирует отчет в виде таблицы в .html-файле. Функция будет состоять из 3-х функциональных частей:

  • начало: задаем заголовок и имена столбцов;
  • тело документа: отображение изображений с пояснениями;
  • конец: запись данных, формирование документа.
with open('Report.html', 'w') as f:
        html_tags = \
        """
       <!doctype html>
        <html>
        <head></head>
        <body>    
            <h1>Отчет с изображениями и пояснениями</h1>
                <style>
                    table {border-collapse: collapse;}
                    td, th {border: 5px solid #000; text-align: "center"; padding: 8px; font-size:24pt}
                </style>
            <table style='width:100%'; border='5'>
            <tr>
                <th>Изображение</th>
                <th>Пояснения</th>
            </tr>
        """
        f.write(html_tags)

С помощью данной конструкции создается html-файл с названием Report.html. Между тегами «h1» задается заголовок отчета. Между тегами «style» задаются параметры для форматирования таблицы и текста. Например, параметр «font-size» задает размер текста. Далее с помощью тегов «th» задаем количество и имена столбцов.

data = ''
    for img in list_img:
        path_to_img = 'Изображения/' + img
        description = str(df[df['Изображение'] == img.strip('.png')]['Пояснения'].values[0])
        data += '<tr>'
        data += '<td align="center"><img src={0} width=600></td>'.format(path_to_img)
        data += '<td align="center">{0}</td>'.format(description)
        data += '<tr>'

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

  • path_to_img: путь к изображению;
  • description: описание к изображению.
with open('Report.html', 'a') as f:
        f.write(data)
        html_tags = """
            </table>
        </body>
        </html>
        """
        f.write(html_tags)

Последний блок функции записывает в .html-файл информацию о расположении изображения, а также его описание. Структура .html-файлов формируется за счет тегов (html, head, h1, body и т.д.), которые всегда записываются два раза, для каждого из значений или параметров. Для корректного вывода текст заголовка нужно поместить между тегами «h1» (открытие тега) и «/h1» (закрытие тега). Т.к. в первом блоке функции сформировали документ открытием тегов (html, body, table) в конце документа, то после записи информации необходимо закрыть указанные теги с помощью записи переменной html_tags.

После запуска функции, в папке где располагается ipynb-файл сформируется отчет с именем Report.html. Для его запуска можно воспользоваться любым интернет-браузером. Для корректной работы необходимо, чтобы папка с изображениями, excel-файл,  ipynb-файл и Report.html располагались в одной директории.

Советуем почитать