it-swarm.com.de

Python - Wie werden PDF-Berichte mit Diagrammen aus einer DB erstellt?

Ich habe eine Datenbank, die durch eine Umfrage erstellt wurde, um Universitätsprofessoren zu bewerten. Was ich will, ist ein Python-Skript, das die Informationen aus dieser Datenbank entnimmt, für jeden Benutzer eine Grafiktabelle generiert, für jeden Benutzer Diagramme erstellt und diese dann in einer Vorlage darstellt, um sie in eine PDF-Datei zu exportieren.

Wie sieht die Datenbank aus?

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

Jedem Lehrer sind mehrere Kategorien zugeordnet, die bewertet werden sollen (Respekt, Weisheit usw.), und jeder Kategorie sind Fragen zugeordnet. Mit anderen Worten, eine Kategorie hat mehrere Fragen. Jede Zeile der Datenbank ist die Antwort auf eine Frage eines Schülers, der einen Lehrer bewertet

Was brauche ich?

Ich muss ein Skript erstellen, um automatisch PDF-Berichte zu erstellen, die diese Informationen in Diagrammen zusammenfassen, z. B. ein Diagramm mit der Gesamtbewertung jedes Lehrers, ein anderes Diagramm mit der Bewertung jedes Lehrers nach Kategorie, ein anderes Diagramm mit dem Durchschnitt jedes Schülers. usw .. Schließlich hätte jeder Lehrer einen Bericht. Ich möchte einen solchen Bericht  Example

Was ist meine Frage?

meine Frage ist, welche Python-Pakete und -Module ich für diese Aufgabe benötigen würde. Und was wäre der allgemeine Prozess dabei? Ich brauche den Code nicht, weil ich weiß, dass die Antwort sehr allgemein ist, aber das Wissen, wie ich es schaffen könnte.

Zum Beispiel: Sie müssten die Informationen zunächst mit Pandas verarbeiten, eine Tabelle erstellen, in der die Informationen zusammengefasst sind, die Sie grafisch darstellen möchten, die dann geplottet werden. Anschließend wird eine Vorlage für Ihren Bericht mit dem XYZ-Modul erstellt und anschließend in das PDF-Format exportiert mit XYZ-Modul.

3
Ale

Es gibt viele Möglichkeiten, ein PDF in Python zu erstellen. Einige dieser Optionen sind ReportLab, pydf2, pdfdocument und FPDF. 

Die FPDF-Bibliothek lässt sich nur wenig verwenden und habe ich in diesem Beispiel verwendet. Die FPDF-Dokumentation finden Sie hier

Vielleicht ist es auch gut, darüber nachzudenken, mit welchen Python-Modulen Sie Diagramme und Tabellen erstellen möchten. In meinem Beispiel verwende ich matplotlib ( link zu docs ) und benutze Pandas, um mit pandas.dataframe() einen Datenrahmen zu erstellen. 

Ich habe hier ein recht langatmiges, aber vollständig reproduzierbares Beispiel mit Pandas, Matplotlib und Fpdf veröffentlicht. Die Daten sind eine Teilmenge dessen, was das OP in der Frage bereitgestellt hat. In meinem Beispiel durchlaufe ich den Datenrahmen, um die Tabelle zu erstellen. Es gibt jedoch alternative und möglicherweise effizientere Möglichkeiten, dies zu tun.

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's 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's 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')

Erwartetes test.pdf:

Expected test.pdf

2
patrickjlong1

In meinem Fall:

  • Stellen Sie eine Verbindung zu Oracle Database her und extrahieren Sie Daten mithilfe der Bibliothek cx_Oracle
  • Verwenden Sie Pandas Dataframes zur Datenmanipulation
  • Verwenden Sie Matplotlib, um Diagramme zu erstellen
  • Verwenden Sie ExcelWriter und ReportLab für die Ausgabe im Excel- oder PDF -Format

Hoffe das hilft.

0
Fernando Garcia