/
XML

XML

Ноутбук, используемый в примере:

xml_example.ipynb


XML файл, используемый в примере:

books.xml


Тип статьиИнструкция
КомпетенцииJupyterLab, Python, Petl, PandasА
Необходимые праваДоступ к JupyterLab
Версии компонентовJupyter core - 4.7.1, Petl - 1.7.2 , pandas - 1.2.3, Sqlalchemy - 1.3.23
СтатусБЕТА
СложностьЛЕГКО
Полезные ссылкиPetl, Pandas
Дополнительные сведенияОС Ubuntu 18.04


В данной статье рассматривается пример обработки данных из XML файла. Данный файл содержит в себе небольшую информацию из электронной библиотеки Gutenberg.

Для обработки данных, создания таблицы и выгрузки в Excel файл будет использована библиотека Petl, т.к. она имеет более низкий порог вхождения. Но для выгрузки данных в PostgreSQL используется библиотека Pandas, т.к. в ней это реализовано более гибко и просто.

Функционал обеих библиотек схож, и вы можете использовать ту, что вам больше нравится.

Целью этого задания является получение данных из XML файла для выгрузки их в платформу и построения дашборда.
Пример не является шаблонным: в каждом случае задачи разнятся, и работать с данными придется по-другому.

Вот особенности данного кейса:

  • Количество получаемых данных небольшое - порядка 80 строк, но для демонстрации правильного подхода все выгруженные и обработанные данные сохраняются в Excel файл и базу данных PostgreSQL. Для загрузки данных в платформу вы можете использовать любой из вариантов. Когда получаемых данных много - правильнее всего использовать запись в базу данных.

Здесь не рассматривается:

  • Данные будут забираться вручную. Для регулярной автоматический выгрузки необходимо настроить планировщик Chronicle.

  • Для дальнейшей загрузки в платформу можно воспользоваться стандартными средствами в платформе: “создание загрузчика” и “планы загрузки”. Всё описано в разделе документации (ссылка для версии 2.20):
    Загрузка данных и формирование структуры в аналитической базе данных ViQube

  • Подробности работы подключенных Python библиотек. Это необходимо изучать отдельно.


Для работы нам понадобятся такие библиотеки, как: Petl, Pandas, SQLAlchemy.

Если они у вас не установлены, то вы можете воспользоваться статьей по установке библиотек:

Установка Python библиотек

Теперь можно приступать к работе в JupyterLab.


  1. Создаем ноутбук, например, с названием xml_example.
  2. Первым блоком подключаем все необходимые нам для работы Python библиотеки.

    import petl as etl # для загрузки и обработки данных
    import pandas as pd # для выгрузки таблицы в postgresql
    import sqlalchemy # для создания подключения к базе данных
  3. Далее мы можем создать Petl таблицу из нашего XML файла. Воспользуемся функцией Petl fromxml(). В качестве параметров мы должны указать: название XML файла; XML тег, в котором хранятся теги с интересующей нас информацией (в нашем случае это тег <row>); Python словарь, у которого в качестве ключей будут названия столбцов, которые мы хотим видеть в таблице, а в качестве значений - теги с интересующей нас информацией (в нашем случае это теги <name>, <title>, <publication> и т.д.).

    # формируем таблицу petl из XML файла
    table = etl.fromxml('books.xml', 'row', {
        'name': 'name', 
        'title': 'title', 
        'publication': 'publication', 
        'downloads':'downloads', 
        'words':'words', 
        'Last_name_letter': 'Last_name_letter'
    })


    Иерархия нашего XML файла:



    Так выглядит наша таблица:



  4. Мы можем экспортировать нашу таблицу в Excel файл для дальнейшей загрузки на платформу. Для этого воспользуемся методом toxlsx() библиотеки Petl. В качестве параметров передаем методу название Excel файла и флаг mode='overwrite', который указывает, что файл будет перезаписываться при повторном запуске кода.

    table.toxlsx('xml_example.xlsx', mode='overwrite') # экспорт в Excel файл	


    Мы получили Excel таблицу, которую можно загружать на платформу:



  5. Помимо экспорта в Excel продемонстрируем подход с сохранением данных в PostgreSQL. Установим подключение к базе данных с помощью метода create_engine() библиотеки Sqlachemy.

    engine = sqlalchemy.create_engine('postgresql://{user}:{user_password}@{url}:{port}/{database_name}') # подключение к базе данных


    Где {user} - имя пользователя базы данных, {user_password} - пароль, {url} - адрес базы данных, {port} - порт, {database_name} - название базы данных, в которой будет создана таблица.

  6. Далее создадим объект DataFrame библиотеки Pandas из нашей таблицы Petl. Воспользуемся методом DataFrame() и укажем ему, что названия колонок - это table[0], а значения - это срез от первого элемента таблицы Petl до последнего table[1:].

    df = pd.DataFrame(columns=table[0], data=table[1:]) # создание DataFrame из petl-таблицы


    Получим таблицу Pandas:



  7. Теперь экспортируем таблицу в базу данных PostgreSQL с помощью метода to_sql() библиотеки Pandas. В параметрах передаем название таблицы, переменную подключения engine, которую определили выше, флаги index=False и if_exists='replace', и словарь с типами данных для столбцов. Флаг index=False говорит, что не нужно создавать столбец с индексами. Флаг if_exists='replace' указывает, что таблицу нужно перезаписать, если она уже существует. В словаре dtype мы указываем название столбца в качестве ключа, а в качестве значения указывается тип данных библиотеки Sqlalchemy и его длина. Типы данных можно посмотреть тут.

    Например, для столбца ‘name’ мы укажем тип данных VARCHAR с длинной 50. Указывается такая длина, т.к. в нашем примере имени автора не будет больше 50-ти символов.

    # экспорт в базу данных
    df.to_sql('books_xml', engine, index=False, if_exists='replace', dtype={
        'name': sqlalchemy.VARCHAR(50),
        'title': sqlalchemy.VARCHAR(255),
        'downloads': sqlalchemy.Integer(),
        'words': sqlalchemy.Integer(),
        'publication': sqlalchemy.Date(),
        'Last_name_letter': sqlalchemy.CHAR()
    })


Мы получили таблицу Excel и таблицу в базе данных PostgreSQL.

Excel таблица:



Таблица в базе данных:

Где 1 - это типы данных столбцов, 2 - данные таблицы.

Так выглядит дашборд, построенный из этих данных:


Полученные файлы можно брать и загружать в платформу через стандартный загрузчик. На этом работа в ViXtract завершена.🥳





Related content

Установка Python библиотек
Установка Python библиотек
More like this
JSON
More like this
Инкрементальная загрузка
Инкрементальная загрузка
More like this
Инкрементальная загрузка
Инкрементальная загрузка
More like this
Инкрементальная загрузка
Инкрементальная загрузка
More like this
Инкрементальная загрузка
Инкрементальная загрузка
More like this