Эффективные методы анализа данных с помощью Pandas и NumPy

Раздел: Data Science -> 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()
# Теперь столбцы плоские
- работа с табличными данными python (работа с табличными данными в python)
- распределение данных python (распределение данных в python)
- статистический анализ данных python (статистический анализ данных в python)

Расширенные примеры анализа данных с 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.

Обучение анализу данных на Python - comments

En
Python для анализа данных обучение (python)