Исследование данных с помощью Jupyter Notebook и chDB
В этом руководстве вы узнаете, как исследовать данные в ClickHouse Cloud в Jupyter Notebook с помощью chDB — быстрого встроенного SQL OLAP-движка на базе ClickHouse.
Предварительные требования:
- виртуальное окружение
- работающий сервис ClickHouse Cloud и ваши параметры подключения
Если у вас ещё нет учётной записи ClickHouse Cloud, вы можете зарегистрироваться и получить тестовый доступ с $300 бесплатных кредитов.
Чему вы научитесь:
- Подключаться к ClickHouse Cloud из Jupyter Notebook с использованием chDB
- Выполнять запросы к удалённым наборам данных и преобразовывать результаты в объекты Pandas DataFrame
- Объединять данные из облака с локальными CSV-файлами для анализа
- Визуализировать данные с помощью matplotlib
Мы будем использовать набор данных UK Property Price, который доступен в ClickHouse Cloud как один из стартовых наборов данных. Он содержит данные о ценах, по которым продавались дома в Великобритании с 1995 по 2024 год.
Настройка
Чтобы добавить этот набор данных в существующий сервис ClickHouse Cloud, войдите в console.clickhouse.cloud с данными своей учетной записи.
В меню слева нажмите Data sources. Затем нажмите Predefined sample data:

Выберите Get started на карточке UK property price paid data (4GB):

Затем нажмите Import dataset:

ClickHouse автоматически создаст таблицу pp_complete в базе данных default и заполнит её 28,92 миллионами строк данных о ценах.
Чтобы снизить вероятность случайного раскрытия ваших учетных данных, рекомендуется добавить имя пользователя и пароль ClickHouse Cloud в качестве переменных окружения на локальной машине. В терминале выполните следующую команду, чтобы добавить имя пользователя и пароль в качестве переменных окружения:
Переменные окружения, указанные выше, сохраняются только на время текущего сеанса терминала. Чтобы сделать их постоянными, добавьте их в конфигурационный файл оболочки.
Теперь активируйте виртуальное окружение. Находясь в виртуальном окружении, установите Jupyter Notebook следующей командой:
Запустите Jupyter Notebook с помощью следующей команды:
В новом окне браузера должен открыться интерфейс Jupyter по адресу localhost:8888.
Нажмите File > New > Notebook, чтобы создать новый notebook.

Вам будет предложено выбрать ядро.
Выберите любое доступное Python-ядро, в этом примере мы выберем ipykernel:

В пустой ячейке введите следующую команду, чтобы установить chDB, который мы будем использовать для подключения к нашему удалённому экземпляру ClickHouse Cloud:
Теперь вы можете импортировать chDB и выполнить простой запрос, чтобы убедиться, что всё настроено корректно:
Исследование данных
После того как набор данных UK price paid настроен, а chDB запущен в Jupyter Notebook, мы можем приступить к исследованию наших данных.
Представим, что нас интересует, как цена изменялась со временем для конкретного района в Великобритании, например для столицы — Лондона.
Функция ClickHouse remoteSecure позволяет легко получать данные из ClickHouse Cloud.
Вы можете указать chDB вернуть эти данные напрямую в виде фрейма данных Pandas — это удобный и знакомый способ работы с данными.
Напишите следующий запрос, чтобы получить данные UK price paid из вашего сервиса ClickHouse Cloud и преобразовать их в pandas.DataFrame:
В приведённом выше фрагменте chdb.query(query, "DataFrame") выполняет указанный запрос и выводит результат в терминал в виде Pandas DataFrame.
В запросе мы используем функцию remoteSecure для подключения к ClickHouse Cloud.
Функция remoteSecure принимает в качестве параметров:
- строку подключения (connection string)
- имя базы данных и таблицы, которые нужно использовать
- ваше имя пользователя
- ваш пароль
С точки зрения безопасности рекомендуется использовать переменные окружения для параметров имени пользователя и пароля, а не указывать их непосредственно в функции, хотя при желании это возможно.
Функция remoteSecure подключается к удалённому сервису ClickHouse Cloud, выполняет запрос и возвращает результат.
В зависимости от объёма ваших данных это может занять несколько секунд.
В данном случае мы возвращаем среднюю цену по годам и фильтруем по town='LONDON'.
Результат затем сохраняется в виде DataFrame в переменную с именем df.
df.head отображает только первые несколько строк возвращённых данных:

Выполните следующую команду в новой ячейке, чтобы проверить типы столбцов:
Обратите внимание, что хотя date имеет тип Date в ClickHouse, в результирующем фрейме данных он имеет тип uint16.
chDB автоматически определяет наиболее подходящий тип при возврате DataFrame.
Теперь, когда данные доступны нам в знакомой форме, давайте рассмотрим, как со временем менялись цены на недвижимость в Лондоне.
В новой ячейке выполните следующую команду, чтобы построить простой график зависимости цены от времени для Лондона с использованием matplotlib:

Вполне ожидаемо, цены на недвижимость в Лондоне существенно выросли со временем.
Коллега‑специалист по данным прислал нам файл .csv с дополнительными переменными, связанными с жильём, и хочет узнать, как менялось со временем количество домов, проданных в Лондоне. Давайте построим некоторые из этих показателей по отношению к ценам на жильё и посмотрим, удастся ли обнаружить какую‑нибудь корреляцию.
Вы можете использовать табличный движок file, чтобы считывать файлы напрямую с локальной машины.
В новой ячейке выполните следующую команду, чтобы создать новый DataFrame из локального файла .csv.
Details
Чтение из нескольких источников за один шаг
Также можно читать данные из нескольких источников за один шаг. Для этого вы можете использовать приведённый ниже запрос сJOIN:
Хотя у нас отсутствуют данные, начиная с 2020 года, мы можем построить график, сравнив два набора данных за 1995–2019 годы. В новой ячейке выполните следующую команду:

Из построенного графика видно, что объём продаж составлял примерно 160 000 в 1995 году и быстро вырос, достигнув пика около 540 000 в 1999 году. После этого объёмы резко снизились в середине 2000‑х, сильно просели во время финансового кризиса 2007–2008 годов и упали до примерно 140 000. Цены, напротив, демонстрировали стабильный и плавный рост: с примерно £150 000 в 1995 году до около £300 000 к 2005 году. После 2012 года рост существенно ускорился, резко поднявшись примерно с £400 000 до более чем £1 000 000 к 2019 году. В отличие от объёма продаж, цены испытали минимальное влияние кризиса 2008 года и сохранили восходящую тенденцию. Вот это да!
Итоги
В этом руководстве показано, как chDB обеспечивает удобное исследование данных в Jupyter-ноутбуках за счет подключения ClickHouse Cloud к локальным источникам данных.
На примере набора данных UK Property Price мы продемонстрировали, как выполнять запросы к удаленным данным в ClickHouse Cloud с помощью функции remoteSecure(), читать локальные CSV-файлы с использованием движка таблиц file() и преобразовывать результаты непосредственно в объекты DataFrame библиотеки Pandas для анализа и визуализации.
С помощью chDB специалисты по анализу данных могут использовать мощные SQL-возможности ClickHouse вместе с привычными инструментами Python, такими как Pandas и matplotlib, что упрощает объединение нескольких источников данных для комплексного анализа.
И хотя многие лондонские специалисты по анализу данных, возможно, еще не скоро смогут позволить себе собственный дом или квартиру, по крайней мере они могут проанализировать рынок, который сделал для них жилье недоступным!