Python - Каков процесс создания PDF-отчетов с диаграммами из БД?

1

У меня есть база данных, созданная опросом для оценки университетских профессоров. Я хочу сценарий python, который берет информацию из этой базы данных, генерирует графическую таблицу для каждого пользователя, создает графики для каждого пользователя, а затем отображает ее в шаблоне для экспорта в pdf.

Как выглядит база данных?

User    Professor_evaluated  Category       Question    Answer
_________________________________________________________________
Mike    Professor Criss       respect           1         3
Mike    Professor Criss       respect           2         4
Mike    Professor Criss       wisdom            3         5
Mike    Professor Criss       wisdom            4         3
Charles Professor Criss       respect           1         3
Charles Professor Criss       respect           2         4
Charles Professor Criss       wisdom            3         5
Charles Professor Criss       wisdom            4         3

Каждый учитель имеет несколько категорий, которые должны быть оценены (уважение, мудрость и т.д.), И в свою очередь каждая категория связана с вопросами. Другими словами, у категории есть несколько вопросов. Каждая строка БД является ответом на вопрос от ученика, оценивающего учителя

Что мне нужно?

Мне нужно создать сценарий для автоматического создания отчетов в формате pdf, который суммирует эту информацию через диаграммы, например диаграмму с общим баллами каждого учителя, другую диаграмму со счетом каждого учителя по категории, другую диаграмму со средним значением для каждого ученика, и т.д. Наконец, у каждого учителя будет отчет. Мне нужен отчет, подобный этому Изображение 174551

В чем мой вопрос?

мой вопрос в том, какие пакеты и модули python мне понадобится для выполнения этой задачи. И каков будет общий процесс этого. Мне не нужен код, потому что я знаю, что ответ очень общий, но знание того, как я могу это сделать.

Например: вам сначала нужно обработать информацию с помощью pandas, создать таблицу, которая суммирует информацию, которую вы хотите отобразить, затем зарисуйте ее, затем создайте шаблон своего отчета с модулем XYZ, а затем экспортируйте его в pdf с помощью модуля XYZ,

  • 1
    ReportLab предлагает солидный пакет для создания PDF с хорошей документацией: reportlab.com/docs/reportlab-userguide.pdf
Теги:
pandas
matplotlib
jinja2
plotly

2 ответа

0
Лучший ответ

Существует много вариантов создания pdf файла в python. Некоторые из этих параметров - ReportLab, pydf2, pdfdocument и FPDF.

Библиотека FPDF довольно проста для использования и является тем, что я использовал в этом примере. Документацию FPDF можно найти здесь.

Возможно, также хорошо подумать о том, какие модули python вы можете использовать для создания графиков и таблиц. В моем примере я использую matplotlib (ссылка на docs), и я также использую Pandas для создания pandas.dataframe() с помощью pandas.dataframe().

Я опубликовал довольно длинный, но полностью воспроизводимый пример ниже, используя pandas, matplotlib и fpdf. Данные являются подмножеством того, что предоставил ОП в вопросе. Я прохожу через dataframe в моем примере, чтобы создать таблицу, но есть альтернативные и, возможно, более эффективные способы сделать это.

import pandas as pd
import matplotlib
from pylab import title, figure, xlabel, ylabel, xticks, bar, legend, axis, savefig
from fpdf import FPDF


df = pd.DataFrame()
df['Question'] = ["Q1", "Q2", "Q3", "Q4"]
df['Charles'] = [3, 4, 5, 3]
df['Mike'] = [3, 3, 4, 4]

title("Professor Criss Ratings by Users")
xlabel('Question Number')
ylabel('Score')

c = [2.0, 4.0, 6.0, 8.0]
m = [x - 0.5 for x in c]

xticks(c, df['Question'])

bar(m, df['Mike'], width=0.5, color="#91eb87", label="Mike")
bar(c, df['Charles'], width=0.5, color="#eb879c", label="Charles")

legend()
axis([0, 10, 0, 8])
savefig('barchart.png')

pdf = FPDF()
pdf.add_page()
pdf.set_xy(0, 0)
pdf.set_font('arial', 'B', 12)
pdf.cell(60)
pdf.cell(75, 10, "A Tabular and Graphical Report of Professor Criss Ratings by Users Charles and Mike", 0, 2, 'C')
pdf.cell(90, 10, " ", 0, 2, 'C')
pdf.cell(-40)
pdf.cell(50, 10, 'Question', 1, 0, 'C')
pdf.cell(40, 10, 'Charles', 1, 0, 'C')
pdf.cell(40, 10, 'Mike', 1, 2, 'C')
pdf.cell(-90)
pdf.set_font('arial', '', 12)
for i in range(0, len(df)):
    pdf.cell(50, 10, '%s' % (df['Question'].ix[i]), 1, 0, 'C')
    pdf.cell(40, 10, '%s' % (str(df.Mike.ix[i])), 1, 0, 'C')
    pdf.cell(40, 10, '%s' % (str(df.Charles.ix[i])), 1, 2, 'C')
    pdf.cell(-90)
pdf.cell(90, 10, " ", 0, 2, 'C')
pdf.cell(-30)
pdf.image('barchart.png', x = None, y = None, w = 0, h = 0, type = '', link = '')
pdf.output('test.pdf', 'F')

Ожидаемый тест.pdf:

Изображение 174551

  • 0
    это работает в окнах?
  • 0
    может ли этот пакет обрабатывать сложные отчеты с точностью?
Показать ещё 3 комментария
0

В моем случае:

  • Подключение к базе данных Oracle и извлечение данных с использованием библиотеки cx_Oracle
  • Использовать кадры данных Pandas для обработки данных
  • Используйте Matplotlib для генерации графиков
  • Используйте ExcelWriter и ReportLab для вывода в формате Excel или PDF

Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню