Skip to main content

Custom Auto Report Generator for Python Program

Project description

HK-journalist: Custom Automatic Report Generator for Python program!

Python Versions PyPI Version License PyPI - Downloads code size panodc TeXLive documents status

It is a light and useful Python module, helping you generate a small size, pretty report as PDF slides (or any other format documents which humans can directly read and hand out) each time after your programs finish. All you need to do is to customize a report template using MarkDown with variables names used in your Python program and maintain a dict to store those variables. Then, A few lines of code added before the end of programs can automatically fetch and display them in the final report file. Also, the codes intended to deal with frequent structures/arguments changes or data source changes can benefit from the package if the report can play a role of 'snapshot' (with timestamp) of each code version.

Table of Contents

Quick Start

Before installing hkjournalist, please make sure pandoc and pdflatex are already properly installed in the environment. (install instruction)

Install

pip install hkjournalist

Customize your report template

Write such an md file, use a pair of {} to wrap every variable which will be assigned a specified value in your code. save it to template.md

% Hello World
% Xinyi Li
% 2019-12-19

---

### sine plot

![]({sin_plot})

### sine table

{sin_table}

### sine function

```{{.python}}
{sin_func}
```

Run a Journalist() in your code to fetch variables

First, you should define a dict to record mapping with variable names and their value

from hkjournalist import Journalist

config = {}

Then, start your programming, and do not forget to assign value to corresponding variable names in config:

def sin_2x_and_cos_2x(x):
    y = np.sin(x) * np.sin(x) + np.cos(x) *  np.cos(x)
    return y

x = np.arange(0, 4 * np.pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

df = pd.DataFrame({'x': x, 'sin(x)': y1, 'cos(x)': y2})
df['sin^2^(x)+cos^2^(x)'] = sin_2x_and_cos_2x(df['x']).values
df = df.set_index('x')

# plot sine curve as sin_plot
ax = df.plot()
plt.tight_layout()
config['sin_plot'] = ax

# random select 5 point (x,y) as sin_table
config['sin_table'] = df.sample(5)

# sin_2x_and_cos_2x as sin_func
config['sin_func'] = sin_2x_and_cos_2x

Invite a journalist to make a big news report

Last but not least, attach 3 lines critical code below to have your Journalist make a report and save it to big_news.pdf (you can get all code above in demo and the output file big_news.pdf)

# HK journalist runs faster than everyone! hear variable and make a report
reporter = Journalist(template_file='template.md')
reporter.hear(config)
reporter.report(output_file='big_news.pdf', beamer=True, overwrite=True)

Report slides display as below:

I am too lazy to write an md template

If you have too many variables to report, which make write a template a big project, or simply don't want to write an md template, No problem! hkjournalist can generate a report template with each variable on one slide page automatically. With slight modification or directly using it as a template, you can get your real report.

Example

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from hkjournalist import Journalist

config = {}

for i in range(1, 4):
    uniform_data = np.random.rand(10, 12)
    plt.figure(figsize=(10, 8))
    ax = sns.heatmap(uniform_data, cmap='Blues', annot=True, linewidth=.5)
    plt.tight_layout()
    config[f'Plot_{i}'] = ax

reporter = Journalist(fig_height='80%')
reporter.hear(config)
reporter.generate_template('auto_generate_template.md')
reporter.report(output_file='auto_report.pdf', beamer=True, overwrite=True)

Output (raw file ):

Support For zh_CN

Yes, now, from version 0.0.5, it can use template contains chinese characters :tada:.

Just pass argument zh=True when creating a Journalist(), or set its zh property at any time before generating reports.

reporter = Journalist(template_file='./reports/template.md', zh=True)

If you want to use your customized template with chinese characters, don't forget to add one line at first of the YAML metadata block in your Markdown template:

---
documentclass: ctexbeamer
...
---

Here is a simple example similar to Quick start, Except for its template containing chinese characters. A perfect chinese slides file can be generated by the program as:

Note: make sure xelatex is installed properly.

More details can be found in API Documentation and this tutorial.

What will my variables on slides look like?

All variables pass to Journalist via hear will display as strings just like what their __str__ method does.

Except for 4 types with special support:

  • pandas.DataFrame: -> a 3-line table (TeX default style)
  • matplotlib.axes.SubplotBase (known as base figure object ax in matplotlib): -> a figure print on report (with high quality and small size as pdf)
  • function: -> its full definition
  • list(str): -> len(list) followed by a sentance with all words concatenated.

Besides, list(str) and pandas.DataFrame may be too long to display, which are allowed to span multiple pages in final slides.

More examples and instructions

  • [Documentation(https://hk-journalist.readthedocs.io/)
  • More complex usages available in examples
  • How to write a sophisticated slides template using md? See pandoc tutorials

Tips

  • Before pass plt.Axes object (figure object used in matplotlib) to dict, use plt.tight_layout()statement to adjust its size.
  • Use double curly braces {{}} to escape {} in the template.
  • Turn off parameter overwrite in Journalist.report(), you will get a file name with a timestamp in it. All these reports generated by such a method serve as snapshots.
  • To produce plain PDF article document instead of beamer slides, turn off beamer in report().

Prerequirements

And if you use some IDEs like PyCharm, you need to add their path (use which tex and which pandoc in bash environment to find them) to environment variables $PATH in IDE run options. (e.g. in Pycharm,run-> edit configuration -> environment variables)

For Jupyter Notebook users, the final output file may not be opened on Chrome (see this question). So, for convenience, you can download Firefox to write notebooks and view pdf reports right after generating.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hkjournalist-0.0.8.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

hkjournalist-0.0.8-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file hkjournalist-0.0.8.tar.gz.

File metadata

  • Download URL: hkjournalist-0.0.8.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.5.0.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for hkjournalist-0.0.8.tar.gz
Algorithm Hash digest
SHA256 54f94a371c8525dd7e079b57feda78141b4d740013084e025a8168c86deda1e1
MD5 38b7d3fcada4acab5a9c669186284bb1
BLAKE2b-256 2afe0c55dd9d25394285daee6234626774a7c7956dd382693973b6a715881507

See more details on using hashes here.

File details

Details for the file hkjournalist-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: hkjournalist-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.5.0.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4

File hashes

Hashes for hkjournalist-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 4d6df5000c9dfd1509217a8d557692e3f696bf1fc8f8a8eded8c4913932260a4
MD5 2311b074872c7f44ec525a0ea743559b
BLAKE2b-256 ab243dad5864603ee4881bfc9fdf6c19bcbacfbfdbd14bb8abb9f005a563df68

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page