-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocessing-general.py
61 lines (49 loc) · 2.4 KB
/
processing-general.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import logging
from datetime import date
from constants import DATA_TYPES, PARTIES
from models import Ad
from utils import recursive_round, render_template, time_range_len
logging.basicConfig(
format="[%(asctime)s] %(levelname)s: %(message)s",
level=logging.INFO,
datefmt="%Y-%m-%d %H:%M:%S",
)
SEPT_1 = date(year=2020, month=9, day=1)
NUMBER_OF_DATES = time_range_len(SEPT_1, date.today())
if __name__ == "__main__":
ads = list(Ad.ads_in_time_range(first_date=SEPT_1))
ads_per_party = {p: [ad for ad in ads if ad.party == p] for p in PARTIES}
most_expensive_ad = max(ads, key=lambda e: e.average_spending_per_day)
logging.info("Creating general data.")
general_data = {
"number-of-ads-total": len(ads),
"number-of-ads-party": [len(ads_per_party[p]) for p in PARTIES],
"spending-total-lower": sum(ad.spending_lower for ad in ads),
"spending-total-upper": sum(ad.spending_upper for ad in ads),
"spending-party": [sum(ad.average_spending for ad in ads_per_party[p]) for p in PARTIES],
"impressions-party": [sum(ad.average_impressions for ad in ads_per_party[p]) for p in PARTIES],
"most-expensive-ad": {
"id": most_expensive_ad.ad_id,
"party": most_expensive_ad.party,
"spend-per-day": most_expensive_ad.average_spending_per_day,
"days": most_expensive_ad.days_active,
},
"number-of-ads-party-daily": [[0] * NUMBER_OF_DATES for _ in PARTIES],
"spending-party-daily": [[0] * NUMBER_OF_DATES for _ in PARTIES],
"impressions-party-daily": [[0] * NUMBER_OF_DATES for _ in PARTIES],
"estimated-audience-size-party-daily": [[0] * NUMBER_OF_DATES for _ in PARTIES],
}
logging.info("Creating party specific data.")
for party_i, party in enumerate(PARTIES):
for ad in ads_per_party[party]:
for date_i in ad.active_date_indices(first_date=SEPT_1):
for data_type in DATA_TYPES:
general_data[f"{data_type}-party-daily"][party_i][date_i] += ad.rank_to_data(
data_type, "total", per_day=True
)
logging.info("Writing templates.")
logging.debug("Writing index.html.")
recursive_round(general_data)
render_template("index.html", "index.html", general_data=general_data)
logging.debug("Writing about.html.")
render_template("about.html", "about.html")