def detail_stats(facility_id, user=None, state=None): data = load_reports(user=user, state=state) def fac_filter(r, facility_id): if facility_id is None: return True elif facility_id == -999: # 'other' sites return r['facility'] is None else: return r['facility'] == facility_id filtered_data = [r for r in data if fac_filter(r, facility_id)] facilities = facilities_by_id() def month_detail(data, label): categories = ['satisfied'] categories.extend(COMPLAINT_TYPES) return { 'total': len(data), 'logs': sorted(data, key=lambda r: r['timestamp'], reverse=True), 'stats': dict((k, map_reduce(data, lambda r: [(r[k],)] if r.get(k) is not None else [], len)) for k in categories), 'clinic_totals': [[facilities.get(k), v] for k, v in map_reduce(data, lambda r: [(r['facility'],)], len).iteritems()], 'month': label[0], '_month': label[1], } by_month = map_reduce(filtered_data, lambda r: [((r['month'], r['_month']), r)]) stats = [month_detail(by_month.get(month_key, []), month_key) for month_key in u.iter_report_range(filtered_data)] return sorted(stats, key=lambda e: e['_month'])
def main_dashboard_stats(user=None, state=None): data = load_reports(state=state, user=user) facilities = facilities_by_id() def month_stats(data, label): return { 'total': len(data), 'satisfaction': map_reduce(data, lambda r: [(r['satisfied'],)], len), 'by_category': dict((k, len([r for r in data if k in r])) for k in COMPLAINT_TYPES), 'by_clinic': [[facilities.get(k), v] for k, v in map_reduce(data, lambda r: [(r['facility'],)], len).iteritems()], 'month': label[0], '_month': label[1], } by_month = map_reduce(data, lambda r: [((r['month'], r['_month']), r)]) stats = [month_stats(by_month.get(month_key, []), month_key) for month_key in u.iter_report_range(data)] return sorted(stats, key=lambda e: e['_month'])
def detail_stats(facility_id, user=None): data = load_reports(user=user) facilities = map_reduce(get_facilities(), lambda e: [(e['id'], e)], lambda v: v[0]) def fac_filter(r, facility_id): if facility_id is None: return True elif facility_id == 999: # 'other' sites return r['facility'] is None else: return r['facility'] == facility_id filtered_data = [r for r in data if fac_filter(r, facility_id)] LIMIT = 50 def month_detail(data, label): return { 'total': len(data), 'logs': sorted(data, key=lambda r: r['timestamp'], reverse=True)[:LIMIT], 'stats': dict((k, map_reduce(data, lambda r: [(r[k],)], len)) for k in ( 'satisfied', 'wait_bucket', 'staff_friendliness', 'price_display', 'drug_availability', 'cleanliness', )), 'clinic_totals': [[facilities.get(k), v] for k, v in map_reduce(data, lambda r: [(r['facility'],)], len).iteritems()], 'month': label[0], '_month': label[1], } by_month = map_reduce(filtered_data, lambda r: [((r['month'], r['_month']), r)]) stats = [month_detail(by_month.get(month_key, []), month_key) for month_key in u.iter_report_range(filtered_data)] return sorted(stats, key=lambda e: e['_month'])
def main_dashboard_stats(user=None): data = load_reports(user=user) facilities = map_reduce(get_facilities(), lambda e: [(e['id'], e)], lambda v: v[0]) def month_stats(data, label): return { 'total': len(data), 'satisfaction': map_reduce(data, lambda r: [(r['satisfied'],)], len), 'by_category': dict((k, len([r for r in data if r[k]])) for k in ( 'waiting_time', 'staff_friendliness', 'price_display', 'drug_availability', 'cleanliness', )), 'by_clinic': [[facilities.get(k), v] for k, v in map_reduce(data, lambda r: [(r['facility'],)], len).iteritems()], 'month': label[0], '_month': label[1], } by_month = map_reduce(data, lambda r: [((r['month'], r['_month']), r)]) stats = [month_stats(by_month.get(month_key, []), month_key) for month_key in u.iter_report_range(data)] return sorted(stats, key=lambda e: e['_month'])