pandas - это быстрый, мощный, гибкий и простой в использовании инструмент для анализа и обработки данных с открытым исходным кодом, созданный на основе языка программирования Python.
В этой статье я расскажу о некоторых передовых методах панд, которые я использовал в задачах анализа данных и машинного обучения.
Включают:
groupby()
+agg(), apply(), transform()
и его Практический сценарий и Сравнение производительности- Данные о расчесывании:
merge(),concat(),join(),append()
Исходные данные: train.csv, поддельные данные о продажах автомобилей, которые я создал с помощью кода Python.
Группа по
1. Простое агрегирование
Вычислите сводную статистику (или статистику) для каждой группы.
Примеры: вычисление групповых сумм, средних или стандартных отклонений.
df.groupby('brand').mean() # Compute means price of brands
2. Применение нескольких функций в одной строке
Вы можете передать список или словарь функций для агрегирования с выводом DataFrame. Вы можете использовать функцию NumPy или строковое имя функции.
Пример: сгруппируйте по «бренду» и «модели», а затем вычислите сумму «цены».
df.groupby(['column A']).agg({'column B':['sum']} or df.groupby(['column A']).agg({'column B':[np.sum()]}
3. Применение различных функций к столбцам DataFrame.
df.groupby(['column A','column B']).agg({'column C':[np.mean], 'column D':[np.sum]})
В этом примере вычислите среднюю продажную цену и общий объем каждой модели по брендам.
4. apply () + лямбда
Функция apply()
может использовать выражение lambda
для более гибких вычислений.
В приведенном ниже примере вычислите разницу между ценой и средним значением после группировки по марке и модели.
5. groupby () + transform ()
Метод transform
возвращает объект, который имеет такой же индекс (тот же размер), что и объект, который группируется. Просто метод transform
добавляет результат операций agg
, таких как mean, sum,
и std
, к исходным данным. Эта функция полезна в реальных проектах.
Пример сценария использования: добавьте среднюю цену в новый столбец к исходным данным.
Если мы используем функции agg, merge...
для выполнения вышеуказанного требования, нам потребуется как минимум 4 строки кода.
Используя transform
, нам нужна только одна строчка кода.
Практический сценарий
- Рассмотрим
groupby() + agg(aggregating functions)
при простых вычисленияхmean, std, max, min...
после группировки. Он может использовать строковое имя функции, например.agg('sum')
, или функции NumPy, напримерnumpy.sum
- Рассмотрим
groupby() + apply() + lambda
, когда нам нужно использовать сложные функции.apply()
не может использовать строковое имя функции, например'sum'
. - Рассмотрим
groupby() + transform()
, когда нам нужно использовать простые агрегатные функции и вернуть ту же структуру, что и исходныйDataframe
. Он может использовать лямбда-функции, функции NumPy и имя строковой функции.
Сравнение производительности
Хотя эти три функции agg(),apply(), and transform()
могут вычислять простые операции агрегирования, их производительность различается.
Мы отдельно рассчитываем время расчета каждого комбинированного метода при одном и том же спросе: min,max,sum,count,mean
.
Мы отобрали данные конкурса в Kaggle, всего 2,935,849
записей. (Sales_train.csv)
- agg () + названия функций
2. Agg () + numpy функции
3. apply () + лямбда
4. transform () + имена функций
5. transform () + лямбда
Из результатов теста видно, что комбинация agg()+function names
является самой быстрой (всего 1,3 секунды), а transform()+lambda
- самой медленной (всего 10 минут 1 секунда). Поэтому рекомендуется использовать agg()+function names
при выполнении простых вычислений.
Расчесывание данных
В приведенном выше примере мы использовали pandas.DataFrame.merge()
для объединения данных. pandas предоставляют различные средства для простого объединения данных с различными видами логики набора для индексов и функциональных возможностей реляционной алгебры в случае операций типа соединения / слияния.
Есть три способа объединить Dataframe
в пандах: pandas.DataFrame.merge(),pandas.DataFrame.join(),pandas.DataFrame.concat(),
и pandas.DataFrame.append()
.
Практический сценарий
- Учитывайте
pandas.DataFrame.concat()
при объединенииDataFrames
с той же структурой. Например, объедините данные за разные периоды времени в полный обучающий набор.
Нет существенных различий междуpandas.DataFrame.concat()
иpandas.DataFrame.append()
. - Учитывайте
pandas.DataFrame.merge()
при объединении дополнительныхDataFrame
объектов, учитывайтеpandas.DataFrame.join()
при объединении несколькихDataFrame
объектов по индексу.pandas.DataFrame.merge()
похоже на SQL в реляционных базах данных. На практикеmerge()
в основном используется для добавления данных нового столбца или строки из разных наборов данных в обучающий набор. - Слияние по вертикали считайте
pandas.DataFrame.concat()
, по горизонтали считайтеpandas.DataFrame.merge()
.
Пример:
Весь исходный код:
Спасибо за внимание.