Как стать автором
Обновить

Отправка статистики из DataFrame в BigQuery на примере статистики Яндекс Директ

Время на прочтение2 мин
Количество просмотров1.6K
В этой статье расскажу о том, как я свел статистику по всему контексту в одном месте с помощью BigQuery и Data Studio

У меня появилась необходимость визуализировать данные по всем источникам трафика.

Для данной задачи я использую Data Studio. Google Ads туда подтягивается прекраснейшим образом, а вот с Яндекс Директ все сложнее.

Я для себя выбрал полуручной способ сведения статистики: получение и отправка статистики со своего компьютера.

Я ежедневно получаю статитику в различных разрезах в DataFrame.



И это отлично потому, что в pandas есть библиотека pandas_gbq, которая умеет отправлять DataFrame в BigQuery.

Какую статистику хранить в BigQuery


Для начала давайте определимся с тем, какие разрезы статистики будем отправлять.
Так как мы в BigQuery можем хранить очень много информации, я откинул для себя статистику в разрезе дней.

Также нужно учитывать то, что нам нужно получать статистику минимум за месяц для перезаписи, так как рекламные системы обновляют старую статистику из-за скликивания.

Поэтому я для себя пока что не использую статистику в разрезе ключей, так как она часто бывает излишней.
Буду рассказывать все на примере ежедневной статистики в разрезе РК. (столбцы: дата и РК)

Далее речь пойдет о том, как модифицировать DataFrame, чтобы он отправился.

Модификация DataFrame



Проблема 1


По некоторым РК мы будем получать пустые поля в поведенческих факторах и конверсиях



Чтобы обойти эту проблему, нужно заменить минусы на «0».

f['Conversions'].replace(['--'],[0],inplace=True)
f['CostPerConversion'].replace(['--'],[0],inplace=True)
f['ConversionRate'].replace(['--'],[0],inplace=True)
f['AvgPageviews'].replace(['--'],[0],inplace=True)
f['BounceRate'].replace(['--'],[0],inplace=True)

И назначить числовой тип данных.

f[["Conversions","CostPerConversion","ConversionRate","AvgPageviews","BounceRate"]]=f[["Conversions","CostPerConversion","ConversionRate","AvgPageviews","BounceRate"]].apply(pd.to_numeric)

Проблема 2


Добавить отдельно индексируемый столбец. Если мы отправим такой DataFrame или посмотрим тип данных с помощью dtipe, увидим, что нет столбца с датами.

Чтобы исправить ситуацию, создадим столбец, который будет равняться индексируемому столбцу.

f['Date']=f.index


Получаем следующий DataFrame



Отправляем DataFrame в BigQuery


pandas_gbq.to_gbq(f,'мой датасет.файл',project_id='мой проект',if_exists='replace')

Указываем название DataFrame, Название Датасета, название файла (он может пока что не существовать), название проекта и то, как будет записываться файл (в нашем случае будет полная перезапись файла).

Получаем в BigQuery следующее:



Остается лишь визуализировать данные в DataStudio. Конечный код:

f['Date']=f.index

f['Conversions'].replace(['--'],[0],inplace=True)
f['CostPerConversion'].replace(['--'],[0],inplace=True)
f['ConversionRate'].replace(['--'],[0],inplace=True)
f['AvgPageviews'].replace(['--'],[0],inplace=True)
f['BounceRate'].replace(['--'],[0],inplace=True)

f[["Conversions", "CostPerConversion","ConversionRate","AvgPageviews","BounceRate"]] = f[["Conversions", "CostPerConversion","ConversionRate","AvgPageviews","BounceRate"]].apply(pd.to_numeric)

pandas_gbq.to_gbq(f, 'YD_Days.my_client_rk', project_id='my_project',if_exists='replace')

Спасибо за внимание!
Теги:
Хабы:
+11
Комментарии0

Публикации

Изменить настройки темы

Истории

Работа

Python разработчик
134 вакансии
Data Scientist
62 вакансии

Ближайшие события

PG Bootcamp 2024
Дата16 апреля
Время09:30 – 21:00
Место
МинскОнлайн
EvaConf 2024
Дата16 апреля
Время11:00 – 16:00
Место
МоскваОнлайн
Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн