J'ai une base de données générée par une enquête pour évaluer les professeurs d'université. Ce que je veux, c'est un script python qui extrait les informations de cette base de données, génère un tableau graphique pour chaque utilisateur, crée des graphiques pour chaque utilisateur, puis le rend dans un modèle pour l'exporter au format PDF.
A quoi ressemble la base de données?
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
Chaque enseignant a plusieurs catégories à évaluer (respect, sagesse, etc.) et chaque catégorie est associée à des questions. En d'autres termes, une catégorie a plusieurs questions. Chaque ligne de la BD est la réponse à une question d’un élève qui évalue un enseignant
De quoi ai-je besoin?
Je dois créer un script pour générer automatiquement des rapports pdf résumant ces informations sous forme de graphiques, par exemple un graphique avec le score global de chaque enseignant, un autre graphique avec le score de chaque enseignant par catégorie, un autre graphique avec la moyenne de chaque élève, etc..Enfin, chaque enseignant aurait un rapport. Je veux un rapport comme celui-ci
Quelle est ma question?
ma question concerne les paquets et modules Python nécessaires pour cette tâche. Et quel serait le processus général de le faire. Je n'ai pas besoin du code, car je sais que la réponse est très générale, mais je sais comment le faire.
Par exemple: vous devez d’abord traiter les informations avec les pandas, créer un tableau qui récapitule les informations que vous voulez représenter, puis les tracer, puis créer un modèle de rapport avec le module XYZ, puis l’exporter au format pdf avec le module XYZ.
Il y a beaucoup d'options pour créer un pdf en python. ReportLab, pydf2, pdfdocument et FPDF sont quelques-unes de ces options.
La bibliothèque FPDF est assez difficile à utiliser et est ce que j'ai utilisé dans cet exemple. La documentation de FPDF peut être trouvée ici .
Il est peut-être bon aussi de penser aux modules python que vous pourriez utiliser pour créer des graphiques et des tableaux. Dans mon exemple, j'utilise matplotlib ( link to docs ) et j'utilise également Pandas pour créer un cadre de données à l'aide de pandas.dataframe()
.
J'ai posté ci-dessous un exemple assez long mais parfaitement reproductible, utilisant des pandas, matplotlib et fpdf. Les données sont un sous-ensemble de ce que le PO a fourni dans la question. Je parcours la base de données dans mon exemple pour créer la table, mais il existe des moyens alternatifs et peut-être plus efficaces de le faire.
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')
Test attendu.pdf:
Dans mon cas:
J'espère que cela t'aides.