Эффективные методы анализа данных с помощью Pandas и NumPy
Основы анализа данных с Pandas и NumPy
Анализ данных на Python позволяет эффективно обрабатывать, очищать и визуализировать информацию. Две ключевые библиотеки — Pandas и NumPy — предоставляют гибкие инструменты для работы с таблицами и числовыми массивами. В статье рассматриваются практические приёмы, типичные сценарии и возможные сложности.
Как загрузить CSV-файл и выполнить первичный осмотр данных?
Библиотека Pandas предлагает метод read_csv, который считывает данные в DataFrame. Первичный анализ включает просмотр первых строк, типов столбцов и базовой статистики.
import pandas as pd
df = pd.read_csv("sales.csv")
print(df.head())Python для анализа данных (python для анализа данных)
date product quantity price 0 2024-01-01 A 10 100 1 2024-01-02 B 5 200 2 2024-01-03 A 8 150
анализ больших данных python (анализ больших данных в python)
Пояснение: df.head() показывает первые 5 строк. Для быстрого понимания структуры используется df.info() и df.describe().
Типичная ошибка:
Файл с разделителем не по умолчанию. Если CSV использует точку с запятой, без параметра sep=';' данные считываются некорректно. Решение — явно указать разделитель.
df = pd.read_csv("sales.csv", sep=';')анализ данных python pdf (анализ данных pdf в python)
Как обработать пропущенные значения в столбцах?
Проблема пропусков решается несколькими способами: удаление строк с NaN, заполнение средним/медианой или интерполяция. Выбор зависит от природы данных.
Вариант 1: удаление строк с пропусками
df_clean = df.dropna()
print("Размер после удаления:", df_clean.shape)Python анализ данных и машинное обучение (анализ данных и машинное обучение на python)
Вариант 2: заполнение средним значением
df_filled = df.fillna(df.mean())
print("Количество NaN после заполнения:", df_filled.isna().sum().sum())анализ данных с использованием python (анализ данных с использованием python)
Пояснение: df.mean() вычисляет среднее по каждому числовому столбцу, а fillna() подставляет его вместо NaN.
Типичная ошибка:
Заполнение средним для категориальных столбцов приводит к некорректным данным. Необходимо проверять типы: df.dtypes.
# Правильный подход для категориальных данных – мода
df_filled_obj = df.select_dtypes(include='object').fillna(df.mode().iloc[0])Python анализ текстовых данных (анализ текстовых данных в python)
Как применить функцию к каждому элементу столбца с использованием NumPy?
Для быстрых поэлементных операций полезны векторизованные функции NumPy, а не циклы.
import numpy as np
df['price_log'] = np.log(df['price'])
df['price_standardized'] = (df['price'] - df['price'].mean()) / df['price'].std()Python библиотеки numpy и pandas (библиотеки numpy и pandas в python)
Пояснение: np.log() применяется ко всему столбцу без явного цикла. Аналогично стандартизация с помощью broadcasting.
Ошибка:
Применение функций Python (например, lambda) через apply может быть медленнее, чем векторизованные операции NumPy или Pandas. Для максимальной производительности следует использовать встроенные методы.
# Медленно
df['price_sqrt'] = df['price'].apply(lambda x: x**0.5)
# Быстро (векторизация)
df['price_sqrt'] = np.sqrt(df['price'])библиотеки python для обработки данных (библиотеки python для обработки данных (pandas, numpy и др.))
Как выполнить группировку и агрегацию данных?
Группировка — ключевой этап анализа. Метод groupby вместе с агрегациями позволяет получить сводную статистику по категориям.
# Средняя цена по продуктам
grouped = df.groupby('product')['price'].mean()
print(grouped)
# Несколько агрегаций одним вызовом
agg_result = df.groupby('product').agg({'price': ['mean', 'std'], 'quantity': 'sum'})
print(agg_result)математика и python для анализа данных (математика и python для анализа данных)
product
A 125.0
B 200.0
Name: price, dtype: float64
price quantity
mean std sum
product
A 125.0 35.36 18
B 200.0 NaN 5методы анализа данных python (методы анализа данных в python)
Пояснение: groupby возвращает объект GroupBy, к которому применяются агрегирующие функции. agg позволяет задать разные функции для разных столбцов.
Типичная ошибка:
Забыть сбросить индекс после группировки (reset_index()). Результат содержит мультииндекс, что усложняет дальнейшую работу.
agg_result_reset = agg_result.reset_index()
# Теперь столбцы плоские
Расширенные примеры анализа данных с Pandas и NumPy
Пример 1: Работа с датами и временными рядами
Часто требуется преобразовать строковый столбец с датами в тип datetime и извлечь компоненты (год, месяц, день недели).
import pandas as pd
df = pd.read_csv("sales.csv")
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['weekday'] = df['date'].dt.day_name()
print(df[['date', 'year', 'month', 'weekday']].head())
date year month weekday 0 2024-01-01 2024 1 Monday 1 2024-01-02 2024 1 Tuesday 2 2024-01-03 2024 1 Wednesday
Проблема:
Нестандартный формат даты (например, "01/02/2024"). Параметр dayfirst в pd.to_datetime решает проблему.
df['date'] = pd.to_datetime(df['date'], dayfirst=True)
Пример 2: Создание сводных таблиц (Pivot Tables)
Аналог Excel-сводных таблиц в Pandas — метод pivot_table.
pivot = df.pivot_table(values='quantity', index='product', columns='month', aggfunc='sum', fill_value=0)
print(pivot)
month 1 2 product A 18 0 B 5 10
Пояснение: index — строки, columns — столбцы, aggfunc — функция агрегации.
Типичная ошибка:
Если в данных несколько значений для одной комбинации index+columns, без aggfunc возникнет ошибка. Всегда указывать функцию.
Пример 3: Использование rolling для скользящих окон
Скользящее среднее помогает сгладить временной ряд.
df['rolling_mean_3'] = df['quantity'].rolling(window=3).mean()
print(df[['date', 'quantity', 'rolling_mean_3']].head(5))
date quantity rolling_mean_3 0 2024-01-01 10 NaN 1 2024-01-02 5 NaN 2 2024-01-03 8 7.666667
Пояснение: первые два значения NaN, так как окно меньше 3. Параметр min_periods управляет минимальным числом ненулевых значений.
Пример 4: Broadcasting в NumPy для поэлементных операций с разными размерностями
NumPy автоматически расширяет массивы при совместимости форм.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
shift = np.array([10, 20, 30])
result = arr + shift
print(result)
[[11 22 33] [14 25 36]]
Пояснение: массив shift (3,) совмещается со второй осью массива (2,3) по правилам broadcasting.
Ошибка:
Несовместимость форм (например, arr (2,3) и shift (2,)). Чтобы исправить, нужно изменить размерность shift до (2,1) с помощью reshape.
shift_2d = shift.reshape(2, -1)
result = arr + shift_2d # теперь (2,3) + (2,1) -> (2,3)
Пример 5: Условная замена значений с помощью np.where
Создание нового столбца на основе условия.
df['price_category'] = np.where(df['price'] > 150, 'High', 'Low')
print(df[['price', 'price_category']].head())
price price_category 0 100 Low 1 200 High 2 150 Low
Пояснение: np.where возвращает массив с элементами 'High' для True и 'Low' для False.