Generator
import random
import datetime
import string
DATE_FROM = datetime.date(2019, 1, 1)
DATE_TO = datetime.date(2019, 4, 30)
DATES = []
AUDIENCE_COUNT = 1000
DEMOGRAPHY_SIZE = 100
TARGETS = 100
LISTS = 100
SPOTS = 1000
random.seed(42)
def random_person():
demography = random.choices([1,2,3], k=DEMOGRAPHY_SIZE)
#demography = ''.join([str(i) for i in demography])
return demography
AUDIENCE = [random_person() for i in range(AUDIENCE_COUNT)]
def random_demography_permutation():
person_index = random.randrange(AUDIENCE_COUNT)
demography_index = random.randrange(DEMOGRAPHY_SIZE)
value = random.randint(1, 3)
AUDIENCE[person_index][demography_index] = value
def random_contacts():
contacts = [' '] * 1440
for i in range(random.randrange(200)):
index = random.randrange(1440)
value = random.choice(string.ascii_uppercase)
contacts[index] = value
return contacts
DATE = DATE_FROM
while DATE <= DATE_TO:
print("DATE {}".format(DATE))
DATES.append(DATE)
random_demography_permutation()
for i, person in enumerate(AUDIENCE):
if random.randint(0, 100) == 0:
continue
weight = random.randint(3000, 5000)
print("PERSON_ID {}".format(i))
print("WEIGHT {}".format(weight))
print("DEMOGRAPHY {}".format(''.join([str(i) for i in person])))
print("CONTACTS {}".format(''.join(random_contacts())))
DATE = DATE + datetime.timedelta(days=1)
for i in range(TARGETS):
print("TARGET {}".format(i))
for k in range(random.randint(1, 5)):
print("CONDITION {}".format(k))
for j in range(10):
index = random.randrange(DEMOGRAPHY_SIZE)
val_1 = random.randint(1, 3)
val_2 = random.randint(1, 3)
val_1, val_2 = min(val_1, val_2), max(val_1, val_2)
print("{} {}-{}".format(index, val_1, val_2))
for i in range(LISTS):
print("LIST {}".format(i))
print("TARGET {}".format(random.randrange(TARGETS)))
dates = random.choices(DATES, k=SPOTS)
channels = random.choices(string.ascii_uppercase, k=SPOTS)
minutes = random.choices(range(1440), k=SPOTS)
for date, channel, minute in zip(dates, channels, minutes):
print("SPOT {} {} {}".format(date, minute, channel))
Zadanie pierwsze:
Wymyślić strukturę bazy danych w postgresie (co najmniej 10.0)
Wczytać jak najszybciej dane z generatora
Dla każdej z list spotów (oddzielnie) obliczyć GRP (suma wag osób z grupy które obejrzały spot podzielona przez rozmiar grupy) dla każdego ze spotów
Przygotować raport z testowania wydajności
Grupa (target) składa się z wielu warunków (condition). Wystarczy, żeby osoba spełniała jeden z warunków aby należała do grupy. Grupa specyfikuje jakie pola demografii mają przyjmować jakie wartości (np. 3 2-3 oznacza że pole czwarte (indeksy od zera) ma być dwójką lub trójką). Osoba może jednego dnia być w grupie a drugiego jej może nie być (zmienia się demografia osoby)