<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Блог об аналитике, визуализации данных, data science и BI, заметки с тегом: Facebook</title>
<link>http://test.leftjoin.ru/tags/facebook/</link>
<description></description>
<generator>E2 (v3365; Aegea)</generator>

<item>
<title>Как развернуть Airbyte и подключить к нему Facebook API?</title>
<guid isPermaLink="false">133</guid>
<link>http://test.leftjoin.ru/all/deploy-airbyte-with-facebook-api/</link>
<comments>http://test.leftjoin.ru/all/deploy-airbyte-with-facebook-api/</comments>
<description>
&lt;p&gt;В этой статье мы покажем, как развернуть open-source сервис Airbyte на вашем компьютере и с его помощью подключиться к Facebook Marketing API.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/1-3.jpg" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Что такое Airbyte?&lt;/h2&gt;
&lt;p&gt;Airbyte — это платформа интеграции данных с открытым исходным кодом для создания ELT пайплайнов, которая помогает вам реплицировать данные в ваших хранилищах, озерах и базах данных. Кроме того, она имеет удобный интерфейс, который очень красиво оформлен (вы только посмотрите на эту осьминожку)!&lt;/p&gt;
&lt;h2&gt;Разворачиваем Airbyte&lt;/h2&gt;
&lt;p&gt;Установка Airbyte на машину выполняется достаточно просто. В этом можно убедиться, заглянув в &lt;a href="https://docs.airbyte.com/quickstart/deploy-airbyte"&gt;официальную документацию&lt;/a&gt;. Для этого выполнить несколько шагов:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Установить Docker (см. &lt;a href="https://www.docker.com/products/docker-desktop"&gt;Инструкции&lt;/a&gt;) и убедиться, что у вас стоит последняя версия docker-compose.&lt;/li&gt;
&lt;li&gt;Выполнить следующие команды в терминале:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/airbytehq/airbyte.git"&gt;git clone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;cd airbyte&lt;/li&gt;
&lt;li&gt;docker-compose up&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Как только в выводе терминала появится баннер Airbyte, UI станет доступен по адресу &lt;a href="http://localhost:8000."&gt;http://localhost:8000.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/1-31.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Подключаем Facebook&lt;/h2&gt;
&lt;p&gt;С полной документацией по работе с Facebook Marketing из Airbyte можно ознакомиться &lt;a href="https://docs.airbyte.com/integrations/sources/facebook-marketing"&gt;по ссылке&lt;/a&gt;. Мы же дадим выжимку из нее. Итак, для того, чтобы подключить Facebook в Airbyte, надо учесть следующие условия:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Наличие Facebook Ad Account ID (&lt;a href="https://www.facebook.com/business/help/1492627900875762"&gt;где его найти?&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Наличие Facebook App с включенным Marketing API (&lt;a href="https://developers.facebook.com/docs/marketing-apis/get-started/"&gt;подробнее&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Наличие Facebook Marketing API Access Token (&lt;a href="https://developers.facebook.com/docs/facebook-login/guides/access-tokens#apptokens"&gt;подробнее&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Запросить увеличение лимита на количество запросов: Facebook сильно ограничивает токены API, сгенерированные из приложений Facebook с уровнем «Стандартный доступ» (по умолчанию для новых приложений именно такой уровень доступа), что делает невозможным использование токена для синхронизации с Airbyte. Вам нужно будет запросить апгрейд до расширенного доступа для вашего приложения со следующими разрешениями (&lt;a href="https://developers.facebook.com/docs/marketing-api/overview/authorization/#access-levels"&gt;подробнее&lt;/a&gt;):
&lt;ul&gt;
  &lt;li&gt;Ads Management Standard Access&lt;/li&gt;
  &lt;li&gt;ads_read&lt;/li&gt;
  &lt;li&gt;Ads_management&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Перед этим вам нужно будет пройти процесс проверки вашей компании (&lt;a href="https://www.facebook.com/business/help/2058515294227817?id=180505742745347"&gt;подробнее&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;После этого можно подключить Facebook в Airbyte.&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Заходим в UI на вкладку Sources и нажимаем ‘+ new source’&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/2-30.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Выбираем в качестве источника Facebook Marketing и прописываем конфигурации подключения:
&lt;ul&gt;
  &lt;li&gt;Название источника, под которым он будет отображаться в Airbyte&lt;/li&gt;
  &lt;li&gt;Facebook Ad Account ID&lt;/li&gt;
  &lt;li&gt;Дата начала — с этого момента будут грузиться данные из Facebook (⚠️ВАЖНО: Данные по инсайтам можно получить только за последние 37 месяцев)&lt;/li&gt;
  &lt;li&gt;Дата окончания — до этого момента будут грузиться данные из Facebook (можно оставить пустым, чтобы получать последние данные из аккаунта)&lt;/li&gt;
  &lt;li&gt;Facebook Marketing API Access Token&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/3-26.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Также имеются несколько дополнительных конфигурационных опций:
&lt;ul&gt;
  &lt;li&gt;Включение удаленных данных Campaigns, Ads и AdSets&lt;/li&gt;
  &lt;li&gt;Сохранение миниатюр изображений&lt;/li&gt;
  &lt;li&gt;Настройка кастомных Insignts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/4-17.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;После заполнения полей нажимаем ‘Set up source’ и ждем, пока процесс подключения не завершится&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/5-16.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="5"&gt;
&lt;li&gt;При необходимости настройки подключения к источнику можно поменять на его вкладке ‘Settings’&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Может возникнуть ошибка в связи с тем, что версия фреймворка устарела. Тогда надо будет перейти в основную вкладку ‘Settings’ (шестеренка в левом нижнем углу), там выбрать ‘Sources’, в списке найти Facebook Marketing и нажать кнопку ‘Change’ (или нажать ‘Upgrade all’, чтобы загрузить все доступные обновления).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/5.5.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Подключаем хранилище данных&lt;/h2&gt;
&lt;p&gt;После того, как мы подключили Facebook Marketing, нам необходимо связать этот источник с нашим хранилищем данных.&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Нажимаем ‘add destination’ на вкладке с настроенным источником (см. пункт 4 предыдущего раздела) либо идем на вкладку ‘Destinations’ и там нажимаем ‘+ new destination’.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/6-16.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Далее выбираем тип хранилища, с которым будем работать. Airbyte может подключаться к большому количеству популярных СУБД. Опишем необходимые шаги конфигурации на примере работы с PostgreSQL. Заполняем следующие поля:
&lt;ul&gt;
  &lt;li&gt;Название хранилища, под которым оно будет отображаться в Airbyte&lt;/li&gt;
  &lt;li&gt;Хост&lt;/li&gt;
  &lt;li&gt;Порт&lt;/li&gt;
  &lt;li&gt;База данных&lt;/li&gt;
  &lt;li&gt;Схема&lt;/li&gt;
  &lt;li&gt;Пользователь&lt;/li&gt;
  &lt;li&gt;Пароль&lt;/li&gt;
  &lt;li&gt;Нужно ли использовать SSL&lt;/li&gt;
  &lt;li&gt;Параметры SSH туннеля (опционально)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/7-10.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;После заполнения полей нажимаем ‘Set up destination’ и ждем, пока процесс подключения не завершится&lt;/li&gt;
&lt;li&gt;Если вы выполняли подключение к хранилищу отдельно с вкладки ‘Destinations’, то надо связать с ним источник, нажав на ‘add source’&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/8-11.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="5"&gt;
&lt;li&gt;При необходимости настройки подключения к хранилищу можно поменять на его вкладке ‘Settings’&lt;/li&gt;
&lt;li&gt;Версию образа для работы с хранилищем можно обновить при необходимости (по аналогии с тем, что мы писали в конце предыдущего раздела)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Настраиваем связь источника и  хранилища данных&lt;/h2&gt;
&lt;p&gt;После всех проделанных шагов у нас открывается вкладка ‘Set up connection’, на которой мы можем настроить то, как и какие данные мы будем грузить с помощью Airbyte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Как часто будет происходить загрузка&lt;/li&gt;
&lt;li&gt;Куда именно мы будем помещать данные в хранилище&lt;/li&gt;
&lt;li&gt;Какие данные из источника мы будем брать и каким образом (Full refresh | Increment, Overwrite | Append)&lt;/li&gt;
&lt;li&gt;Надо ли нормализовывать данные (сырые данные все равно останутся в хранилище)&lt;/li&gt;
&lt;li&gt;Настройка кастомных трансформаций (опционально)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/9-10.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;br /&gt;
После заполнения полей, нажимаем ‘Set up connection’. Далее откроется страница настроенного подключения, где мы можем наблюдать историю выгрузок данных, а также вносить изменения в установленную связь Источник-Хранилище.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/10-9.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;br /&gt;
Если нажать на Sync, то будут показаны логи исполнения.&lt;/p&gt;
&lt;h2&gt;Результаты&lt;/h2&gt;
&lt;p&gt;После того, как загрузка была успешно завершена, мы можем заглянуть в наше хранилище.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/11-8.png" border="0" width="50%" height="50%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Сразу можно обратить внимание на количество сгенерированных таблиц.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/12-6.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Так как мы указали, что нам необходима нормализация данных, то у нас в результате получилось чуть меньше 400 таблиц для streams [activities, ‘ad_account’, ‘ad_creatives’, ‘ad_sets’, ‘ads’, ‘ads_insights’, ‘campaigns’], причем многие из них оказались пустыми (так сгенерировал Airbyte).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/13-6.png" border="0" width="20%" height="20%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Сырые данные содержатся в таблицах с именами ‘_airbyte_raw_*’. В таких таблицах имеется всего 3 поля — ‘_airbyte_ab_id’, ‘_airbyte_data’ и ‘_airbyte_emmited_at’. Столбец ‘_airbyte_data’ имеет тип jsonb.&lt;br /&gt;
Пример для ‘_airbyte_raw_ads_insights’:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/14-4.png" border="0" width="100%" height="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В процессе нормализации каждое поле из json выносится в отдельную колонку. Пример: часть списка колонок из таблицы ‘ads_insignts’:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/15-3.png" border="0" width="50%" height="50%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После получения основной нормализованной таблицы для каждого stream создаются различные breakdowns, например, для тех же ‘ads_insights’:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://test.leftjoin.ru/pictures/16-3.png" border="0" width="50%" height="50%"&gt;&lt;/a&gt;&lt;/p&gt;
</description>
<pubDate>Thu, 12 May 2022 16:04:39 +0300</pubDate>
</item>

<item>
<title>Собираем данные по рекламным кампаниям в Facebook</title>
<guid isPermaLink="false">36</guid>
<link>http://test.leftjoin.ru/all/collecting-costs-from-facebook-api/</link>
<comments>http://test.leftjoin.ru/all/collecting-costs-from-facebook-api/</comments>
<description>
&lt;p&gt;Давайте узнаем, как получить информацию о затратах, кликах и показах рекламных кампаний из Facebook.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;from facebook_business.api import FacebookAdsApi
from facebook_business.exceptions import FacebookRequestError
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adreportrun import AdReportRun
from facebook_business.adobjects.adsinsights import AdsInsights
from facebook_business.adobjects.campaign import Campaign
from facebook_business.adobjects.adset import AdSet
from facebook_business.adobjects.adaccountuser import AdAccountUser as AdUser
from facebook_business import adobjects
from matplotlib import pyplot as plt
from pandas import DataFrame
import time&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Получение ключа&lt;/h2&gt;
&lt;p&gt;Первое, что необходимо сделать для работы с Facebook API — создать приложение. Для этого заходим на &lt;a href="https://developers.facebook.com"&gt;https://developers.facebook.com&lt;/a&gt; — My Apps — Create App. Заполняем название приложения, контактный Email и жмём на «Create App ID»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/1.png" width="318" height="428" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Перед нами открывается Dashboard приложения. Переходим в Settings — Basic и записываем себе App ID и App Secret. Эти данные понадобятся для авторизации.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/2.png" width="217" height="135" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Теперь переходим в Tools — Graph API Explorer и оказываемся в меню для создания нового access token.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/3.png" width="480" height="320" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Токены выдаются под разные нужды, и нам нужно задать определенные права для нашего. Понадобится только на ads_managment — это право позволяет получать информацию о рекламных кампаниях вашего аккаунта Facebook. Добавляем его и нажимаем на «Generate Access Token».&lt;/p&gt;
&lt;p class="note"&gt;Осторожно — user access token изначально выдается как short-lived, уже через 1-2 часа он перестанет действовать.  Для получения long-lived Token можно нажать на синюю кнопку, чтобы открыть Access Token Info, а затем на «Open in Access Token Tool». Откроется новая страница, внизу которой появится синяя кнопка «Extend Access Token». После этого сгенерируется новый long-lived Access Token, действующий 60 дней.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/4.png" width="385" height="221" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/5.png" width="389" height="123" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Написание скрипта&lt;/h2&gt;
&lt;p&gt;Создадим три переменных, в которые запишем access token, App ID и App Secret. Авторизуемся через метод init() класса FacebooksAdsApi и добавляем пользователя. Метод get_ad_accounts() вернёт нам данные по всем нашим рекламным аккаунтам в виде словаря. По этим же данным можем получить информацию о кампаниях методом get_campaigns().&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="Python"&gt;
my_access_token = ''
my_app_id = ''
my_app_secret = ''
FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)

me = AdUser(fbid='me')
my_accounts = list(me.get_ad_accounts())
my_accounts

my_account = my_accounts[0]
campaigns = my_account.get_campaigns()
print(campaigns)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Попробуем получить amount spent через my_account. Для этого воспользуемся методом api_get(), передав в параметр fields поле AdAccount.Field.amount_spent. Теперь, чтобы получить желаемые данные, выведем поле у переменной my_account, поделив на 100, чтобы обрубить копейки. Расходы получаем в валюте аккаунта, в нашем случае это RUB. То, ради чего мы всё это затеваем — получить данные о расходах на рекламные кампании для последующего анализа.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;my_account.api_get(fields=[AdAccount.Field.amount_spent])
print(int(my_account[AdAccount.Field.amount_spent])/100)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Объявим переменную fields — в этом списке будут храниться поля, которые мы хотим получать: id кампании, количество кликов, затрат и просмотров. Теперь опишем две функции. Первая будет асинхронно отправлять запросы к Facebook и возвращать результаты. Вторая — формирует эти запросы и передает в первую функцию. В результате будем получать список словарей.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;fields = [
    AdsInsights.Field.campaign_id,
    AdsInsights.Field.clicks,
    AdsInsights.Field.spend,
    AdsInsights.Field.impressions]

count = 0

def wait_for_async_job(async_job):
    global count
    async_job = async_job.api_get()
    while async_job[AdReportRun.Field.async_status] != 'Job Completed' or async_job[
        AdReportRun.Field.async_percent_completion] &amp;lt; 100:
        time.sleep(2)
        async_job = async_job.api_get()
    else:
        print(&amp;quot;Job &amp;quot; + str(count) + &amp;quot; completed&amp;quot;)
        count += 1
    return async_job.get_result(params={&amp;quot;limit&amp;quot;: 1000})

def get_insights(account, date_preset='last_3d'):
    account = AdAccount(account[&amp;quot;id&amp;quot;])
    i_async_job = account.get_insights(
        params={
            'level': 'ad',
            'date_preset': date_preset,
            'time_increment': 1},
            fields=fields,
            is_async=True)
    results = [dict(item) for item in wait_for_async_job(i_async_job)]
    return results&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Следующий шаг — получение искомых данных о затратах. Будем собирать данные за всё время, поэтому заведём переменную date_preset, значение которой поставим lifetime. И для каждого аккаунта вызовем функцию get_insights(), а список, который она возвращает, положим в insights_lists.&lt;br /&gt;
Создадим DataFrame и вытащим из insights_lists интересующие данные — это id кампании, количество кликов, затраты и просмотры.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;elem_insights = []
insights_lists = []
date_preset = 'last_year'
for elem in my_accounts:
            elem_insights = get_insights(elem, date_preset)
            insights_lists.append(elem_insights)

insight_campaign_id_list = []
insight_clicks_list = []
insight_spend_list = []
insight_impressions_list = []
insight_date_start_list = []
insight_date_stop_list = []
for elem1 in insights_lists:
    for elem2 in elem1:
        insight_campaign_id_list.append(int(elem2['campaign_id']))
        insight_clicks_list.append(int(elem2['clicks']))
        insight_spend_list.append(float(elem2['spend']))
        insight_impressions_list.append(int(elem2['impressions']))
        insight_date_start_list.append(elem2['date_start'])
        insight_date_stop_list.append(elem2['date_stop'])

df = DataFrame()
df['campaign_id'] = insight_campaign_id_list
df['clicks'] = insight_clicks_list
df['spend'] = insight_spend_list
df['impressions'] = insight_impressions_list
df['date_start'] = insight_date_start_list
df['date_stop'] = insight_date_stop_list&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Получим такой DataFrame:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/7.png" width="465" height="226" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Давайте подытожим эти данные — сгруппируем по кампаниям и посчитаем суммы каждой колонки для групп. Для этого в pandas реализованы методы groupby() и sum() — достаточно указать, по какой колонке проводить группировку.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;df.groupby(['campaign_id']).sum()&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/9.png" width="294" height="117" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Теперь построим два графика — по количеству кликов и просмотров относительно дат. Воспользуемся атрибутом rcParams, чтобы задать размеры графиков.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;plt.rcParams['figure.figsize'] = [20, 5]
plt.plot(df.date_start.str.replace('2019-', ''), df.clicks)&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/10.png" width="992" height="269" alt="" /&gt;
&lt;/div&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;plt.rcParams['figure.figsize'] = [20, 5]
plt.plot(df.date_start.str.replace('2019-', ''), df.impressions)&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/11.png" width="992" height="269" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Вот и всё! Получили всю информацию о затратах, просмотрах и кликах. В следующем материале посмотрим, как выгрузить её в формате json и передать в Redash для последующего анализа и визуализации.&lt;/p&gt;
&lt;p&gt;&lt;span style='font-size:80%'&gt;Пост написан при участии команды Valiotti Analytics: Елисей Рыков (младший аналитик), Георгий Ушаков (технический консультант)&lt;/span&gt;&lt;/p&gt;
</description>
<pubDate>Mon, 11 May 2020 12:41:42 +0300</pubDate>
</item>


</channel>
</rss>