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


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