From: Vincent Le Gallic Date: Sat, 4 Apr 2015 23:15:42 +0000 (+0200) Subject: [bde/stats/who_haz_photos] Scripts pour faire des stats sur le % de photos par promo X-Git-Url: http://gitweb.pimeys.fr/?a=commitdiff_plain;h=634e60a841478a0f0c785440c431ad40755c69b0;p=scripts-20-100.git [bde/stats/who_haz_photos] Scripts pour faire des stats sur le % de photos par promo --- diff --git a/bde/stats/who_haz_photos.py b/bde/stats/who_haz_photos.py new file mode 100755 index 0000000..c2d04de --- /dev/null +++ b/bde/stats/who_haz_photos.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +#-*- encoding: utf-8 -*- + +""" Pour déterminer combien d'adhérents ont une photo dans chaque promo. """ + +import sys +import os.path +import collections + +#: Chemin où est rangé le code de la Note Kfet +NOTE_ROOT_DIR = "/home/note/Note_Kfet_2015_server/" + +sys.path.append("%sserveur/" % NOTE_ROOT_DIR) +# BaseFonctions importe la conf, donc on a besoin de l'avoir dans le path +sys.path.append("%sconfig/" % NOTE_ROOT_DIR) +import BaseFonctions + +#: requête SQL pour récupérer les premières années d'adhésion de tout le monde +req_first_years = """SELECT adhesions.idbde, min(annee) AS year_first_adhesion + FROM adhesions INNER JOIN comptes ON comptes.idbde=adhesions.idbde + WHERE comptes.type='personne' + GROUP BY adhesions.idbde;""" + +#: requête SQL pour récupérer les id des clubs +req_clubs = "SELECT idbde FROM comptes WHERE type='club';" + +def get_ids(): + """Récupère les ids des clubs et des adhérents.""" + con, cur = BaseFonctions.getcursor() + cur.execute(req_first_years) + adhs = cur.fetchall() + cur.execute(req_clubs) + clubs = cur.fetchall() + return adhs, clubs + +def check_photos(ids): + """Renvoie un dico ``id -> True/False`` en fonction de si le compte ``id`` + a une photo pour chaque ``id`` dans ``ids``.""" + d = {i : os.path.isfile("%sphotos/%s.png" % (NOTE_ROOT_DIR, i)) for i in ids} + return d + +def compute(): + """Do the job""" + adhs, clubs = get_ids() + adhs = {a["idbde"] : a for a in adhs} + id_adhs = adhs.keys() + clubs = [c["idbde"] for c in clubs] + photos_adhs = check_photos(id_adhs) + photos_clubs = check_photos(clubs) + d = collections.defaultdict(lambda : {"has" : 0, "tot" : 0}) + for (i, has_photo) in photos_adhs.iteritems(): + d[adhs[i]["year_first_adhesion"]]["has"] += has_photo + d[adhs[i]["year_first_adhesion"]]["tot"] += 1 + for (i, has_photo) in photos_clubs.iteritems(): + d["clubs"]["has"] += has_photo + d["clubs"]["tot"] += 1 + return dict(d) + +if __name__ == "__main__": + import pprint + d = compute() + keys = d.keys() + keys.sort() + for k in keys: + v = d[k] + print "%s : %s/%s %s%%" % (k, v["has"], v["tot"], int(float(v["has"])/v["tot"] * 100))