Pandas: мощный инструмент анализа данных для Python-разработчиков
Для кого эта статья:
- Дата-аналитики и специалисты по анализу данных
- Студенты и начинающие специалисты в области программирования на Python
Люди, заинтересованные в самообучении и освоении инструментов для анализа данных
Представьте, что вам нужно проанализировать таблицу с миллионом строк. Excel зависает, SQL кажется слишком сложным, а писать собственные алгоритмы обработки в Python — слишком трудоёмко. Именно в такой момент на помощь приходит Pandas — библиотека, превращающая Python в мощный инструмент анализа данных. За свою десятилетнюю историю она стала золотым стандартом для работы с табличными данными и неотъемлемой частью инструментария любого дата-аналитика. Готовы узнать, как Pandas может превратить ваши хаотичные данные в ценные инсайты? 🐼
Пройдите тест, узнайте какой профессии подходитеСколько вам лет0%До 18От 18 до 24От 25 до 34От 35 до 44От 45 до 49От 50 до 54Больше 55
Хотите освоить Pandas на профессиональном уровне и стать востребованным аналитиком данных? Курс Профессия аналитик данных от Skypro предлагает не просто теорию, но и практические кейсы от реальных компаний. Вы научитесь не только использовать базовые функции Pandas, но и применять продвинутые техники анализа, востребованные на рынке. Диплом о профессиональной переподготовке и поддержка в трудоустройстве ждут вас уже через 9 месяцев!
Что такое Pandas и зачем нужна эта библиотека
Pandas (Python Data Analysis Library) — это высокоуровневая библиотека для Python, разработанная для манипуляции данными и их анализа. Созданная Уэсом Маккинни в 2008 году, она быстро стала незаменимым инструментом в арсенале аналитиков данных, исследователей и разработчиков.
Павел Смирнов, ведущий дата-аналитик Мой первый проект в роли аналитика был настоящим кошмаром. Я получил Excel-файл с данными о продажах за пять лет — более 500 000 строк с десятками столбцов. Попытка открыть его в Excel приводила к зависанию компьютера, а руководство ждало отчет через два дня. В отчаянии я вспомнил о Pandas, о котором читал мельком. За выходные я написал скрипт, который не только обрабатывал этот массив данных за секунды, но и позволял делать сложные срезы и агрегации. Мой отчет произвел фурор: я смог найти сезонные паттерны и аномалии, которые раньше никто не замечал. С тех пор я стал евангелистом Pandas в компании, обучив основам библиотеки всю нашу команду аналитиков.
Ключевые преимущества Pandas, которые делают её незаменимой для работы с данными:
- Эффективные структуры данных — встроенные объекты Series и DataFrame оптимизированы для быстрой обработки табличных данных
- Интеллектуальная обработка пропусков — автоматическое определение и специальные методы для работы с отсутствующими данными
- Мощные инструменты манипуляции данными — фильтрация, группировка, объединение и трансформация данных производятся простыми командами
- Интеграция с другими библиотеками — бесшовное взаимодействие с NumPy, Matplotlib, scikit-learn и другими инструментами экосистемы Python
- Работа с разными форматами — чтение и запись данных в CSV, Excel, SQL, JSON и другие форматы
Когда следует использовать Pandas? Вот сравнение с другими популярными инструментами:
| Инструмент | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Pandas | Гибкость, богатый функционал, интуитивный API | Ограничения производительности на очень больших данных | Для большинства задач анализа данных среднего размера (до ~10 GB) |
| Excel | Визуальный интерфейс, низкий порог входа | Ограничение на количество строк, медленная работа с большими данными | Для небольших наборов данных и быстрого визуального анализа |
| SQL | Эффективность при работе с большими данными, мощные запросы | Ограниченные возможности для статистического анализа | Для работы с большими реляционными базами данных |
| Spark (PySpark) | Распределенная обработка огромных объемов данных | Сложность настройки, высокий порог входа | Для обработки по-настоящему больших данных (Big Data) |
Pandas идеально подходит для задач, где требуется комбинация гибкости Python и эффективности специализированных систем анализа данных. Она особенно незаменима при предварительной обработке (препроцессинге) данных для машинного обучения, исследовательском анализе данных и подготовке бизнес-отчетов. 📊

Установка и первые шаги с библиотекой Pandas
Установка Pandas — это первый шаг в увлекательном путешествии по миру анализа данных. К счастью, процесс установки прост и быстр, даже для новичков. 💻
Существует несколько способов установки Pandas:
- Через pip (рекомендуемый способ):
pip install pandas - Через Anaconda (комплексная платформа для науки о данных):
conda install pandas - Через дистрибутивы Linux:
sudo apt-get install python3-pandas(для Ubuntu/Debian)
После установки можно проверить, что всё работает корректно, импортировав библиотеку в Python:
import pandas as pd
print(pd.__version__)
Если вы видите номер версии (например, 1.5.3) без ошибок, значит, установка прошла успешно, и вы готовы начать работу! 🎉
Давайте разберем несколько простых примеров, которые помогут вам сделать первые шаги с Pandas:
Пример 1: Создание простого DataFrame вручную
import pandas as pd
# Создаём словарь с данными
data = {
'Имя': ['Анна', 'Иван', 'Мария', 'Павел'],
'Возраст': [25, 30, 22, 35],
'Город': ['Москва', 'Санкт-Петербург', 'Казань', 'Новосибирск'],
'Зарплата': [70000, 85000, 65000, 90000]
}
# Создаём DataFrame из словаря
df = pd.DataFrame(data)
# Выводим DataFrame
print(df)
Пример 2: Чтение данных из файла CSV
# Предположим, у нас есть файл "sales.csv" с данными о продажах
sales_df = pd.read_csv('sales.csv')
# Просмотр первых 5 строк
print(sales_df.head())
# Получение базовой информации о данных
print(sales_df.info())
# Основные статистические показатели числовых столбцов
print(sales_df.describe())
Пример 3: Работа с внешними источниками данных
# Чтение данных из URL
url = 'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
covid_df = pd.read_csv(url)
# Просмотр последних 5 строк
print(covid_df.tail())
# Проверка размера данных (строки, столбцы)
print(f"Размер DataFrame: {covid_df.shape}")
Анна Петрова, преподаватель курсов по анализу данных На первом занятии моего курса я обычно даю студентам задание проанализировать набор данных об авиарейсах. Помню, как одна студентка — опытный бухгалтер с 15-летним стажем работы в Excel — скептически отнеслась к необходимости изучать Pandas. "Зачем мне это, если я могу всё сделать в Excel?" — спросила она. Я предложила ей небольшой челлендж: посчитать среднюю задержку рейсов по авиакомпаниям за каждый месяц 2019 года. Файл содержал около 2 миллионов строк. Пока она пыталась открыть его в Excel (безуспешно), я написала 5 строк кода на Pandas и через 10 секунд показала ей не только таблицу с результатами, но и визуализацию тренда. Её глаза округлились, и с того момента она стала самой увлеченной студенткой курса. Через полгода она сменила работу и теперь руководит аналитическим отделом в транспортной компании, где ежедневно использует Pandas для принятия бизнес-решений.
Типичные ошибки новичков при первых шагах с Pandas:
- Забывать про конвенцию импорта — общепринятая практика использовать
import pandas as pd - Игнорировать цепочки методов — большинство методов Pandas возвращают новый DataFrame, что позволяет их объединять
- Неэффективное использование памяти — работа с очень большими наборами данных без учета оптимизации
- Избыточные циклы — использование циклов Python вместо встроенных векторизованных операций Pandas
Инструментарий для комфортной работы с Pandas:
| Инструмент | Описание | Почему стоит использовать |
|---|---|---|
| Jupyter Notebook/Lab | Интерактивная среда для анализа данных | Интерактивное выполнение кода, встроенная визуализация результатов |
| VS Code + Python Extension | Редактор кода с поддержкой интерактивных ячеек | Полноценная IDE с подсветкой синтаксиса и интеграцией с Git |
| Google Colab | Облачный Jupyter Notebook от Google | Бесплатный доступ к вычислительным ресурсам, включая GPU |
| Pandas Profiling | Библиотека для автоматического анализа данных | Генерирует подробный HTML-отчет о структуре DataFrame |
Следуя этим рекомендациям, вы сможете быстрее преодолеть начальный порог и эффективно использовать всю мощь Pandas для анализа данных. 🚀
Структуры данных в Pandas: Series и DataFrame
Фундаментом Pandas являются две основные структуры данных: Series и DataFrame. Понимание их особенностей и различий критически важно для эффективного использования библиотеки. 🧩
Series — одномерная структура данных, напоминающая столбец в таблице или массив с именованными индексами. Фактически, это обертка над массивами NumPy с дополнительными возможностями:
import pandas as pd
import numpy as np
# Создание Series из списка
s1 = pd.Series([10, 20, 30, 40])
print(s1)
# Создание Series с пользовательским индексом
s2 = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s2)
# Создание Series из словаря
s3 = pd.Series({'a': 10, 'b': 20, 'c': 30, 'd': 40})
print(s3)
# Векторизованные операции
print(s3 * 2)
print(np.sqrt(s3))
DataFrame — двумерная структура данных, подобная таблице в базе данных, электронной таблице Excel или словарю объектов Series. Это основной рабочий инструмент при анализе данных с Pandas:
# Создание DataFrame из словаря
data = {
'Имя': ['Алексей', 'Екатерина', 'Дмитрий', 'Ольга'],
'Возраст': [28, 24, 32, 30],
'Рейтинг': [4\.7, 4.9, 4.2, 4.8]
}
df1 = pd.DataFrame(data)
print(df1)
# Создание DataFrame из списка словарей
people = [
{'Имя': 'Алексей', 'Возраст': 28, 'Город': 'Москва'},
{'Имя': 'Екатерина', 'Возраст': 24, 'Город': 'Казань'},
{'Имя': 'Дмитрий', 'Возраст': 32, 'Город': 'Новосибирск'}
]
df2 = pd.DataFrame(people)
print(df2)
# Создание DataFrame из внешнего источника
df3 = pd.read_csv('data.csv')
Ключевые характеристики и операции с Series и DataFrame:
- Индексы — и Series, и DataFrame используют индексы для быстрого доступа к данным
- Типы данных — каждый столбец DataFrame может иметь свой тип данных (int, float, string, datetime и т.д.)
- Извлечение данных — доступ к столбцам, строкам и отдельным элементам через множество методов
- Метаданные — информация о размерах, типах данных, статистических показателях доступна через атрибуты и методы
Давайте рассмотрим основные способы выборки данных из DataFrame:
# Создадим тестовый DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': ['a', 'b', 'c', 'd', 'e'],
'D': [1\.1, 1.2, 1.3, 1.4, 1.5]
})
# Выбор столбца (возвращает Series)
print(df['A'])
print(df.A) # альтернативный синтаксис для строковых имен столбцов
# Выбор нескольких столбцов (возвращает DataFrame)
print(df[['A', 'C']])
# Выбор строк по индексу с помощью loc (на основе меток)
print(df.loc[1:3])
# Выбор строк по позиции с помощью iloc (на основе целочисленных позиций)
print(df.iloc[1:3])
# Выбор строк и столбцов одновременно
print(df.loc[1:3, ['A', 'C']])
print(df.iloc[1:3, [0, 2]])
# Выбор данных по условию
print(df[df.A > 2])
print(df[(df.A > 2) & (df.B < 50)])
Одной из мощных особенностей Pandas является возможность работы с отсутствующими данными (NaN). Вот основные методы для обработки пропусков:
# Создадим DataFrame с пропусками
df_na = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [10, np.nan, 30, 40, 50],
'C': ['a', 'b', 'c', np.nan, 'e']
})
# Проверка на наличие пропусков
print(df_na.isna()) # или df_na.isnull()
print(df_na.isna().sum()) # количество пропусков по столбцам
# Удаление строк с пропусками
print(df_na.dropna())
# Удаление столбцов с пропусками
print(df_na.dropna(axis=1))
# Заполнение пропусков
print(df_na.fillna(0)) # заполнение константой
print(df_na.fillna({'A': 0, 'B': -1, 'C': 'unknown'})) # разные значения для разных столбцов
print(df_na.fillna(method='ffill')) # заполнение предыдущим значением
print(df_na.fillna(method='bfill')) # заполнение следующим значением
Сравнение Series и DataFrame позволяет понять, когда использовать каждую структуру:
| Характеристика | Series | DataFrame |
|---|---|---|
| Размерность | Одномерная (1D) | Двумерная (2D) |
| Структурный аналог | Столбец таблицы, массив с метками | Таблица, электронная таблица |
| Типичное применение | Временные ряды, одномерные наборы данных | Табличные данные с несколькими признаками |
| Индексирование | Одномерный индекс | Строчный и столбцовый индексы |
| Методы для работы с осями | Ограниченный набор | Богатый набор методов для обеих осей |
| Типы данных | Один тип для всего Series | Разные типы для разных столбцов |
Понимание различий между Series и DataFrame, а также методов доступа к данным формирует основу для эффективной работы с Pandas. По мере накопления опыта вы будете интуитивно выбирать оптимальные способы манипуляции данными для решения конкретных задач анализа. 🔍
Основные операции с данными в Pandas
Умение эффективно манипулировать данными — ключевой навык для любого аналитика. Pandas предлагает богатый арсенал инструментов для трансформации, фильтрации и агрегирования данных. Освоение этих операций значительно ускорит ваш рабочий процесс. 🔧
1. Фильтрация данных
Фильтрация — одна из наиболее частых операций при анализе. Pandas позволяет легко выбирать подмножества данных на основе условий:
import pandas as pd
import numpy as np
# Создадим тестовый DataFrame
df = pd.DataFrame({
'Товар': ['Ноутбук', 'Смартфон', 'Наушники', 'Планшет', 'Клавиатура'],
'Категория': ['Компьютеры', 'Мобильные', 'Аксессуары', 'Мобильные', 'Аксессуары'],
'Цена': [65000, 45000, 8000, 35000, 3500],
'Рейтинг': [4\.7, 4.9, 4.5, 4.2, 4.8],
'В_наличии': [True, False, True, True, True]
})
# Простая фильтрация по одному условию
дорогие_товары = df[df['Цена'] > 30000]
print("Дорогие товары:\n", дорогие_товары)
# Фильтрация по нескольким условиям
доступные_аксессуары = df[(df['Категория'] == 'Аксессуары') & (df['В_наличии'] == True)]
print("\nДоступные аксессуары:\n", доступные_аксессуары)
# Фильтрация с использованием метода query (более читаемый синтаксис)
популярные_товары = df.query('Рейтинг > 4.5 and В_наличии == True')
print("\nПопулярные доступные товары:\n", популярные_товары)
# Фильтрация с использованием метода isin
мобильные_категории = df[df['Категория'].isin(['Мобильные', 'Аксессуары'])]
print("\nМобильные категории товаров:\n", мобильные_категории)
2. Сортировка данных
Упорядочивание данных помогает выявить паттерны и экстремумы:
# Сортировка по одному столбцу
по_цене = df.sort_values('Цена')
print("Сортировка по возрастанию цены:\n", по_цене)
# Сортировка по нескольким столбцам
по_категории_и_цене = df.sort_values(['Категория', 'Цена'], ascending=[True, False])
print("\nСортировка по категории и убыванию цены:\n", по_категории_и_цене)
# Сортировка по индексу
по_индексу = df.sort_index()
print("\nСортировка по индексу:\n", по_индексу)
3. Группировка и агрегирование
Группировка данных позволяет получать сводную статистику по категориям:
# Группировка с одной агрегирующей функцией
средняя_цена_по_категориям = df.groupby('Категория')['Цена'].mean()
print("Средняя цена по категориям:\n", средняя_цена_по_категориям)
# Несколько агрегаций одновременно
статистика_по_категориям = df.groupby('Категория').agg({
'Цена': ['mean', 'min', 'max'],
'Рейтинг': ['mean', 'count']
})
print("\nРазличная статистика по категориям:\n", статистика_по_категориям)
# Пользовательская функция агрегации
def ценовой_диапазон(серия):
return f"{серия.min()} – {серия.max()}"
диапазоны_цен = df.groupby('Категория')['Цена'].agg(ценовой_диапазон)
print("\nЦеновые диапазоны по категориям:\n", диапазоны_цен)
4. Трансформация данных
Pandas предлагает множество функций для изменения, добавления и пересчета данных:
# Добавление нового столбца
df['Скидка'] = df['Цена'] * 0.1
df['Цена_со_скидкой'] = df['Цена'] – df['Скидка']
print("DataFrame с новыми столбцами:\n", df)
# Применение функции к столбцу
df['Ценовая_категория'] = df['Цена'].apply(
lambda x: 'Премиум' if x > 50000 else ('Средний' if x > 10000 else 'Бюджетный')
)
print("\nДобавление категории цены:\n", df)
# Преобразование всего DataFrame
нормализованные_цены = df[['Цена', 'Цена_со_скидкой']].apply(
lambda x: (x – x.min()) / (x.max() – x.min())
)
print("\nНормализованные цены:\n", нормализованные_цены)
5. Работа с пропущенными и дублирующимися данными
Реальные данные редко бывают идеальными. Pandas предлагает инструменты для очистки данных:
# Создадим DataFrame с пропусками и дубликатами
df_грязный = pd.DataFrame({
'ID': [1, 2, 2, 3, 4, 5],
'Имя': ['Анна', 'Иван', 'Иван', 'Мария', None, 'Сергей'],
'Баллы': [85, 92, 92, None, 78, 88]
})
# Обнаружение дубликатов
print("Дублирующиеся строки:\n", df_грязный.duplicated())
# Удаление дубликатов
df_уникальный = df_грязный.drop_duplicates()
print("\nDataFrame без дубликатов:\n", df_уникальный)
# Заполнение пропусков
df_заполненный = df_уникальный.fillna({
'Имя': 'Неизвестно',
'Баллы': df_уникальный['Баллы'].mean()
})
print("\nDataFrame с заполненными пропусками:\n", df_заполненный)
# Интерполяция значений (для числовых данных)
df_интерполированный = df_уникальный.copy()
df_интерполированный['Баллы'] = df_интерполированный['Баллы'].interpolate()
print("\nDataFrame с интерполированными значениями:\n", df_интерполированный)
6. Слияние и объединение данных
Объединение данных из разных источников — распространенная задача в анализе данных:
# Создадим два DataFrame для демонстрации
df1 = pd.DataFrame({
'ID': [1, 2, 3, 4],
'Имя': ['Анна', 'Иван', 'Мария', 'Павел'],
'Отдел': ['Маркетинг', 'Разработка', 'Маркетинг', 'Продажи']
})
df2 = pd.DataFrame({
'ID': [2, 3, 4, 5],
'Зарплата': [85000, 95000, 75000, 90000],
'Стаж': [2, 5, 1, 3]
})
# Внутреннее соединение (только совпадающие записи)
inner_join = pd.merge(df1, df2, on='ID', how='inner')
print("Внутреннее соединение:\n", inner_join)
# Левое соединение (все записи из левого DataFrame)
left_join = pd.merge(df1, df2, on='ID', how='left')
print("\nЛевое соединение:\n", left_join)
# Внешнее соединение (все записи из обоих DataFrame)
outer_join = pd.merge(df1, df2, on='ID', how='outer')
print("\nВнешнее соединение:\n", outer_join)
# Конкатенация (объединение строк)
df3 = pd.DataFrame({
'ID': [6, 7],
'Имя': ['Алексей', 'Елена'],
'Отдел': ['Разработка', 'Продажи']
})
вертикальное_объединение = pd.concat([df1, df3], ignore_index=True)
print("\nВертикальное объединение:\n", вертикальное_объединение)
Эффективное использование этих операций позволяет быстро трансформировать данные из исходного формата в структуру, необходимую для конкретного анализа или визуализации. С практикой эти методы становятся второй натурой, значительно ускоряя процесс анализа данных. 🚀
Анализ и визуализация данных с помощью Pandas
После подготовки и очистки данных наступает самый интересный этап — их анализ и визуализация. Pandas предоставляет мощные инструменты для исследования данных и создания информативных визуализаций, которые помогают выявить тренды, аномалии и закономерности. 📈
1. Статистический анализ данных
Pandas включает множество методов для расчета описательных статистик:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Загрузим демонстрационный набор данных
# Для примера создадим данные о продажах в разных регионах
np.random.seed(42) # для воспроизводимости результатов
dates = pd.date_range('20230101', periods=100)
regions = ['Центр', 'Север', 'Юг', 'Запад', 'Восток']
products = ['Продукт A', 'Продукт B', 'Продукт C']
data = []
for _ in range(500):
date = np.random.choice(dates)
region = np.random.choice(regions)
product = np.random.choice(products)
quantity = np.random.randint(1, 50)
price = np.random.uniform(100, 1000)
revenue = quantity * price
data.append([date, region, product, quantity, price, revenue])
sales_df = pd.DataFrame(data, columns=['Дата', 'Регион', 'Продукт', 'Количество', 'Цена', 'Выручка'])
# Базовая статистика
print("Базовая статистика по числовым столбцам:")
print(sales_df.describe())
# Статистика по категориальным данным
print("\nЧастота значений в столбце 'Регион':")
print(sales_df['Регион'].value_counts())
# Группировка и агрегация для анализа
print("\nСредняя выручка по регионам:")
print(sales_df.groupby('Регион')['Выручка'].mean().sort_values(ascending=False))
# Анализ временных трендов
sales_by_date = sales_df.groupby(sales_df['Дата'].dt.month)['Выручка'].sum()
print("\nОбщая выручка по месяцам:")
print(sales_by_date)
# Корреляционный анализ
print("\nКорреляция между числовыми переменными:")
print(sales_df[['Количество', 'Цена', 'Выручка']].corr())
2. Встроенные возможности визуализации в Pandas
Pandas интегрируется с matplotlib, обеспечивая простые методы для создания стандартных визуализаций:
# Гистограмма распределения цен
sales_df['Цена'].hist(bins=20, figsize=(10, 5))
plt.title('Распределение цен')
plt.xlabel('Цена')
plt.ylabel('Частота')
# plt.savefig('price_histogram.png')
# plt.show()
# Линейный график выручки по времени
sales_df.groupby('Дата')['Выручка'].sum().plot(figsize=(12, 6))
plt.title('Динамика выручки')
plt.xlabel('Дата')
plt.ylabel('Выручка')
# plt.show()
# Столбчатая диаграмма по регионам
region_sales = sales_df.groupby('Регион')['Выручка'].sum().sort_values(ascending=False)
region_sales.plot(kind='bar', figsize=(10, 5))
plt.title('Выручка по регионам')
plt.xlabel('Регион')
plt.ylabel('Выручка')
# plt.show()
# Круговая диаграмма распределения продуктов
product_sales = sales_df.groupby('Продукт')['Выручка'].sum()
product_sales.plot(kind='pie', figsize=(8, 8), autopct='%1.1f%%')
plt.title('Распределение выручки по продуктам')
# plt.show()
# Диаграмма рассеяния (scatter plot)
sales_df.plot.scatter(x='Цена', y='Количество', figsize=(10, 6), alpha=0.5)
plt.title('Зависимость между ценой и количеством')
# plt.show()
# Ящик с усами (box plot) для анализа распределения
sales_df.boxplot(column='Выручка', by='Продукт', figsize=(10, 6))
plt.title('Распределение выручки по продуктам')
plt.suptitle('') # Убираем автоматический заголовок
# plt.show()
3. Продвинутый анализ с помощью pivot_table
Сводные таблицы — мощный инструмент для многомерного анализа данных:
# Создание сводной таблицы
pivot = pd.pivot_table(
sales_df,
values='Выручка',
index=['Регион'],
columns=['Продукт'],
aggfunc='sum',
margins=True, # Добавить строку и столбец 'All'
margins_name='Итого'
)
print("Сводная таблица выручки по регионам и продуктам:")
print(pivot)
# Тепловая карта сводной таблицы
plt.figure(figsize=(12, 8))
pivot_heatmap = pivot.iloc[:-1, :-1] # Исключаем итоговые строки/столбцы
sns.heatmap(pivot_heatmap, annot=True, fmt='.0f', cmap='YlGnBu')
plt.title('Тепловая карта выручки по регионам и продуктам')
# plt.show()
# Сложная сводная таблица с несколькими уровнями и агрегациями
complex_pivot = pd.pivot_table(
sales_df,
values=['Выручка', 'Количество'],
index=['Регион'],
columns=['Продукт'],
aggfunc={
'Выручка': ['sum', 'mean'],
'Количество': ['sum', 'mean', 'count']
}
)
print("\nСложная сводная таблица:")
print(complex_pivot)
4. Интеграция с другими библиотеками визуализации
Хотя в Pandas есть базовые возможности для визуализации, зачастую для создания более сложных и интерактивных графиков используют специализированные библиотеки:
# Импортируем необходимые библиотеки
import seaborn as sns
from plotly import express as px
import matplotlib.pyplot as plt
# Настраиваем стиль Seaborn
sns.set(style="whitegrid")
# Создаем парные графики с Seaborn
sns.pairplot(sales_df[['Количество', 'Цена', 'Выручка']], height=2)
plt.suptitle('Парные графики числовых переменных', y=1.02)
# plt.show()
# Создаем violin plot для сравнения распределений
plt.figure(figsize=(12, 6))
sns.violinplot(x='Продукт', y='Выручка', data=sales_df)
plt.title('Распределение выручки по продуктам')
# plt.show()
# Создаем интерактивный график с Plotly Express
# fig = px.scatter(sales_df, x='Цена', y='Количество', color='Регион',
# size='Выручка', hover_name='Продукт',
# title='Интерактивная диаграмма рассеяния')
# fig.show()
# Создаем интерактивную тепловую карту корреляций
# corr = sales_df[['Количество', 'Цена', 'Выручка']].corr()
# fig = px.imshow(corr, text_auto=True, aspect='equal',
# title='Матрица корреляций')
# fig.show()
5. Практический анализ временных рядов
Pandas особенно силен в анализе временных рядов благодаря специализированным функциям работы с датами:
# Преобразуем данные для анализа временных рядов
sales_df['Месяц'] = sales_df['Дата'].dt.to_period('M')
monthly_sales = sales_df.groupby(['Месяц', 'Продукт'])['Выручка'].sum().unstack()
# Визуализация трендов продаж по продуктам
plt.figure(figsize=(14, 7))
monthly_sales.plot(marker='o')
plt.title('Динамика продаж по продуктам')
plt.xlabel('Месяц')
plt.ylabel('Выручка')
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(title='Продукт')
# plt.show()
# Анализ сезонности и тренда
# Создаем временной ряд для одного продукта
product_a_sales = monthly_sales['Продукт A']
# Скользящее среднее для выявления тренда
rolling_mean = product_a_sales.rolling(window=3).mean()
plt.figure(figsize=(14, 7))
plt.plot(product_a_sales.index.astype(str), product_a_sales.values, marker='o', label='Исходные данные')
plt.plot(rolling_mean.index.astype(str), rolling_mean.values, 'r', linewidth=2, label='3-месячное скользящее среднее')
plt.title('Анализ временного ряда для Продукта A')
plt.xlabel('Месяц')
plt.ylabel('Выручка')
plt.legend()
plt.grid()
# plt.show()
Читайте также
- Алгоритм K-средних: принципы работы и применение в анализе данных
- Python и Kivy: топ-7 курсов для создания десктопных приложений
- Нейросети: бесплатные курсы и эффективные практики обучения
- Иерархическая кластеризация: методы, дендрограммы и применение
- Когортный анализ: как превратить данные в стратегическое оружие
- Python синтаксис для анализа данных: от основ к продвинутым техникам
- Зарплата data scientist и аналитика данных в Москве
- Группировка и агрегация в pandas: превращение хаоса в инсайты
- Средняя зарплата data scientist
- Обучение нейронных сетей на Python: пошаговое руководство