Извлечение данных
В отличие от других систем, для получения данных из Яндекс.Метрики будем использовать библиотеку 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)
|