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

Эта статья представляет собой краткое описание того, как использовать Vaex для загрузки ваших больших наборов данных в ядро ​​на Python с практическими реализациями. Давайте начнем. Прежде чем погрузиться в реальную реализацию, давайте разберемся, что такое Vaex.

Что такое Ваекс?

  1. Vaex - это высокопроизводительная библиотека Python для ленивых фреймов данных вне ядра (аналогичных Pandas), позволяющая визуализировать и исследовать большие табличные наборы данных.
  2. Он вычисляет статистику, такую ​​как среднее значение, сумма, количество, стандартное отклонение и т. Д., На N-мерной сетке для более чем миллиарда (10⁹) выборок / строк в секунду.
  3. Визуализация выполняется с использованием гистограмм, графиков плотности и трехмерного объемного рендеринга, что позволяет интерактивно исследовать большие данные. Vaex использует отображение памяти, политику нулевого копирования памяти и ленивые вычисления для лучшей производительности (без потери памяти).

После этой статьи я предлагаю вам прочитать документацию Vaex здесь

Скачать и установить пакет

Первый шаг - загрузить и установить библиотеку vaex с помощью любого средства управления пакетами, например pip или conda.

pip install vaex

or

conda install -c conda-forge vaex

Не забудьте использовать знак «!» перед командой, если вы вводите ее напрямую в среду iPython.

Импортировать пакет

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

import vaex
import pandas as pd

Набор данных

Теперь для этой демонстрации давайте создадим большой набор данных с 1 миллионом строк и 100 столбцов, который действительно является большим набором данных.

n_rows = 100000
n_cols = 10
df = pd.DataFrame(np.random.randint(0, 100, size=(n_rows, n_cols)), columns=['c%d' % i for i in range(n_cols)]) 

Теперь давайте проверим некоторую информацию о загруженном наборе данных.

df.info(memory_usage='deep')

Создание файлов .csv

Мы сохраним созданный выше фрейм демонстрационных данных в виде файла .csv, чтобы осуществить загрузку.

file_path = 'main_dataset.csv'
df.to_csv(file_path, index=False)

Создавать файлы Hdf5

Нам нужно сохранить набор данных в формате hdf5, чтобы использовать его в качестве входных данных для загрузки vaex.

Обратите внимание, что весь этот процесс предназначен только для создания демонстрационного набора данных для демонстрационных целей, в реальном проекте у нас будут некоторые данные, а реализация загрузки данных на основе vaex будет всего лишь одной строкой кода.

vaex_df = vaex.from_csv(file_path, 
                        convert=True, 
                        chunk_size=5_000_000)

Проверив тип этого фрейма данных, мы получим:

type(vaex_df)

Чтение файлов Hdf5 с помощью библиотеки Vaex

Наконец, мы подошли к самому важному этапу демонстрации, так что обратите внимание. Загрузка набора данных в формате Hdf5 с помощью Vaex.

vaex_df = vaex.open('main_dataset.csv.hdf5')
vaex_df.head()

Система выражения

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

%%time
vaex_df['multiplication_col13']=vaex_df.c1*vaex_df.c3

и посмотрев, что находится внутри этого столбца, мы получим определенное vaex Выражение, которое похоже на столбец во фрейме данных pandas.

vaex_df['multiplication_col13']

Фрейм данных вне ядра

Придерживаясь основной концепции разработки Vaex, мы должны помнить следующее примечание:

«Фильтрация и оценка выражений не тратят память на копирование; данные остаются нетронутыми на диске и будут передаваться только при необходимости. Отложите время до того, как вам понадобится кластер ».

Такие как…

vaex_df[vaex_df.c2>70]

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

нравиться…

dff.c2.minmax(progress='widget')

Vaex реализует параллельные высокопроизводительные групповые операции, особенно при использовании категорий (›1 миллиард в секунду).

реализовать как…

%%time
vaex_df_group = vaex_df.groupby(vaex_df.c1,
                                agg = vaex.agg.mean(vaex_df.c4))
vaex_df_group

%%time
vaex_df.groupby(vaex_df.c1,agg='count')

Ссылка

Https://vaex.readthedocs.io/en/latest

Чтобы получить полный код этой демонстрации, возьмите Jupyter Notebook из моего Github.

Спасибо!