Панды слишком медленные? Быстро используйте 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.