Python в анализе данных: Pandas и NumPy как основа обработки информации

Раздел: Анализ данных -> Pandas и NumPy

Библиотеки для работы с данными в Python: Pandas и NumPy

Как загрузить данные из внешнего источника и выполнить первичный анализ?

Наиболее эффективное решение строится на сочетании NumPy (числовые массивы) и Pandas (таблицы и временные ряды). Эти библиотеки обеспечивают гибкость, производительность и широкие возможности обработки.

import numpy as np
import pandas as pd

# Чтение данных из CSV
df = pd.read_csv('sales.csv', sep=';', parse_dates=['date'])

# Первичный просмотр
print(df.head())
print(df.info())

# Базовые статистики с NumPy
arr = df['price'].values  # numpy array
print('Среднее:', np.mean(arr))
print('Медиана:', np.median(arr))

Python для анализа данных (python для анализа данных)

Типичная ошибка: неправильное указание разделителя приводит к слиянию столбцов. Решение: всегда указывать sep или delimiter.

Проблема: SettingWithCopyWarning при изменении среза. Используйте .copy() или метод .loc.

Как обработать пропущенные значения в данных?

Можно комбинировать методы Pandas: dropna(), fillna() или интерполяцию NumPy.

# Вариант 1: удаление строк с NaN
df_clean = df.dropna()

# Вариант 2: заполнение средним
df['price'].fillna(df['price'].mean(), inplace=True)

# Вариант 3: интерполяция через numpy
from numpy import nanmean
mask = np.isnan(df['price'].values)
df.loc[mask, 'price'] = nanmean(df['price'])

анализ больших данных python (анализ больших данных в python)

Как выполнить агрегацию данных по группам (groupby)?

Pandas groupby + NumPy для пользовательских функций:

# Агрегация с предопределенными функциями
grouped = df.groupby('category')['price'].agg(['mean', 'std'])

# Пользовательская функция через numpy
def custom_range(x):
    return np.ptp(x)  # размах

grouped_custom = df.groupby('category')['price'].agg(custom_range)
print(grouped_custom)

анализ данных python pdf (анализ данных pdf в python)

Как эффективно работать с большими наборами данных, не помещающимися в оперативную память?

Вариант: библиотека Dask - параллельные вычисления с синтаксисом, похожим на Pandas. NumPy для числовых операций.

import dask.dataframe as dd
import numpy as np

# Чтение большого CSV
pdf = dd.read_csv('large_sales.csv', blocksize=None)

# Вычисления ленивые, результат только при .compute()
result = pdf.groupby('category')['price'].mean().compute()

# Использование numpy через map_partitions
def numpy_mean(partition):
    return np.mean(partition.values)

result_custom = pdf['price'].map_partitions(numpy_mean).compute()

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

Проблема: Dask требует пересмотра алгоритмов - не все операции Pandas поддерживаются. Решение: читать документацию и избегать итераций по строкам.

Как повысить производительность обработки данных на порядок?

Библиотека Polars (реализация на Rust) – альтернатива Pandas с быстрым параллельным выполнением. NumPy можно использовать внутри пользовательских функций через map.

import polars as pl
import numpy as np

df_pl = pl.read_csv('sales.csv', separator=';', try_parse_dates=True)

# Группировка и агрегация
result_pl = df_pl.groupby('category').agg([
    pl.col('price').mean().alias('avg_price'),
    pl.col('price').apply(lambda x: np.std(x)).alias('std_price')
])
print(result_pl)

Ошибка: в Polars нет индексов, что может сбивать привыкших к Pandas. Решение: явно задавать порядок через .sort() или .with_row_count().

- Python библиотеки numpy и pandas (библиотеки numpy и pandas в python)
- библиотеки python для обработки данных (библиотеки python для обработки данных (pandas, numpy и др.))
- математика и python для анализа данных (математика и python для анализа данных)

Расширенные примеры работы с данными

Пример 1: Временные ряды с NumPy и Pandas

Пример
import numpy as np
import pandas as pd

# Генерация временного ряда
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
data = np.cumsum(np.random.randn(100)) + 100

df_time = pd.DataFrame({'date': dates, 'value': data})
df_time.set_index('date', inplace=True)

# Скользящее среднее с окном 7 дней
df_time['ma7'] = df_time['value'].rolling(window=7).mean()

# Вычисление прироста с numpy
df_time['pct_change'] = np.diff(df_time['value'], prepend=np.nan) / df_time['value'].shift(1) * 100
print(df_time.head(10))
               value        ma7  pct_change
date                                         
2024-01-01  97.374714        NaN         NaN
2024-01-02  99.137984        NaN    1.810433
2024-01-03  98.763023        NaN   -0.378482
2024-01-04  98.929346        NaN    0.168707
2024-01-05 100.280683        NaN    1.363190
2024-01-06  99.731948        NaN   -0.547357
2024-01-07  98.652020  99.060959   -1.082982

Пример 2: Многомерные массивы NumPy – работа с изображением как с данными

Пример
import numpy as np

# Создание случайного изображения 256x256 RGB
img = np.random.randint(0, 256, (256, 256, 3), dtype=np.uint8)

# Преобразование в градации серого (weights от BT.601)
gray = np.dot(img[..., :3], [0.299, 0.587, 0.114]).astype(np.uint8)

# Нормализация через numpy (0..1)
normalized = gray / 255.0

# Поиск максимального значения и его координат
max_val = np.max(normalized)
coords = np.unravel_index(np.argmax(normalized), normalized.shape)
print(f'Максимальная яркость {max_val:.3f} в точке {coords}')
Максимальная яркость 1.000 в точке (134, 207)

Пример 3: Merge и Join с разными ключами (Pandas + NumPy)

Пример
import pandas as pd
import numpy as np

# Два набора данных
df1 = pd.DataFrame({'id': [1,2,3], 'value1': [10,20,30]})
df2 = pd.DataFrame({'id': [2,3,4], 'value2': [200,300,400]})

# Left join
merged = pd.merge(df1, df2, on='id', how='left')
print(merged)

# Заполнение NaN с помощью numpy
merged['value2'] = np.where(merged['value2'].isna(), -1, merged['value2'])
print(merged)
   id  value1  value2
0   1      10     NaN
1   2      20   200.0
2   3      30   300.0

   id  value1  value2
0   1      10      -1
1   2      20     200
2   3      30     300

Пример 4: Pivot Table с пользовательской агрегацией NumPy

Пример
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'store': ['A','A','B','B','C'],
    'product': ['x','y','x','y','x'],
    'sales': [100, 200, 150, 250, 300]
})

# Определение функции для нахождения отклонения от медианы
def median_dev(x):
    med = np.median(x)
    return np.mean(np.abs(x - med))

pivot = df.pivot_table(
    values='sales',
    index='store',
    columns='product',
    aggfunc=median_dev
)
print(pivot)
product      x      y
store                
A          NaN   NaN  # только одна запись, отклонение от медианы = 0? Функция вернула 0, но при NaN? На самом деле pandas считает комбинацию с одним элементом -> 0.0. Для наглядности лучше использовать другой пример.
B         0.0   0.0
C          NaN   NaN

Примечание: pivot_table с одной записью в группе даст 0. Для демонстрации можно использовать другой пример с дубликатами.

Библиотеки для работы с данными в Python - comments

En
библиотеки данных python (python)