Извлечение данных

 
В отличие от других систем, для получения данных из Яндекс.Метрики будем использовать библиотеку tapi_yandex_metrika. Перед тем, как начать с ней работу, ее необходимо установить.
Для усправления пакетами Python в JupyterHub используется pip, поэтому, для установки необходимо использовать следующую команду в консоли:
pip install pyOpenSSL
pip install tapi-yandex-metrika
После того, как вы установили библиотеку, вам нужно будет ее импортировать. Также импортируем библиотеки json и Pandas как pd.
from tapi_yandex_metrika import YandexMetrikaStats
import json
import pandas as pd
Заводим переменные для токена и id (значения переменных вы получили в предыдущем пункте):
ACCESS_TOKEN = 'token'
METRIC_IDS = 'id'
По умолчанию возвращаются только 10000 строк отчета, если не указать другое кол-во в параметре limit. В отчете может быть больше строк, чем указано в limit, тогда необходимо сделать несколько запросов для получения всего отчета. Чтоб сделать это автоматически вы можете указать параметр receive_all_data=True при инициализации класса.
Параметры запроса для библиотеки tapi_yandex_metrika (Список метрик (metrics) и группировок (dimensions)):
api = YandexMetrikaStats(
    access_token=ACCESS_TOKEN
    receive_all_data=True # Если True, будет скачивать все части отчета. По умолчанию False.
)
params = dict(
    ids = METRIC_IDS,
    metrics = "ym:s:users,ym:s:visits,ym:s:pageviews,ym:s:bounceRate,ym:s:pageDepth,ym:s:avgVisitDurationSeconds",
    dimensions = "ym:s:date,ym:s:<attribution>TrafficSource,ym:s:<attribution>SourceEngine,ym:s:gender,ym:s:ipAddress",
    date1 = "2daysAgo",
    date2 = "yesterday",
    sort = "ym:s:date",
    accuracy="full",
    limit = 100
)
Получаем данные из Yandex.Metrika API:
result = api.stats().get(params=params)
result = result().data
result=result['data']
Создаем пустой dictionary (словарь данных), парсим в него исходный list формата Json и записываем полученные данные в переменную в виде DataFrame Pandas:
dict_data = {}
for i in range(0, len(result)-1):
    dict_data[i] = {
            'date':result[i]["dimensions"][0]["name"],
            'traffic-source':result[i]["dimensions"][1]["name"],
            'traffic-details':result[i]["dimensions"][2]["name"],
            'gender':result[i]["dimensions"][3]["name"],
            'ip':result[i]["dimensions"][4]["name"],
            'users':result[i]["metrics"][0],
            'visits':result[i]["metrics"][1],
            'pageviews':result[i]["metrics"][2],
            'bounceRate':result[i]["metrics"][3],
            'pageDepth':result[i]["metrics"][4],
            'avgVisitDurationSeconds':result[i]["metrics"][5]
          }
#Создаем DataFrame из dict (словаря данных или массива данных)
dict_keys = dict_data[0].keys()
df = pd.DataFrame.from_dict(dict_data, orient='index',columns=dict_keys)