Панды слишком медленные? Быстро используйте Vaex DataFrame, сотни миллионов данных в секунду ⛵
Панды слишком медленные? Быстро используйте Vaex DataFrame, сотни миллионов данных в секунду ⛵

В этой статье подробно описывается Vaex, мощная библиотека инструментов, способная обрабатывать сотни миллионов или даже миллиарды строк данных в секунду без загрузки всего набора данных в память. Для задач анализа больших данных эффективность Vaex проще и требует меньше требований к оборудованию и среде! Обновленная версия панды! Используйте это сейчас~


💦 автор:КореяНобуко@ShowMeAI 📘 данныеАнализ практических серий: чttps://www.showmeai.tech/tutorials/40 📘 Место этой статьиАдрес: хтtps://www.showmeai.tech/article-detail/393 📢 Заявление: Все права защищены. Пожалуйста, свяжитесь с платформой и автором для перепечатки и укажите источник. 📢 собиратьShowMeAI Посмотреть подробнеецветное содержание

Студентам, которые занимаются анализом данных и машинным обучением на Python, очень нравится библиотека инструментов pandas. Она проста в использовании и мощна. Она позволяет легко выполнять обработку данных, анализ данных, преобразование данных и другие процессы.

📘 PПрактическое руководство по анализу данных Python

но,pandas не очень эффективен для обработки больших данных,Это даже отнимает много времени при чтении большого документа.。Такдля Большойданныенабор,Есть ли инструмент,Это может быть как pandas Так же прост в эксплуатации Dataframe, обладает чрезвычайно высокой эффективностью и в то же время не spark А как насчет таких сложных требований к использованию и аппаратной среде? иметь! Вы можете попробовать это 📘Vaex。

📘Vaex это очень мощный Python DataFrame Библиотека, способная обрабатывать сотни миллионов или даже миллиарды строк в секунду без загрузки всего набора данных в память. Это делает его пригодным для использования более чем на одной машине. RAM особенно полезен для исследования, визуализации и статистического анализа больших наборов данных, а также Vaex Он также сочетает в себе удобство и простоту использования.

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

💡 Подробное объяснение использования vaex

💦 1.гигантдокументчитать&иметь дело с(НапримерCSV)

Инструмент Vaex предназначен для эффективной обработки данных, объем которых намного превышает объем доступной памяти.。с помощью этого,мы можем легкоиметь дело ссколь угодно большойизданныенабор。Vaex В предыдущих версиях поддерживались форматы двоичных файлов, например. HDF5、 Arrow и Parquet . Начиная с версии 4.14.0 его так же легко можно открыть в вышеуказанных форматах и ​​с помощью Jumbo. CSV документ. Частично это связано с 📘Aпредмет со стрелкой в ​​пачеглаз,Он обеспечивает довольно эффективный читатель CSV.

Примечание. Данные, использованные в этой статье, можно найти по адресу 📘числоПо данным официального сайтаПолучать.

Ниже приводится использование при чтении больших файлов:

Язык кода:python
кодВремя работычисло:0
копировать
print('Check file size on disk:')
!du -h chicago_taxi_2013_2020.csv
print()

df = vaex.open('chicago_taxi_2013_2020.csv')

print(f'Number of rows: {df.shape[0]:,}')
print(f'Number of columns: {df.shape[1]}')

mean_tip_amount = df.tip_amount.mean(progress='widget')
print(f'Mean tip amount: {mean_tip_amount:.2f}')

df.fare_amount.viz.histogram(shape=128, figsize=(6, 4), limits=[0, 42], progress='widget');

Приведенный выше пример показывает, как легко vaex может обрабатывать огромный файл CSV (файл CSV размером 76 ГБ). Подробное описание вышеописанного процесса выглядит следующим образом:

① когда мы используемvaex.open()для CSV Файл, Векс будет транслировать весь CSV документ для определения количества строк и столбцов, а также типа данных каждого столбца. Этот процесс не занимает много времени ОЗУ, но это может занять некоторое время в зависимости от CSV количество строк и количество столбцов.

может пройтиschema_infer_fractionконтроль Vaex Степень чтения файла. Чем меньше число, тем быстрее чтение, но определение типа данных может быть менее точным (поскольку не обязательно сканируются все данные). В приведенном выше примере мы используем параметры по умолчанию примерно в 5 Прочтите за несколько секунд 76 GB из CSV файлы, содержащие почти 2 И Син и 23 Список.

② Затем мы проходим vaex Рассчитаноtip_amountСписокизсреднее значение,кропотливый 6 Второй.

③ Наконец мы нарисовалиtip_amountСписокиз Гистограмма,кропотливый 8 Второй.

То есть мы 20 Прочтите за несколько секунда целая 76 GB CSV документ 3 раз без загрузки всего документа в память

📢 Обратите внимание, что независимо от формата документа Vaex из API Они все одинаковы. Это означает, что вы можете легко CSV、HDF5、Arrow и Parquet Переключение между документами без изменения кода.

Конечно, с точки зрения самой производительности, использование CSV document — не лучший выбор, и его, как правило, следует избегать по разным причинам. Тем не менее, большие CSV Документ по-прежнему встречается в повседневной работе, что делает эту функцию очень удобной для быстрого просмотра и изучения его содержимого, а также эффективного преобразования в более подходящий формат документа.

💦 2. Статистика: групповая агрегация

анализ Одной из наиболее распространенных операций с данными является групповое агрегирование статистики. Vaex Существует два основных способа задания операций агрегирования:

  • ① Укажите столбцы для агрегирования.,И операция агрегации по имени метода.
  • ② Укажите имя выходного столбца, а затем явно реализуйте статистический метод агрегации vaex.

Давайте посмотрим, как это сделать на практике. В оставшейся части этой статьи мы будем использовать 📘NНабор данных YC Taxi из подмножества,Содержит более 1 миллиарда записей данных.

Язык кода:python
кодВремя работычисло:0
копировать
df = vaex.open('yellow_taxi_2009_2015_f32.hdf5')

print(f'Number of rows: {df.shape[0]:,}')
print(f'Number of columns: {df.shape[1]}')


df.groupby(df.vendor_id, progress='widget').agg(
    {'fare_amount': 'mean',                              # Option 1
    'tip_amount_mean': vaex.agg.mean(df.tip_amount),    # Option 2
    })

Вышеуказанный метод работы pandas Dataframe Это в основном то же самое. Ваэкс Он также поддерживает второй метод следующим образом:

Язык кода:python
кодВремя работычисло:0
копировать
df.groupby(df.vendor_id, progress='widget').agg(
    {'fare_amount_norm': vaex.agg.mean(df.fare_amount) / vaex.agg.std(df.fare_amount)}
    )

Явное определение метода агрегатной функции (второй способ выше) также поддерживает выбор условия строки Входить.,Например, в следующем примере,Все наши данные,а такжеpassenger_countдля 2 и 4 статистика агрегации строк изданных Входить:

Язык кода:python
кодВремя работычисло:0
копировать
df.groupby(df.vendor_id, progress='widget').agg(
    {'fare_amount_mean_all': vaex.agg.mean(df.fare_amount),
    'fare_amount_mean_pc2': vaex.agg.mean(df.fare_amount, selection=df.passenger_count == 2),
    'fare_amount_mean_pc4': vaex.agg.mean(df.fare_amount, selection=df.passenger_count == 4)}
)

💦 3. Индикатор выполнения

Все использовали его раньше pandas При анализе данных иногда мы структурируем промежуточный процесс как pipeline трубопровод,Он содержит различные этапы преобразования данных. каждое исполнение,Если мы можем только дождаться обработки данных,Тогда у нас нет особого контроля над всем процессом.

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

Фактический процесс работы с гигантским документом выглядит следующим образом:

Язык кода:python
кодВремя работычисло:0
копировать
with vaex.progress.tree('rich'):
    result_1 = df.groupby(df.passenger_count, agg='count')
    result_2 = df.groupby(df.vendor_id, agg=vaex.agg.sum('fare_amount'))
    result_3 = df.tip_amount.mean()

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

💦 4. Асинхронный расчет

Vaex С ленивым расчетом (ленивый вычисления) и специальные эффекты, которые оценивают выражения только при необходимости. Общая рекомендация заключается в том, что без каких-либо изменений в исходном DataFrame Основные свойства операций. Эти операции представляют собой ленивые вычисления. Например:

  • Создание новых столбцов из существующих столбцов
  • Объединение нескольких столбцов в новый столбец
  • Входить выполнить какое-то классификационное кодирование
  • Фильтрация данных DataFrame

Прочие операции,Может производить содержательные расчеты,Например, группировка операций,Или вычислите агрегацию (например, столбец и итог или среднее значение).

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

Когда мы определяем процесс преобразования данных или конвейер данных, мы хотим, чтобы инструмент оптимизировал производительность во время вычислений. Ваэкс поддерживатьdelay=TrueРавные параметрычисло,Вычисления и операции могут выполняться параллельно.,Позволяет Vaex заранее строить расчетные графики,И попытайтесь найти наиболее эффективный способ подсчета результатов.

Например:

Язык кода:python
кодВремя работычисло:0
копировать
with vaex.progress.tree('rich'):
    result_1 = df.groupby(df.passenger_count, agg='count', delay=True)
    result_2 = df.groupby(df.vendor_id, agg=vaex.agg.sum('fare_amount'), delay=True)
    result_3 = df.tip_amount.mean(delay=True)
    df.execute()

мы видим,Явно используя ленивую оценку,Мы можем улучшить производительность и реже проверять данные. в этом случае,При использовании отложенного расчета мы начинаем с 5 Данные передачи становятся только 2 раз, что приводит к увеличению скорости примерно 30%. Ты можешь 📘VОфициальное руководство по асинхронному программированию aexДополнительные примеры можно найти здесь.

💦 5. Кеширование результатов

Из-за высокой эффективности,Vaex часто используется в качестве информационной панели, приложения для обработки данных и серверной части.,Особенно те приложения, которым необходимо обрабатывать большие объемы данных.

При использовании приложений для передачи данных,Часто определенные операции выполняются неоднократно с одними и теми же или похожими подмножествами данных. Например,Пользователи начнут с одной и той же «Домашней страницы».,Выберите опцию «Общая» или «Высокая частота».,Затем углубитесь в данные. в этом случае,Часто бывает полезно кэшировать результаты операций.。Vaex осознал 📘ПервыйВходитьиз мелкозернистого механизма кэширования ,Позволяет кэшировать результаты отдельных операций.,Можно использовать повторно позже.

Следующие примеры представляют собой конкретное использование:

Язык кода:python
кодВремя работычисло:0
копировать
vaex.cache.on()

with vaex.progress.tree('rich'):
    result_1 = df.passenger_count.nunique()

with vaex.progress.tree('rich'):
    result_2 = df.groupby(df.passenger_count, agg=vaex.agg.mean('trip_distance'))

💦 6. Остановитесь раньше

Vaex Существует прямой способ определить размер чтения данных, когда мы находимся в анализе. Используется, когда данные unique, nuniqueили groupbyметод,Возможна очень большая задержка полного объема данных.,мы можем указать limitженьшеньчисло,Это ограничит наш диапазон вычислений.,Таким образом завершая увеличение скорости.

В приведенном ниже примере мы устанавливаем limitприезжать 100, говорит он Vaex в достижении 100 Рассчитайте и верните результат:

Язык кода:python
кодВремя работычисло:0
копировать
result = df.pickup_longitude.nunique(limit=100, limit_raise=False)
print(f'result: {result}')

💦 7. Облачная поддержка

По мере роста набора данных,Хранение их в облаке становится все более распространенным и практичным.,итолько частьданные子набор保留在книгаземля。Vaex Очень дружелюбен к облаку — он может легко загружать (передавать) данные из любого общедоступного облачного хранилища.

и Vaex Будут получены только необходимые данные. Например, при выполнении df.head() Когда только первый 5 ХОРОШО. Чтобы вычислить среднее значение столбца, получите все данные только для этого конкретного столбца, Vaex будет передавать эту часть данных в потоковом режиме,Поэтому он не занимает много пропускной способности и сетевых ресурсов:

Язык кода:python
кодВремя работычисло:0
копировать
df_cloud = vaex.open('gs://vaex-data/airlines/us_airline_data_1988_2019.hdf5')

print('Size of data:')
print(f'Number of rows: {df_cloud.shape[0]:,}')
print(f'Number of columns: {df_cloud.shape[1]}')

df_cloud.head()

💦 8. Ускорение графического процессора

Наконец, Векс Есть также очень мощные функции, которые можно использовать GPU для ускорения, и он поддерживает очень много платформ: подходит для Windows и Linux Платформа из NVIDIA, применимо к Mac OS из Radeon и Apple Silicon。

В следующем примере,Мы определяем функцию для расчета дугового расстояния между двумя точками на сфере. Это довольно сложная математическая операция,Требуется много вычислений. Мы используем предыдущие данные (набор данных содержит более 1 миллиарда строк),Попробуйте вычислить среднее расстояние по дуге всех поездок на такси в наборе данных New York Taxi:

Язык кода:python
кодВремя работычисло:0
копировать
print(f'Number of rows: {df.shape[0]:,}')

def arc_distance(theta_1, phi_1, theta_2, phi_2):
temp = (np.sin((theta_2-theta_1)/2*np.pi/180)**2
+ np.cos(theta_1*np.pi/180)*np.cos(theta_2*np.pi/180)
* np.sin((phi_2-phi_1)/2*np.pi/180)**2)
distance = 2 * np.arctan2(np.sqrt(temp), np.sqrt(1-temp))
return distance * 3958.8

df['arc_distance_miles_numpy'] = arc_distance(df.pickup_longitude, df.pickup_latitude,
df.dropoff_longitude, df.dropoff_latitude)

# Requires cupy and NVDIA GPU
df['arc_distance_miles_cuda'] = df['arc_distance_miles_numpy'].jit_cuda()

# Requires metal2 support on MacOS (Apple Silicon and Radeon GPU supported)
# df['arc_distance_miles_metal'] = df['arc_distance_miles_numpy'].jit_metal()

result_cpu = df.arc_distance_miles_numpy.mean(progress='widget')
result_gpu = df.arc_distance_miles_cuda.mean(progress='widget')
print(f'CPU: {result_cpu:.3f} miles')
print(f'GPU: {result_gpu:.3f} miles')

На картинке выше вы можете увидеть использование GPU Вы можете получить довольно хороший прирост производительности. Если у нас нет графического процессора, не беспокойтесь! Ваэкс Он также поддерживает передачу 📘Numbaи 📘PyТран войдетКомпиляция точно в срок,Это также может значительно улучшить производительность.

Ссылки

Рекомендуем к прочтению

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose