Полное руководство по работе c RnDnet
 
×
Меню
Индекс

Формирование электронного отчета

 
При работе с проектами важным этапом является иллюстрация и оформление промежуточных или конечных результатов. Отчет с оформленными результатами помогает лучше анализировать состояние работ, и зачастую является финальным продуктом проекта.
 
Представление проекта в виде графа жестко закрепляет все этапы вычислительного процесса и помогает структурировать обработку. Но также важным преимуществом графа является возможность формирования электронного отчета автоматически. Результат каждого узла можно оформить в виде отчета, который будет создаваться в процессе расчета и автоматически обновлять его содержимое.
 
Электронный отчет представляет собой документ, в котором можно написать статическую основу, например в виде текста, а изменяемые данные выводить динамически. Изменяемыми данными могут быть входные параметры, результат работы узла в виде картинок или чисел. Отчет формируется непосредственно в программном модуле и сохраняется в выходной пакет как его переменная. Таким образом он содержит в себе актуальную информацию, относящуюся к обработке конкретного пакета и дает возможность красиво ее выводить с нужным описанием.
 
Формирование отчета осуществляется через синтаксис Markdown, это достаточно удобный и простой инструмент, позволяющий создавать продвинутые публикации.
 
Рассмотрим более подробно как этим пользоваться.
 
 
Создание и просмотр электронного отчета
 
Электронный отчет заполняется внутри исполняемого программного модуля, поэтому выберите один интересующий вас узел и в нем программный модуль. В нашем случае он реализован на языке Python. Подключите специальные библиотеки для полноценного оформления отчета: io, base64.
 
Пример составления электронного отчета:
 
#!/usr/bin/env python3
import io
import base64
import bfj
import numpy as np
import matplotlib.pyplot as plt
from datetime import date, timedelta
 
def fig_to_html(fig, width='100%'):
    buf = io.BytesIO()
    plt.savefig(buf, format='png')
    buf.seek(0)
    data = base64.encodebytes(buf.read()).decode()
    return f'<img width="{width}" src="data:image/png;base64,\n{data}">'
 
# Load everything from input package:
bfj.load_inputs(globals())
 
# Compute data
data = [[date.today() + timedelta(days=i), 100 * (1 - 0.01 * i**2)] for i in range(1,8)]
report_date = date.today() + timedelta(days=1)
 
# Prepare plots
fig, ax = plt.subplots(figsize=(8,4))
ax.plot([d for d,p in data],
        [p for d,p in data],
        'o-', label='P(Fail)')
ax.set_xlabel('Date')
ax.set_ylabel('P')
ax.legend()
fig.tight_layout()
 
# Create the report
report = f"""
Добрый день, **{name}**,
 
Рекомендация на завтра, **{report_date}**:
 
# Сидите уже дома!
 
## Вероятность неприятности на следующую неделю:
 
{fig_to_html(fig)}
 
Дата | Вероятность
-|-
"""
 
for d,p in data:
    report += f'{d} | {p:.02f}\n'
 
# Save output package:
bfj.save_package(
    label="result",
    files={"recommendation.md": lambda f: f.write(report.encode())})
 
Последняя строка означает, что программный модуль в процессе выполнения сохранит электронный отчет как переменную с расширением md в выходной пакет, которая будет содержать созданный отчет.
 
В приведенном примере электронный отчет содержит переменную name (задается в параметрах), data (вычисляется внутри программного модуля). При изменении переменных они так же будут обновляться автоматически. Для просмотра электронного отчета выберите следующий узел, и нажмите на Node Packages. Выберите пакет, переключитесь на Variables, и найдите переменную с расширением md. После нажатия на эту переменную откроется электронный документ. Вы увидите, что он генерируется каждый раз, когда обрабатывается пакет и передается в следующий узел с выходным пакетом.
 
 
 
Соединение отчета с отчетом
 
Электронные отчеты хранятся в узлах. Если вам нужно собрать эти отчеты в упорядоченном порядке в одно полотно, то воспользуйтесь "Workspace"ом .  Для электронных отчетов существует специальный виджет "Markdown report"
 
Синтаксис Markdown
 
Так как отчеты составляются в Markdown, рассмотрим базовый синтаксис необходимый для составления отчета(более подробно можете узнать перейдя по ссылке):
 
- для разделения абзацев оставьте между текстами пустую строку;
 
- для выделения заглавия используйте символ диез # перед словом;
 
- для переноса строки используйте два пробела после предыдущей строки;
 
- для разметки списков используйте * ,чтобы сделать вложенные списки используйте четыре пробела перед маркером пункта:
* элемент 1
    *вложенный элемент
 
- чтобы сделать упорядоченный список используйте перед элементом списка любую цифру с точкой:
0.  Элемент 1
0.  Элемент 2
 
Результат:
 
1. Элемент 1
2. Элемент 2
 
- для выделения слова курсивом заключите слова в одинарные _ _, или * *, для выделения жирным в двойные __ __ или ** **, чтобы был и жирным и курсивом в тройные ___ ___ или *** ***;
 
- для того, чтобы создать таблицу нужно столбцы закрывать в линии |, для разделения заглавия используется --- ;
 
- для выравнивания текста внутри таблицы используется :
 
Пример.
 
переменная 1 |переменная 2 |переменная 3|
| :--- | :---: | ---: |
|влево        |  по центру   |      вправо|
 
 
Обязательно разделяйте пробелом линии и двоеточие. Количество линий в каждой строке таблицы должны совпадать;
 
- для того чтобы вставить формулу используйте $ $. Нужен LaTeX, для корректного отображения формул;
 
- чтобы вставлять переменные в текст используйте**{variable}** ;
 
-чтобы вставить рисунок в отчет нужно прописать вызов некоторых библиотеки функции:
для Python библиотеки io, base64 и прописать функцию в коде:
 
def fig_to_html(fig, width='100%'):
    buf = io.BytesIO()
    plt.savefig(buf, format='png')
    buf.seek(0)
    data = base64.encodebytes(buf.read()).decode()
    return f'<img width="{width}" src="data:image/png;base64,\n{data}">'
 
она используется для преобразования рисунка в нужную кодировку;
 
- чтобы вставить рисунок в тексте используйте фигурные скобки {fig_to_html(fig)}, обязательно разделяйте вставку рисунка пустыми строками.
 
Поздравляем, теперь ваши проекты будут выглядеть ещё более презентабельными!!
 
Онлайн помощь создана в Dr.Explain