Анализ отзывов с banki.ru

Данный материал представлен в информационно-ознакомительных целях.
Список частей:
-
1
часть: Сбор данных ссылка -
2
часть: Визуализация ссылка -
3
часть: Мониторинг загрузок ссылка -
4
часть: Создание сайта и RESTAPI ссылка
Короткое вступление
Четвертая часть в серии статей о сборе данных с ресурса banki.ru - отзывов клиентов
Прошлую статью мы закончили на создании аудита загрузок, с того момента прошло некоторое время - данные сохраняются а толку от них 0, чтобы исправить этот момент мы создадим сервис, который будет отдавать эти данные, а именно демонстрационный сайт и RESTAPI
.
В данный момент работают несколько потоков
:
- Тинькофф Банк
- ВТБ
- Хоум Кредит
- Альфа-Банк
- Банк Открытие
- Газпромбанк
- Райффайзенбанк
select bank_name , round(avg(score),2 ) as scorex , trunc(median(score)) as median , count(*) as cnt from home.dt_banki_responses where create_dt >= date('2021-01-01') and bank_name in ( 'Тинькофф Банк', 'ВТБ', 'Хоум Кредит Банк', 'Альфа-Банк', 'Банк Открытие', 'Газпромбанк', 'Райффайзенбанк' ) group by bank_name order by cnt desc
- Тинькофф Банк - кол-во:
13954
средняя:4.60
медиана:5
- ВТБ - кол-во:
10100
средняя:2.39
медиана:2
- Хоум Кредит Банк - кол-во:
5433
средняя:3.73
медиана:5
- Альфа-Банк - кол-во:
5251
средняя:1.40
медиана:1
- Банк Открытие - кол-во:
3003
средняя:2.11
медиана:1
- Газпромбанк - кол-во:
2881
средняя:1.98
медиана:1
- Райффайзенбанк - кол-во:
1130
средняя:1.71
медиана:1

Заглядывая в будущее можно смело сделать вывод, что реализация демонстрационной страницы с использованием только django
- это догога, ведущая к неизмежному “переписыванию” фронтовой части на что-то из современных JS
библиотек, поэтому django
будет использован только для реализации API endpoints
.
urlpatterns = [ path('sample/', get_data_sample, name='sample'), path('export/', get_example_csv, name='export'), path('stats/', get_bank_stats, name='stats'), ]
Создадим несколько django view
:
Семпл данных для стартовой страницы
def get_data_sample(request): cursor = get_cursor() query = ''' select id , link , title , city , bank_name , score , status , username , create_dt , comments from home.dt_banki_responses order by id desc limit 10 ''' cursor.execute(query) result = cursor.fetchall() data = { 'status': 'success', 'data': result, 'time': datetime.now() } return JsonResponse(data=data, safe=False, json_dumps_params={'ensure_ascii': False})
Выгрузка в формате CSV
def get_example_csv(request): response = HttpResponse(content_type='text/csv; charset=windows-1251') cursor = get_cursor() query = ''' select * from home.dt_banki_responses where create_dt <= date(now())-2 order by id desc limit 250 ''' cursor.execute(query) result = cursor.fetchall() writer = csv.writer(response, delimiter=';') writer.writerow([col.name for col in cursor.description]) for row in result: try: writer.writerow(list(row.values())) except UnicodeEncodeError: continue response['Content-Disposition'] = f'attachment; filename=export_{sysdate()}.csv' return response
Статистика
def get_bank_stats(request): cursor = get_cursor() query = 'select * from home.v_stats' cursor.execute(query) result = cursor.fetchall() data = { 'status': 'success', 'data': result, 'time': datetime.now() } return JsonResponse(data=data, safe=False, json_dumps_params={'ensure_ascii': False})
Создание postgres view home.v_stats
create or replace view home.v_stats as ( select bank_name , round(avg(score),2 ) as scorex , trunc(median(score)) as median , count(*) as cnt from home.dt_banki_responses where create_dt >= date('2021-01-01') and bank_name in ( 'Тинькофф Банк', 'ВТБ', 'Хоум Кредит Банк', 'Альфа-Банк', 'Банк Открытие', 'Газпромбанк', 'Райффайзенбанк' ) group by bank_name order by cnt desc );
После развертывания на тестовом сервере - получаем 3 апи-роута:
Сам демонстрационный сайт временно размещен на поддомене http://banki.artydev.ru/ По вопросам сотрудничества можно обращаться в @artydevx