Как исправить: сравнение результатов запроса BigQuery с списком
Я новичок в Python, я ценю любую помощь. Я хочу список действий группы, которые приобрели за 4$ таким образом: purchase_date(1,1,0,1,1,0,1)
где purchase_date
дата покупки, а arrays indeces+1
дает дни после покупок. 1 означает активный день, 0 означает не активный день. Например 20190203(1,1,1,0,0,0,1)
означает, что покупка была 2019-02-03
и после этого пользователь был активен 4, 5, 6 и 10 февраля.
Я попробовал код ниже. шаги:
- Создана дата с покупками:
four_dollar_buyers(user_pseudo_id,purchase_date)
, Запросил его и загрузил результат вfour_dollar_purchases
список. - Повторяется на
four_dollar
покупки - Сделано 2 вспомогательных массива:
seven_days_date
содержит даты после покупкиseven_days_number
должен содержать единицы и нули (активные или нет в данный день) - Итерация по
seven_days_date
, сделал запрос из таблицы данных на данную дату, что дало идентификаторы активных пользователей в этот день. Загрузить результат запроса в список с именем 'actives
' - Если
user_id
данной покупки в активах, тоseven_days_number
массив должен измениться от 0 до 1 по данному индексу.
client = bigquery.Client(project="project")
QUERY = ('SELECT * FROM `project.four_dollar_buyers`')
query_job = client.query(QUERY)
four_dollar_purchases = list(query_job.result())
for row in four_dollar_purchases:
seven_days_date = ["","","","","","",""]
seven_days_number = [0,0,0,0,0,0,0]
for i in range(7):
date_time_obj = datetime.strptime(row[1], '%Y%m%d')
date_time_obj = date_time_obj + timedelta(days=1)+timedelta(days=i)
seven_days_date[i] = date_time_obj.strftime("%Y%m%d")
for idx, days in enumerate(seven_days_date):
QUERY = ('''SELECT DISTINCT user_pseudo_id FROM
`project.events_'''+days+'''` WHERE event_name IN
("activity_added")''')
query_job = client.query(QUERY)
actives = list(query_job.result())
if row[0] in actives:
seven_days_number[idx] = 1
print(row[1] + str(seven_days_number))
Там больше нет сообщений об ошибках, но весь результат такой 20181212(0,0,0,0,0,0,0)
, Так что по какой-то причине вспомогательный массив не меняется, после даты покупки он дает только нули. Я проверил переменные row[0] и actives с помощью pprint, и они оба содержат правильный результат.
2 ответа
query_job = client.query(QUERY)
actives = list(query_job.result())
for dict in actives:
if dict[0] == row[0]:
seven_days_number[idx] = 1
print(row[1] + str(seven_days_number))
Days не является целочисленным типом, как предположил ralaxpy. Таким образом, вы можете использовать перечисление или что-то еще, чтобы изменить список с помощью индекса.