Подпишитесь на мой канал!

Буду рад видеть вас среди подписчиков моего Telegram-канала

Анализируем данные RealtyCalendar в Яндекс.Datalens

В бизнесе на посуточной аренде квартир, как и в любом другом бизнесе, важно держать руку на пульсе и видеть наглядно основные показатели. Современные сервисы обычно показывают основные метрики, но что, если хочется построить свой отчет с важными для себя параметрами? Да еще в интерактивном формате, когда можно выбрать нужные настройки и перестроить графики с учетом изменений? На помощь приходить BI-инструмент от Яндекс – Datalens.

Сбор данных

Прежде чем что-то визуализировать, надо получить данные. Для выгрузки из RealtyCalendar необходимо перейти в раздел «Клиенты и брони» и на вкладке «Брони» выбрать «Выгрузить в Excel».

На компьютер скачается файл bookings.xls

Подготовка данных

К сожалению, не всегда полученные данные сразу пригодны для анализа и визуализации. Так и в случае с полученной выгрузкой из RealtyCalendar. Чтобы привести ее в нужный формат – используем Python. Это один из самых простых языков программирования, позволяющий приводить данные к нужному формату.

Для работы я использую Jupyter Notebook — он позволяет выполнять код поэтапно, проверяя результат выполнения после каждого блока кода. Преобразуем файл xls в формат csv через редактор или онлайн-конвертер.

Посмотрим, что же не так в полученной таблице.

Во-первых, поле «Контакты», куда RealtyCalendar записал телефоны и имена. Для анализа имена нас не интересуют. Если только вы не хотите узнать с какими именами гости чаще останавливаются у вас. Поэтому нам надо убрать имена и оставить только номера телефонов приведя их к единому формату. По ним мы так же сможем определить был ли повторный заезд гостя.

import pandas as pd

file =  'bookings.csv'

df = pd.read_csv(file, sep=';')

# В поле Контакты удаляем текст от начала строки до символа "+"
df['Контакты'] = df['Контакты'].str.replace(r'.*\+', '+', regex=True)
# в поле контакты удаляем все пробелы и "-"
df['Контакты'] = df['Контакты'].str.replace(r'\s|-', '', regex=True)

Наверняка вам интересно было бы узнать длительность проживание. Это можно вычислить уже в Datalens, но давайте сделаем это сразу тут

# Добавим колонку "Длительность проживания" и посчитаем в днях разницу между датами
df['Заезд']= pd.to_datetime(df['Заезд'], format='%d.%m.%Y')
df['Выезд']= pd.to_datetime(df['Выезд'], format='%d.%m.%Y')
df['Длительность проживания'] = (df['Выезд'] - df['Заезд']).dt.days

# Меняем формат дат на YYYY-MM-DD
df['Заезд'] = df['Заезд'].dt.strftime('%Y-%m-%d')
df['Выезд'] = df['Выезд'].dt.strftime('%Y-%m-%d')

Что еще не так в таблице?

Количество гостей записаны в поле «Примечание», хотя есть отдельное поле «Гостей». Ну что ж, исправим это недоразумение.

# В колонке Примечания находим все числа после слова "Гостей"
df['Гостей'] = df['Примечания'].str.extract(r'Гостей\s(\d+)', expand=False)

# Найдем все строчки где нет значения гостей и вычислим для нее все числа до слова гостей   
df['Гостей'] = df['Гостей'].fillna(df['Примечания'].str.extract(r'(\d+)\sгостей', expand=False))

Не забываем учесть тот факт, что формат указания количества гостей разный — иногда число идет после слова «Гостей», иногда до него.

На это ошибки не заканчиваются. Оказывается, в поле источник не везде корректно отобразился источник брони. Поэтому лучше перезаполнить это поле по колонке «Менеджер».

Создаем справочник источников по колонке «Менеджер»

source_booking = {
    'ostrovok_ru@tutt.ru': 'Островок', 
    'avito@realtycalendar.ru' : 'Авито',
    'airbnb@realtycalendar.ru' : 'Airbnb',
    'booking_com@tutt.ru' : 'Booking.com',
    'sutochno_ru@tutt.ru' : 'Суточно',
    'tvil@realtycalendar.ru' : 'Tvil',
    'yandextravel@realtycalendar.ru' : 'Яндекс.Путешествия'
}

И заменим все значения в колонке Источник значениями из справочника.

df['Источник'] = df['Менеджер'].map(source_booking)

Согласитесь, Python делает это легко одной строчкой кода.

Осталось сохранить результат работы скрипта в новый файл для визуализации

df.to_csv('bookings_edited.csv', sep=';', index=False)

Визуализация данных

Для наглядной визуализации полученных данных будем использовать Яндекс.Datalens. В нем мы создадим подключение, датасет и нужны графики.

С подключением все просто. Нам достаточно просто выбрать «Файлы» и загрузить туда полученный после обработки CSV файл.

В дальнейшем, если вы обновите данные за новый период, вам нужно будет просто заменить файл и все графики обновятся сами.

После загрузки файла необходимо создать датасет. Это набор данных из файла для дальнейшей работы.

Как видите, я добавил агрегацию для некоторых полей. Так, например, длительность проживания и количество гостей будет высчитываться как среднее значение, а суммы за бронь будут суммироваться.

Так же добавили несколько новых полей, который высчитываются по формуле. Например поле «Период», которое само вычислит месяц, когда был заезд.

DATETRUNC([Заезд], month)

Так же по формуле вычисляется год

DATEPART([Заезд], "year")

Теперь все готово для построения первого чарта. Предположим, мы хотим увидеть количество заездов в месяц.

По оси X будут идти периоды, по оси Y контакты. Ведь каждое бронирование содержит уникальную строчку с контактом. Для большей наглядности разделим график по цветам.

Смотрите, как поменялся рынок сервисов бронирования после февраля 2022 года. Тогда ушел Booking и Airbnb.

Еще можно посмотреть, например, среднюю длительность проживания по каждому источнику бронирования.

Чтобы можно было смотреть разные данные за разные периоды, добавим на дашборд селекторы по годам и источникам. Можно добавить еще селектор выбора объекта размещения, если у вас их много.

Так может выглядеть итоговый дашборд

Можно проанализировать финансовые показатели объекта размещения

Итоговый проект можно посмотреть по ссылке в Яндекс.Datalens.


Больше на Антон Белицкий

Подпишись, чтобы получать новые публикации на email.