Pandas — мини-проект анализа продаж
Сквозной пайплайн загрузка → агрегация → визуализация → экспорт на синтетических данных о продажах. Теория: Pandas в Python, Matplotlib. Соседние примеры: 1113 — типовые операции, 1112 — графики.
Зависимости: pip install pandas matplotlib openpyxl
1. Данные и CSV
import numpy as np
import pandas as pd
np.random.seed(42)
n = 100
df = pd.DataFrame({
"date": pd.date_range("2024-01-01", periods=n, freq="D"),
"product": np.random.choice(["A", "B", "C"], n),
"sales": np.random.randint(50, 500, n),
"profit": np.random.randint(10, 150, n),
})
df.to_csv("sales.csv", sep=";", index=False)
2. Загрузка и сводная таблица
df = pd.read_csv("sales.csv", sep=";", parse_dates=["date"])
df["month"] = df["date"].dt.to_period("M")
summary = df.pivot_table(
values="sales",
index="month",
columns="product",
aggfunc="sum",
fill_value=0,
)
print(summary)
parse_dates сразу даёт тип datetime; pivot_table — аналог Excel-сводной: строки — месяцы, столбцы — товары.
3. Два графика на одном холсте
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
for col in summary.columns:
axes[0].plot(
summary.index.astype(str), summary[col], marker="o", label=col
)
axes[0].set_title("Продажи по месяцам")
axes[0].set_xlabel("Месяц")
axes[0].set_ylabel("Сумма продаж")
axes[0].legend()
axes[0].grid(alpha=0.3)
axes[0].tick_params(axis="x", rotation=45)
axes[1].hist(df["profit"], bins=15, edgecolor="black", alpha=0.7, color="orange")
axes[1].set_title("Распределение прибыли")
axes[1].set_xlabel("Прибыль")
axes[1].set_ylabel("Частота")
axes[1].grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.savefig("report.png", dpi=150, bbox_inches="tight")
plt.show()
4. Экспорт отчёта
summary.to_excel("monthly_sales.xlsx")
print("Сохранено: report.png, monthly_sales.xlsx")
5. Дополнительная метрика (самопроверка)
df["profit_per_sale"] = df["profit"] / df["sales"]
avg_by_product = df.groupby("product")["profit_per_sale"].mean()
print(avg_by_product)
fig, ax = plt.subplots(figsize=(6, 4))
avg_by_product.plot(kind="bar", ax=ax, color=["#4caf50", "#2196f3", "#ff9800"])
ax.set_title("Средняя прибыль на одну продажу")
ax.set_ylabel("Прибыль / продажа")
ax.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.savefig("report_profit_per_sale.png", dpi=150, bbox_inches="tight")
plt.show()
Связь с маршрутом ML
Тот же стек Pandas + Matplotlib + NumPy — подготовка данных перед перцептроном и Keras: нормализация признаков, проверка распределений, экспорт отчётов для команды.