def build_post_level_report(self, f): PERMALINK = 1 MESSAGE = 2 POST_DATE = 6 TOTAL_REACH = 7 IMPRESSIONS = 10 post_data = list() csv = csvkit.reader(f) csv.next() csv.next() for idx, r in enumerate(csv): post_data.append( { "permalink": r[PERMALINK], "pubdate": datetime.datetime.strptime(r[POST_DATE], "%m/%d/%Y %H:%M:%S %p"), "message": r[MESSAGE], "totalreach": safe_cast(r[TOTAL_REACH], int, 0), "impressions": safe_cast(r[IMPRESSIONS], int, 0), } ) start_date = min(post_data, key=lambda i: i["pubdate"])["pubdate"] end_date = max(post_data, key=lambda i: i["pubdate"])["pubdate"] sorted_data = sorted(post_data, key=lambda i: i["totalreach"], reverse=True) top_posts = sorted_data[:10] sorted_data.reverse() bottom_posts = sorted_data[:10] return {"start_date": start_date, "end_date": end_date, "top_posts": top_posts, "bottom_posts": bottom_posts}
def build_page_level_report(self, f): DATE = 0 TOTAL_LIKES = 1 ENGAGED_USERS = 6 TOTAL_REACH = 26 IMPRESSIONS = 35 data = list() csv = csvkit.reader(f) csv.next() csv.next() for idx, r in enumerate(csv): data.append( { "date": datetime.datetime.strptime(r[DATE], "%Y-%m-%d"), "likes": safe_cast(r[TOTAL_LIKES], int, 0), "engaged_users": safe_cast(r[ENGAGED_USERS], int, 0), "reach": safe_cast(r[TOTAL_REACH], int, 0), "impressions": safe_cast(r[IMPRESSIONS], int, 0), } ) start_date = min(data, key=lambda i: i["date"])["date"] end_date = max(data, key=lambda i: i["date"])["date"] chart_labels = [datetime.datetime.strftime(x["date"], "%m/%d/%Y") for x in data] reach = [x["reach"] for x in data] impressions = [x["impressions"] for x in data] engaged = [x["engaged_users"] for x in data] likes = [x["likes"] for x in data] reach.insert(0, "Reach") impressions.insert(0, "Impressions") engaged.insert(0, "Engaged Users") likes.insert(0, "Page Likes") return { "start_date": start_date, "end_date": end_date, "chart_labels": chart_labels, "reach": reach, "impressions": impressions, "engaged_users": engaged, "likes": likes, }
def parse_page_dataset(self, ds): def _convert_date(d): return datetime.datetime.strftime(datetime.datetime.strptime(d[:10], "%Y-%m-%d"), "%m/%d/%Y") data = [(_convert_date(d["end_time"]), safe_cast(d["value"], int, 0)) for d in ds["values"]] return data