Загрузка данных


# =========================
# ЗАДАНИЕ 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()