# =========================
# ЗАДАНИЕ 4
# =========================
# 4.1 Преобразование в категориальный тип
print("\n=== 4.1 Категориальный тип ===")
print("До:", df['category'].dtype, df['category'].memory_usage(deep=True))
df['category'] = df['category'].astype('category')
print("После:", df['category'].dtype, df['category'].memory_usage(deep=True))
ratings = pd.Categorical(df['rating'].round(),
categories=[1,2,3,4,5],
ordered=True)
df['rating_cat'] = ratings
print(df[['rating','rating_cat']].head())
# 4.2 Работа с категориями
print("\n=== 4.2 Операции с категориями ===")
# переименование
df['category'] = df['category'].cat.rename_categories({
'Electronics': 'Электроника',
'Clothing': 'Одежда',
'Food': 'Еда',
'Books': 'Книги'
})
print("После переименования:", df['category'].cat.categories)
# добавление
df['category'] = df['category'].cat.add_categories(['Игрушки'])
print("После добавления:", df['category'].cat.categories)
# удаление
df['category'] = df['category'].cat.remove_categories(['Игрушки'])
print("После удаления:", df['category'].cat.categories)
# 4.3 Частоты и группировка
print("\n=== 4.3 Частоты и группировка ===")
print("Частоты категорий:")
print(df['category'].value_counts(dropna=False))
print("\nСредние продажи по категориям:")
print(df.groupby('category', observed=False)['sales'].mean())
# =========================
# ЗАДАНИЕ 5
# =========================
# 5.1 Описательные статистики
print("\n=== 5.1 Статистика ===")
print(df[['sales', 'price', 'rating']].describe())
print("Среднее sales:", df['sales'].mean())
print("Медиана sales:", df['sales'].median())
print("Стандартное отклонение:", df['sales'].std())
print("Дисперсия:", df['sales'].var())
# 5.2 Уникальные значения и частоты
print("\n=== 5.2 Уникальные значения ===")
print("Уникальные продукты:", df['product'].unique())
print("Количество уникальных:", df['product'].nunique())
print("\nЧастоты продуктов:")
print(df['product'].value_counts())
print("\nЧастоты рейтингов:")
print(df['rating'].round().value_counts().sort_index())
# 5.3 Накопление и ранги
print("\n=== 5.3 Накопление и ранги ===")
df_sorted = df.sort_values('date')
df_sorted['cum_sales'] = df_sorted['sales'].cumsum()
print(df_sorted[['date','sales','cum_sales']].head(10))
df['sales_rank'] = df['sales'].rank(method='average')
print(df[['sales','sales_rank']].head(10))