Архив рубрики ~Лента новостей~

5 основных концепций Python, которые должны знать специалисты по анализу данных.

5 основных концепций Python, которые должны знать специалисты по анализу данных.

В этой статье мы подробно рассмотрим пять важнейших концепций Python, которые помогут вам перейти от написания неуклюжего, медленного «спагетти-кода» к созданию молниеносно быстрых, готовых к использованию в производственной среде и функционально эффективных конвейеров обработки данных.

5 основных концепций Python, которые должны знать специалисты по анализу данных.

# Введение

Не стоит использовать Python для анализа данных просто «потому что все остальные так делают!». Доминирование Python в области обработки данных не случайно. Это язык, построенный на очень выразительном и читаемом синтаксисе, который абстрагирует низкоуровневое управление памятью. Однако эта же высокоуровневая абстракция имеет свою цену: стандартное выполнение Python осуществляется с использованием динамической типизации и интерпретации, что может сделать итерацию мучительно медленной.

Для создания высокопроизводительных систем обработки данных специалисту по анализу данных необходимо перейти от стандартных процедурных шаблонов кодирования к специализированным, векторизованным и ориентированным на память подходам. В этой статье мы подробно рассмотрим пять основных концепций Python, которые помогут вам перейти от написания неуклюжего, медленного «спагетти-кода» к созданию молниеносно быстрых, готовых к использованию в производственной среде и функционально эффективных конвейеров обработки данных.

# 1. Векторизация NumPy

Стандартные циклы Python работают медленно. Поскольку Python — интерпретируемый язык, каждая итерация цикла for влечет за собой значительные накладные расходы: проверку типов, динамический поиск методов и подсчет ссылок. При обработке миллионов точек данных эти микронакладные расходы накапливаются, превращаясь в многосекундные узкие места.

Решение заключается в векторизации с помощью NumPy. Вместо последовательной обработки элементов в байт-коде Python, NumPy переносит циклы в высокооптимизированные, предварительно скомпилированные расширения C. Эти операции работают со всеми массивами одновременно, выполняя непрерывные блоки массивов на машинном уровне, часто используя инструкции SIMD (Single Instruction, Multiple Data).

// Неуклюжий способ

Предположим, у нас есть список из миллиона значений с плавающей запятой, представляющих собой необработанные показания датчика, и нам нужно масштабировать каждое показание в 1,5 раза и применить калибровочную константу 10,0. Используя итеративный цикл в Python:

import time # Большой список из 10 миллионов показаний датчиков n_elements = 10_000_000 data_list = [float(x) for x in range(n_elements)] # Масштабирование значений с помощью явного цикла Python start_time = time.time() scaled_list = [] for val in data_list: scaled_list.append(val * 1.5 + 10.0) loop_duration = time.time() — start_time print(f»Реализация цикла заняла: {loop_duration:.6f} секунд»)

Выход:

Выполнение цикла заняло: 0,378866 секунд

// Векторизованный способ

Вот элегантная векторизованная альтернатива. Мы загружаем данные в непрерывный массив NumPy и выполняем арифметические операции непосредственно над объектом массива:

import numpy as np import time # Большой список из 10 миллионов показаний датчиков n_elements = 10_000_000 # Векторизованный способ: NumPy выполняет все вычисления в предварительно скомпилированных циклах C data_array = np.arange(n_elements, dtype=float) start_time = time.time() scaled_array = data_array * 1.5 + 10.0 numpy_duration = time.time() — start_time print(f»Реализация NumPy заняла: {numpy_duration:.6f} секунд») print(f»Ускорение: {loop_duration / numpy_duration:.1f}x быстрее!»)

Выход:

Реализация цикла заняла: 0,348456 секунды. Реализация NumPy заняла: 0,013395 секунды. Ускорение: в 26 раз быстрее!

Векторизация арифметических операций позволяет добиться значительного повышения производительности за счет более чистого и лаконичного кода. Цикл исключается из кода Python и выполняется полностью в высокоскоростном коде C.

# 2. Вещание: математические правила для несоответствующих размеров

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

Вместо дублирования данных для принудительного сопоставления форм, NumPy использует набор математических правил, называемых широковещательной рассылкой. Широковещательная рассылка позволяет выполнять поэлементные операции над массивами различной формы путем виртуального расширения меньшего массива вдоль отсутствующих или одноэлементных измерений, без копирования каких-либо данных в память.

Правила вещания следующие:

  1. Если массивы имеют разный ранг (количество измерений), добавьте к форме массива с более низким рангом единицы до тех пор, пока обе формы не будут иметь одинаковую длину.
  2. Два измерения совместимы, если они равны или если одно из них равно 1.
  3. Если массив совместим, он ведет себя так, как если бы он был растянут вдоль измерения размера 1, чтобы соответствовать форме другого массива.

// Неуклюжий способ

Предположим, у нас есть матрица признаков 3×4 (3 образца, 4 признака), и мы хотим вычесть средние значения столбцов, чтобы «вычесть» средние значения признаков:

import numpy as np features = np.array([ [10.0, 20.0, 30.0, 4.0], [12.0, 24.0, 36.0, 8.0], [14.0, 28.0, 42.0, 12.0] ]) # Среднее значение каждого столбца признаков (форма: (4,)) col_means = np.mean(features, axis=0) # Использование вложенных циклов для ручного де-среднего demeaned_clunky = np.zeros_like(features) for idx in range(features.shape[0]): for col_idx in range(features.shape[1]): demeaned_clunky[idx, col_idx] = features[idx, col_idx] — col_means[col_idx] # Альтернатива: разбиение массива на блоки для принудительного сопоставления shapes tiled_means = np.tile(col_means, (features.shape[0], 1)) demeaned_tiled = features — tiled_means

// По-питоновски

При широковещательной рассылке мы выполняем вычитание напрямую. NumPy автоматически выравнивает матрицу признаков (3, 4) с массивом средних значений столбцов (4, ), рассматривая форму средних значений столбцов как (1, 4):

import numpy as np features = np.array([ [10.0, 20.0, 30.0, 4.0], [12.0, 24.0, 36.0, 8.0], [14.0, 28.0, 42.0, 12.0] ]) col_means = np.mean(features, axis=0) # Вычитание в стиле Python с помощью автоматического широковещательного преобразования demeaned_broadcasting = features — col_means # Деление каждой строки на ее сумму строк # row_sums имеет форму (3,) -> чтобы разделить (3, 4) на (3,), мы расширяем форму до (3, 1) с помощью np.newaxis row_sums = np.sum(features, axis=1) normalized_features = features / row_sums[:, np.newaxis] print(«Demeaned:n», demeaned_broadcasting) print(«nНормализованные строки:n», normalized_features)

Выход:

Обезличение: [[-2. -4. -6. -4.] [ 0. 0. 0. 0.] [ 2. 4. 6. 4.]] Нормализованные строки: [[0.15625 0.3125 0.46875 0.0625 ] [0.15 0.3 0.45 0.1 ] [0.14583333 0.29166667 0.4375 0.125 ]]

Широковещательная рассылка исключает дублирование значений и копирование в память. Внутри NumPy циклы вычитания выполняются со скоростью языка C без создания промежуточной матрицы, что позволяет экономить пропускную способность памяти и ускорять операции.

# 3. Методы Pandas .pipe() и .assign(): Чистые, функциональные конвейеры

Подготовка данных в Pandas часто превращается в запутанный, последовательный код. Разработчики создают множество промежуточных DataFrame (df1, df2 и т. д.), изменяют переменные на месте или используют цепочки скобок. Это приводит к коду, который трудно читать, сложно тестировать и который печально известен своей склонностью к появлению ужасного предупреждения SettingWithCopyWarning.

Современный Pandas поощряет переход от процедурных изменений к функциональным, декларативным конвейерам обработки данных. Используя метод `.assign()` для создания признаков и метод `.pipe()` для многократно используемых операций с несколькими столбцами, вы можете объединять шаги в одном конвейере.

// Неуклюжий способ

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

import pandas as pd import numpy as np raw_data = { 'Customer_ID': [101, 102, 103, 104, 105], 'Age': [25, -5, 47, 120, 31], 'Country': ['usa', 'CANADA', 'usa', 'Germany', 'canada'], 'Raw_Spend': [120.50, 450.00, 80.00, np.nan, 300.00] } df = pd.DataFrame(raw_data) # Последовательные промежуточные изменения df_clean = df.copy() # 1. Отфильтровываем недействительные значения возраста df_clean = df_clean[(df_clean['Age'] >= 0) & (df_clean['Age'] pd.DataFrame: df_out = dataframe.copy() df_out['Country'] = df_out['Country'].str.upper().str.strip() return df_out # Единый элегантный функциональный конвейер df_clean_pipeline = ( df.query(«Age >= 0 and Age

Источник: www.kdnuggets.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Новости робототехники Благодаря новому финансированию монументальный план привезти своих строительных роботов в США. Новости робототехники Телеуправляемый андроид Unitree G1 прооперировал свиней. Им лапароскопически удалили желчный пузырь Новости робототехники Weave Robotics запускает Айзека, своего первого представителя робота-гуманоида Новости робототехники Страх перед человекоподобными роботами подтолкнул рабочих к забастовке на автомобильном заводе Hyundai. Новости робототехники Основатель Максимо рассказывает, как робототехника строит строительство солнечной энергетики. Архив рубрики ~Обо всем~ Астрономы нашли кандидата в самый далекий галактический бар. Он существовал спустя почти 1,2 миллиарда лет после Большого Взрыва Новости робототехники По заключению Национального совета по безопасности на транспорте (NTSB), водитель Tesla, который объяснил аварию тем, что автопилот нажал на педаль газа на 100%. Новости робототехники Mondo Robotics представляет собой Beni, вездеходного робота с электрической розеткой и искусственным интеллектом для потребителей. Архив рубрики ~Обо всем~ «Парачастицы» могут стать представителями третьего царства квантовых частиц Архив рубрики ~Коротко из Telegram~ Нейросеть обучили подсчету и оценке качества семян Архив рубрики ~Коротко из Telegram~ «Комендантский час» на соцсети для подростков 16-17 лет хотят ввести… Архив рубрики ~Коротко из Telegram~ В Южной Корее создадут бесплатного ИИ-бота для всех граждан. Архив рубрики ~Коротко из Telegram~ В США 73% технических вакансий требуют навыков работы с ИИ,… Архив рубрики ~Обо всем~ Компания SpaceX внезапно прервала второй запуск Starship V3 после запуска двигателя. Новости робототехники Благодаря новому финансированию монументальный план привезти своих строительных роботов в США. Новости робототехники Телеуправляемый андроид Unitree G1 прооперировал свиней. Им лапароскопически удалили желчный пузырь Новости робототехники Weave Robotics запускает Айзека, своего первого представителя робота-гуманоида Новости робототехники Страх перед человекоподобными роботами подтолкнул рабочих к забастовке на автомобильном заводе Hyundai. Новости робототехники Основатель Максимо рассказывает, как робототехника строит строительство солнечной энергетики. Архив рубрики ~Обо всем~ Астрономы нашли кандидата в самый далекий галактический бар. Он существовал спустя почти 1,2 миллиарда лет после Большого Взрыва Новости робототехники По заключению Национального совета по безопасности на транспорте (NTSB), водитель Tesla, который объяснил аварию тем, что автопилот нажал на педаль газа на 100%. Новости робототехники Mondo Robotics представляет собой Beni, вездеходного робота с электрической розеткой и искусственным интеллектом для потребителей. Архив рубрики ~Обо всем~ «Парачастицы» могут стать представителями третьего царства квантовых частиц Архив рубрики ~Коротко из Telegram~ Нейросеть обучили подсчету и оценке качества семян Архив рубрики ~Коротко из Telegram~ «Комендантский час» на соцсети для подростков 16-17 лет хотят ввести… Архив рубрики ~Коротко из Telegram~ В Южной Корее создадут бесплатного ИИ-бота для всех граждан. Архив рубрики ~Коротко из Telegram~ В США 73% технических вакансий требуют навыков работы с ИИ,… Архив рубрики ~Обо всем~ Компания SpaceX внезапно прервала второй запуск Starship V3 после запуска двигателя.

Оставить комментарий