LEFT JOIN – Telegram
LEFT JOIN
45K subscribers
944 photos
28 videos
6 files
1.2K links
Понятно про анализ данных, технологии, нейросети и, конечно, SQL.

Услуги — leftjoin.ru
Курсы по аналитике — https://stepik.org/users/431992492

Автор — @valiotti
Реклама — @valiotti

Перечень РКН: https://tapthe.link/PpkTHavwS
Download Telegram
Чек из гипермаркета «Лента», 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 с чеками, визуально это выглядит так:
👍1
«Шапка» чековых данных

Можно построить гистограмму покупок или посмотреть на все в виде «ящика с усами»:
import matplotlib.pyplot as plt
%matplotlib inline
my_products['sum'].plot(kind='hist', bins=20)
plt.show()
my_products['sum'].plot(kind='box')
plt.show()
В завершение элементарно получим описательные статистики в текстовом виде командой .describe():
my_products.describe()
Данные удобно записать в .csv-файл, чтобы в следующий раз дополнить статистику:
with open('hyper_receipts.csv', 'a') as f:
my_products.to_csv(f, header=True)
Сегодня при поддержке телеграмм-канала Русский Маркетинг (@smmrus) рассказываем про аналитику в маркетинге и про расчет эффективности маркетинга. В посте рассматриваем ключевые принципы построения аналитики в маркетинге, подробно обсуждаем фреймворк AARRR и предлагаем подход к построению иерархии метрик.

Читайте, лонгрид наполнен полезностями и интересностями, включая разборы кейсов в разных индустриях!

http://leftjoin.ru/all/metrics-for-marketing-analytics/
Выходим из праздников, включаемся в рабочий ритм и читаем статью с обзором Looker:
http://leftjoin.ru/all/looker-overview/
Для изучающих Python и желающих его изучать: еще почти сутки заманчивое предложение от DataCamp (скидка 75% на годовую подписку!).

Пост не оплачен, я рекомендую эту платформу, так как с ее помощью действительно можно в относительно сжатые сроки овладеть базовым уровнем Python🎖