Два типа диаграмм на одном графике
C redash можно строить сводные таблицы, отображать воронки и когорты, а также использовать карт для отображения гео-данных.
В следующих постах я расскажу о диаграмме для построения воронки (но перед этим научимся подключать google analytics).
C redash можно строить сводные таблицы, отображать воронки и когорты, а также использовать карт для отображения гео-данных.
В следующих постах я расскажу о диаграмме для построения воронки (но перед этим научимся подключать google analytics).
Как подключить google analytics к redash?
http://leftjoin.ru/all/kak-podklyuchit-google-analytics-k-redash/
В этой статье разберем как подключить источник данных Google Analytic к сервису Redash (http://redash.io/) [подробнее Redash и его возможности мы разбирали в предыдущих заметках (http://leftjoin.ru/all/redash-polnocennaya-on-demand-analitika/)].
Создаем сервисный аккаунт в Google
Переходим в консоль сервисных аккаунтов (https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts?supportedpurview=project&project=&folder=&organizationId=).
http://leftjoin.ru/all/kak-podklyuchit-google-analytics-k-redash/
В этой статье разберем как подключить источник данных Google Analytic к сервису Redash (http://redash.io/) [подробнее Redash и его возможности мы разбирали в предыдущих заметках (http://leftjoin.ru/all/redash-polnocennaya-on-demand-analitika/)].
Создаем сервисный аккаунт в Google
Переходим в консоль сервисных аккаунтов (https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts?supportedpurview=project&project=&folder=&organizationId=).
Взболтать, но не смешивать: как подружить бизнес и IT
Противостояние заказчиков и исполнителей вечно и неизбежно. Первые пишут ужасные ТЗ, вторые выдают результат хз, и с обеих сторон копятся взаимные претензии.
Это происходит даже в рамках одной компании, где бизнес выступает в качестве заказчика, а IT — исполнителя. Подразделения настолько разные, что не понимают друг друга, а в это время работа буксует.
Все так живут, и ладно, справляются же как-то?
В МТС решили, что нет, не ладно. Евгений Селиверстов, руководитель продуктовой культуры, рассказал, как компания смогла перестроить работу и улучшить взаимодействие бизнеса и IT. Теперь оба направления более полно используют свои ресурсы, вовлекаются в совместную работу и главное — говорят на одном языке. Примеры — в видео выше, а подробности в телеграм-канале Грейд Клуба.
Грейд Клуб — HR-платформа Яндекса Практикума по развитию цифровых команд. На канале постят новости на стыке HR и IT, кейсы и полезные материалы, поэтому очень советуем подписаться!
#реклама
Противостояние заказчиков и исполнителей вечно и неизбежно. Первые пишут ужасные ТЗ, вторые выдают результат хз, и с обеих сторон копятся взаимные претензии.
Это происходит даже в рамках одной компании, где бизнес выступает в качестве заказчика, а IT — исполнителя. Подразделения настолько разные, что не понимают друг друга, а в это время работа буксует.
Все так живут, и ладно, справляются же как-то?
В МТС решили, что нет, не ладно. Евгений Селиверстов, руководитель продуктовой культуры, рассказал, как компания смогла перестроить работу и улучшить взаимодействие бизнеса и IT. Теперь оба направления более полно используют свои ресурсы, вовлекаются в совместную работу и главное — говорят на одном языке. Примеры — в видео выше, а подробности в телеграм-канале Грейд Клуба.
Грейд Клуб — HR-платформа Яндекса Практикума по развитию цифровых команд. На канале постят новости на стыке HR и IT, кейсы и полезные материалы, поэтому очень советуем подписаться!
#реклама
Telegram
Грейд клуб | HR-Tech
Грейд клуб — сообщество Яндекс Практикума по развитию цифровых команд.
Подать заявку на участие во встречах клуба: https://practicum.yandex.ru/grade/club#
Вопросы по платформе Грейд и обучению – @DaShevchenko, сотрудничество с каналом – @milana_borisova
Подать заявку на участие во встречах клуба: https://practicum.yandex.ru/grade/club#
Вопросы по платформе Грейд и обучению – @DaShevchenko, сотрудничество с каналом – @milana_borisova
Когда мы все установили, Analytics API должен гореть зеленым
Добавляем сервисного пользователя в Google Analytics
Далее, необходимо добавить созданного нами сервисного пользователя в Google Analytics. Пользователь будет иметь примерно такой вид:
user@PROJECT-ID.iam.gserviceaccount.com.
Необходимо добавлять пользователя (https://support.google.com/analytics/answer/1009702) с правами на Чтение и Просмотр.
Создаем новый источник данных в Redash
Идем в Настройки (Settings) -> Добавляем новый источник данных
Добавляем сервисного пользователя в Google Analytics
Далее, необходимо добавить созданного нами сервисного пользователя в Google Analytics. Пользователь будет иметь примерно такой вид:
user@PROJECT-ID.iam.gserviceaccount.com.
Необходимо добавлять пользователя (https://support.google.com/analytics/answer/1009702) с правами на Чтение и Просмотр.
Создаем новый источник данных в Redash
Идем в Настройки (Settings) -> Добавляем новый источник данных
Подключаем новый источник данных.
Нас интересует источник данных Google Analytics, поэтому ищем «google»:
Нас интересует источник данных Google Analytics, поэтому ищем «google»:
Ищем google analytics в источниках данных.
Вспоминаем, куда мы сохранили JSON файл, он нам сейчас потребуется
Вспоминаем, куда мы сохранили JSON файл, он нам сейчас потребуется
Выбираем созданный ранее JSON файл
Пишем запрос к новому источнику данных
Именно в таком виде запрос выполняется в консоли redash:
{
"ids": "ga:128886640",
"start_date": "30daysAgo",
"end_date": "yesterday",
"metrics": "ga:users,ga:newUsers,ga:goal1Starts,ga:goal2Completions,ga:goal3Starts,ga:transactions,ga:transactionRevenue",
"dimensions": "ga:date"
}Как узнать параметры для выполнения запроса?
У Google есть отличный ресурс Query Explorer (https://ga-dev-tools.appspot.com/query-explorer/), в котором можно найти все необходимые метрики и измерения, которые доступны в Google Analytics.
Надеюсь, данная инструкция оказалась вам полезной, далее мы разберемся как построить воронку целей в Redash на основании данных из Google Analytics.
Пишем запрос к новому источнику данных
Именно в таком виде запрос выполняется в консоли redash:
{
"ids": "ga:128886640",
"start_date": "30daysAgo",
"end_date": "yesterday",
"metrics": "ga:users,ga:newUsers,ga:goal1Starts,ga:goal2Completions,ga:goal3Starts,ga:transactions,ga:transactionRevenue",
"dimensions": "ga:date"
}Как узнать параметры для выполнения запроса?
У Google есть отличный ресурс Query Explorer (https://ga-dev-tools.appspot.com/query-explorer/), в котором можно найти все необходимые метрики и измерения, которые доступны в Google Analytics.
Надеюсь, данная инструкция оказалась вам полезной, далее мы разберемся как построить воронку целей в Redash на основании данных из Google Analytics.
Строим funnel-репорт в redash
http://leftjoin.ru/all/stroim-funnel-report-v-redash/
Итак, мы планировали разобрать Funnel-визуализацию отчета в redash.
В первую очередь, построим запрос к подключенному нами источнику данных (http://leftjoin.ru/all/kak-podklyuchit-google-analytics-k-redash/) — google analytics.
Прямо вот такой текст необходимо положить в консоль запроса:
{
"ids": "ga:128886640",
"start_date": "30daysAgo",
"end_date": "yesterday",
"metrics": "ga:users,ga:goal1Completions,ga:goal2Completions,ga:goal3Completions"
}Мы данном запросе мы просим API Google Analytics отдать данные за последние 30 дней по аккаунту GA: 128886640. Мы хотим увидеть число пользователей и число выполнения целей 1, 2 и 3.
В итоге получаем таблицу следующего вида:
ga:users
ga:goal1Completions
ga:goal2Completions
ga:goal3Completions
3,926
105
41
32
Отлично, это именно то, что нам нужно для построения воронки.
Расскажу об одной очень полезной фиче Redash: query-results. Чтобы подключить таблицы с результатами выполнения запросов, идем в Data Sources и ищем query-results (beta). Подключаем новый источник данных.
Теперь у нас появилась возможность обращаться к результатам запросов redash. Так, например, мы можем воспользоваться результатами запроса к Google Analytics.
Как это сделать?
Необходимо выбрать слева источник данных query-results:
http://leftjoin.ru/all/stroim-funnel-report-v-redash/
Итак, мы планировали разобрать Funnel-визуализацию отчета в redash.
В первую очередь, построим запрос к подключенному нами источнику данных (http://leftjoin.ru/all/kak-podklyuchit-google-analytics-k-redash/) — google analytics.
Прямо вот такой текст необходимо положить в консоль запроса:
{
"ids": "ga:128886640",
"start_date": "30daysAgo",
"end_date": "yesterday",
"metrics": "ga:users,ga:goal1Completions,ga:goal2Completions,ga:goal3Completions"
}Мы данном запросе мы просим API Google Analytics отдать данные за последние 30 дней по аккаунту GA: 128886640. Мы хотим увидеть число пользователей и число выполнения целей 1, 2 и 3.
В итоге получаем таблицу следующего вида:
ga:users
ga:goal1Completions
ga:goal2Completions
ga:goal3Completions
3,926
105
41
32
Отлично, это именно то, что нам нужно для построения воронки.
Расскажу об одной очень полезной фиче Redash: query-results. Чтобы подключить таблицы с результатами выполнения запросов, идем в Data Sources и ищем query-results (beta). Подключаем новый источник данных.
Теперь у нас появилась возможность обращаться к результатам запросов redash. Так, например, мы можем воспользоваться результатами запроса к Google Analytics.
Как это сделать?
Необходимо выбрать слева источник данных query-results:
Выпадающее меню с выбором источников данных (в консоли — слева)
Теперь научимся делать funnel-визуализацию. Для этого пишем следующий SQL-запрос:
select 'Добавление товара в корзину' as step_name, ga_goal1Completions as goalCompletion from query_8
union all
select 'Просмотр корзины' as step_name, ga_goal2Completions from query_8
union all
select 'Оформление заказа' as step_name, ga_goal3Completions from query_8В данном случае query_8 — это как раз таблица с результатами запроса к источнику данных Google Analytics.
Настроим визуализацию:
Теперь научимся делать funnel-визуализацию. Для этого пишем следующий SQL-запрос:
select 'Добавление товара в корзину' as step_name, ga_goal1Completions as goalCompletion from query_8
union all
select 'Просмотр корзины' as step_name, ga_goal2Completions from query_8
union all
select 'Оформление заказа' as step_name, ga_goal3Completions from query_8В данном случае query_8 — это как раз таблица с результатами запроса к источнику данных Google Analytics.
Настроим визуализацию:
Аккуратно выбираем параметры, чтобы получить желаемый результат
В итоге мы получаем воронку конверсий из одной цели в другую:
В итоге мы получаем воронку конверсий из одной цели в другую:
Собираем данные с чеков гипермаркетов на Python
http://leftjoin.ru/all/sobiraem-dannye-s-chekov-gipermarketov-na-python/
Недавно, покупая в очередной раз продукты в гипермаркете, вспомнил, что согласно ФЗ-54 любой оператор торговли, который пробивает кассовый чек, обязан отправлять данные чека в налоговую.
http://leftjoin.ru/all/sobiraem-dannye-s-chekov-gipermarketov-na-python/
Недавно, покупая в очередной раз продукты в гипермаркете, вспомнил, что согласно ФЗ-54 любой оператор торговли, который пробивает кассовый чек, обязан отправлять данные чека в налоговую.
Чек из гипермаркета «Лента», QR-код, который нас интересует, обведен
Что это значит для нас, аналитиков данных? Что мы можем лучше узнать себя, свои потребности и получить интересные данные о собственных покупках.
Попробуем в рамках серии постов собрать небольшой прототип приложения, которое позволит строить динамику своих покупок. Итак, начнем с того, что в каждом чеке есть QR-code, если его распознать, то мы получим следующую строку:
t=20190320T2303&s=5803.00&fn=9251440300007971&i=141637&fp=4087570038&n=1
В данной строке содержатся:
t — timestamp, время, когда вы осуществили покупку
s — сумма чека
fn — кодовый номер fss, потребуется далее в запросе к API
i — номер чека, он нам потребуется далее в запросе к API
fp — параметр fiscalsign, потребуется далее в запросе к API
В рамках решения первого шага нашей задачи мы будем парсить данные чека и собирать их в pandas dataframe, используя модули Python.
Мы воспользуемся API (https://habr.com/ru/post/358966/), который отдает данные по чеку с сайта налоговой.
В начале получим аутентификационные данные:
import requests
your_phone = '+7XXXYYYZZZZ' #нужно указать ваш телефон, на него придет СМС с паролем
r = requests.post('https://proverkacheka.nalog.ru:9999/v1/mobile/users/signup', json = {"email":"email@email.com","name":"USERNAME","phone":your_phone})В результате выполнения POST-запроса мы получим пароль в виде SMS на указанный мобильный телефон. Далее, мы будем использовать его в переменной pwd
Теперь распарсим нашу строку со значениями из QR-кода:
import re
qr_string='t=20190320T2303&s=5803.00&fn=9251440300007971&i=141637&fp=4087570038&n=1'
t=re.findall(r't=(\w+)', qr_string)[0]
s=re.findall(r's=(\w+)', qr_string)[0]
fn=re.findall(r'fn=(\w+)', qr_string)[0]
i=re.findall(r'i=(\w+)', qr_string)[0]
fp=re.findall(r'fp=(\w+)', qr_string)[0]Будем использовать полученные переменные для извлечения данных.
В посте на Хабре (https://habr.com/ru/post/358966/) довольно подробно изучены статусы ошибок при формировании запроса к API, не буду повторять эту информацию.
В начале необходимо проверить, что по данному чеку есть данные, формируем GET-запрос.
headers = {'Device-Id':'', 'Device-OS':''}
payload = {'fiscalSign': fp, 'date': t,'sum':s}
check_request=requests.get('https://proverkacheka.nalog.ru:9999/v1/ofds/*/inns/*/fss/'+fn+'/operations/1/tickets/'+i,params=payload, headers=headers,auth=(your_phone, pwd))
print(check_request.status_code)В запросе необходимо указать headers, хотя бы пустые. В моем случае GET-запрос возвращает ошибку 406, из чего я понимаю, что такой чек находится. Если не указать сумму или дату, то GET-запрос вернет ошибку 400 — bad request.
Переходим к самому интересному, получаем данные чека:
request_info=requests.get('https://proverkacheka.nalog.ru:9999/v1/inns/*/kkts/*/fss/'+fn+'/tickets/'+i+'?fiscalSign='+fp+'&sendToEmail=no',headers=headers,auth=(your_phone, pwd))
print(request_info.status_code)
products=request_info.json()Должны получить код 200 (успешное выполнение GET-запроса), а в переменной products — все, что относится к нашему чеку.
Чтобы работать с этими данными воспользуемся pandas и преобразуем все в dataframe.
import pandas as pd
from datetime import datetime
my_products=pd.DataFrame(products['document']['receipt']['items'])
my_products['price']=my_products['price']/100
my_products['sum']=my_products['sum']/100
datetime_check = datetime.strptime(t, '%Y%m%dT%H%M') #((https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior отформатируем дату))
my_products['date']=datetime_check
my_products.set_index('date',inplace=True)Теперь мы имеем рабочий pandas.dataframe с чеками, визуально это выглядит так:
Что это значит для нас, аналитиков данных? Что мы можем лучше узнать себя, свои потребности и получить интересные данные о собственных покупках.
Попробуем в рамках серии постов собрать небольшой прототип приложения, которое позволит строить динамику своих покупок. Итак, начнем с того, что в каждом чеке есть QR-code, если его распознать, то мы получим следующую строку:
t=20190320T2303&s=5803.00&fn=9251440300007971&i=141637&fp=4087570038&n=1
В данной строке содержатся:
t — timestamp, время, когда вы осуществили покупку
s — сумма чека
fn — кодовый номер fss, потребуется далее в запросе к API
i — номер чека, он нам потребуется далее в запросе к API
fp — параметр fiscalsign, потребуется далее в запросе к API
В рамках решения первого шага нашей задачи мы будем парсить данные чека и собирать их в pandas dataframe, используя модули Python.
Мы воспользуемся API (https://habr.com/ru/post/358966/), который отдает данные по чеку с сайта налоговой.
В начале получим аутентификационные данные:
import requests
your_phone = '+7XXXYYYZZZZ' #нужно указать ваш телефон, на него придет СМС с паролем
r = requests.post('https://proverkacheka.nalog.ru:9999/v1/mobile/users/signup', json = {"email":"email@email.com","name":"USERNAME","phone":your_phone})В результате выполнения POST-запроса мы получим пароль в виде SMS на указанный мобильный телефон. Далее, мы будем использовать его в переменной pwd
Теперь распарсим нашу строку со значениями из QR-кода:
import re
qr_string='t=20190320T2303&s=5803.00&fn=9251440300007971&i=141637&fp=4087570038&n=1'
t=re.findall(r't=(\w+)', qr_string)[0]
s=re.findall(r's=(\w+)', qr_string)[0]
fn=re.findall(r'fn=(\w+)', qr_string)[0]
i=re.findall(r'i=(\w+)', qr_string)[0]
fp=re.findall(r'fp=(\w+)', qr_string)[0]Будем использовать полученные переменные для извлечения данных.
В посте на Хабре (https://habr.com/ru/post/358966/) довольно подробно изучены статусы ошибок при формировании запроса к API, не буду повторять эту информацию.
В начале необходимо проверить, что по данному чеку есть данные, формируем GET-запрос.
headers = {'Device-Id':'', 'Device-OS':''}
payload = {'fiscalSign': fp, 'date': t,'sum':s}
check_request=requests.get('https://proverkacheka.nalog.ru:9999/v1/ofds/*/inns/*/fss/'+fn+'/operations/1/tickets/'+i,params=payload, headers=headers,auth=(your_phone, pwd))
print(check_request.status_code)В запросе необходимо указать headers, хотя бы пустые. В моем случае GET-запрос возвращает ошибку 406, из чего я понимаю, что такой чек находится. Если не указать сумму или дату, то GET-запрос вернет ошибку 400 — bad request.
Переходим к самому интересному, получаем данные чека:
request_info=requests.get('https://proverkacheka.nalog.ru:9999/v1/inns/*/kkts/*/fss/'+fn+'/tickets/'+i+'?fiscalSign='+fp+'&sendToEmail=no',headers=headers,auth=(your_phone, pwd))
print(request_info.status_code)
products=request_info.json()Должны получить код 200 (успешное выполнение GET-запроса), а в переменной products — все, что относится к нашему чеку.
Чтобы работать с этими данными воспользуемся pandas и преобразуем все в dataframe.
import pandas as pd
from datetime import datetime
my_products=pd.DataFrame(products['document']['receipt']['items'])
my_products['price']=my_products['price']/100
my_products['sum']=my_products['sum']/100
datetime_check = datetime.strptime(t, '%Y%m%dT%H%M') #((https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior отформатируем дату))
my_products['date']=datetime_check
my_products.set_index('date',inplace=True)Теперь мы имеем рабочий pandas.dataframe с чеками, визуально это выглядит так:
👍1