В бизнесе на посуточной аренде квартир, как и в любом другом бизнесе, важно держать руку на пульсе и видеть наглядно основные показатели. Современные сервисы обычно показывают основные метрики, но что, если хочется построить свой отчет с важными для себя параметрами? Да еще в интерактивном формате, когда можно выбрать нужные настройки и перестроить графики с учетом изменений? На помощь приходить 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.