# =========================
# ЗАДАНИЕ 6
# =========================
# 6.1 Ковариация и корреляция
print("\n=== 6.1 Ковариация и корреляция ===")
print("Ковариационная матрица:")
print(df[['sales', 'price', 'rating']].cov())
print("\nКорреляционная матрица:")
print(df[['sales', 'price', 'rating']].corr())
# 6.2 Визуализация (heatmap)
print("\n=== 6.2 Визуализация ===")
import seaborn as sns
plt.figure(figsize=(6,4))
sns.heatmap(df[['sales','price','rating']].corr(),
annot=True,
cmap='coolwarm')
plt.title("Корреляционная матрица")
plt.show()
# =========================
# ЗАДАНИЕ 7
# =========================
# 7.1 Разбиение на интервалы и квантили
print("\n=== 7.1 Дискретизация ===")
# обычные интервалы
df['price_bin'] = pd.cut(
df['price'],
bins=4,
labels=['Низкая', 'Средняя', 'Высокая', 'Очень высокая']
)
print("Распределение цен:")
print(df['price_bin'].value_counts())
# квантили
df['sales_quantile'] = pd.qcut(
df['sales'],
q=4,
labels=['Q1', 'Q2', 'Q3', 'Q4']
)
print("\nКвантили продаж:")
print(df['sales_quantile'].value_counts().sort_index())
# 7.2 Группировка по бинам
print("\n=== 7.2 Группировка ===")
print("Средние продажи по ценовым категориям:")
print(df.groupby('price_bin', observed=False)['sales'].mean())
# =========================
# ЗАДАНИЕ 8
# =========================
# Подготовка временного ряда
df_ts = df.set_index('date').sort_index()
# 8.1 Процентное изменение
print("\n=== 8.1 Процентное изменение ===")
df_ts['pct_change'] = df_ts['sales'].pct_change() * 100
print(df_ts[['sales', 'pct_change']].head(10))
# 8.2 Скользящее среднее
print("\n=== 8.2 Скользящее среднее ===")
df_ts['rolling_mean_7'] = df_ts['sales'].rolling(window=7).mean()
print(df_ts[['sales', 'rolling_mean_7']].head(10))
# Визуализация
print("\n=== График ===")
plt.figure(figsize=(10,5))
plt.plot(df_ts.index, df_ts['sales'], label='Продажи', alpha=0.6)
plt.plot(df_ts.index, df_ts['rolling_mean_7'], label='Скользящее среднее (7 дней)', linewidth=2)
plt.title("Продажи и скользящее среднее")
plt.xlabel("Дата")
plt.ylabel("Sales")
plt.legend()
plt.grid()
plt.show()
# =========================
# ЗАДАНИЕ 9
# =========================
# 9.1 Агрегация по продукту
print("\n=== 9.1 Агрегация по product ===")
result_product = df.groupby('product').agg({
'sales': ['mean', 'sum', 'count'],
'price': 'mean',
'rating': 'median'
}).round(2)
print(result_product)
# 9.2 Агрегация по category + product
print("\n=== 9.2 Агрегация по category и product ===")
agg_result = df.groupby(['category', 'product']).agg(
total_sales=('sales', 'sum'),
avg_price=('price', 'mean'),
count_rows=('sales', 'size')
).round(2)
print(agg_result.head(10))
# =========================
# ЗАДАНИЕ 10
# =========================
print("\n=== 10.1 Pivot Table ===")
pivot = pd.pivot_table(
df,
values='sales',
index='category',
columns='product',
aggfunc='sum',
fill_value=0
)
print(pivot)
# 10.2 Визуализация
print("\n=== 10.2 Визуализация pivot ===")
pivot.plot(kind='bar', figsize=(10,6))
plt.title('Суммарные продажи по категориям и продуктам')
plt.xlabel('Категория')
plt.ylabel('Сумма продаж')
plt.legend(title='Product')
plt.grid(axis='y')
plt.show()