368 KiB
368 KiB
Лабораторная работа 1¶
Вариант - 9
Датасет - магазины
Поля
- ID магазина
- площадь магазина
- количество разных товаров
- количество покупателей
- объем продаж
Загрузка и сохранение данных
In [121]:
import pandas as pd
df = pd.read_csv("data/Stores.csv")
df.to_csv("data/Stores_updated.csv", index=False)
Получение сведений о датафрейме с данными
- Общая информация о датафрейме
In [122]:
df.info()
- Статистическая информация
In [123]:
df.describe()
Out[123]:
Получение сведений о колонках датафрейма
- Названия колонок
In [124]:
df.columns
Out[124]:
Вывод отдельных строк и столбцов
- Столбец "Store_Area"
In [125]:
df[["Store_Area"]]
Out[125]:
- Несколько столбцокв
In [126]:
df[["Store ID ", "Store_Sales"]]
Out[126]:
- Первая строка
In [127]:
df.iloc[[0]]
Out[127]:
- Вывод по условию
In [128]:
df[df["Store_Sales"] > 2000]
Out[128]:
Группировка и агрегация данных
- Средняя продажа по каждому магазину
In [129]:
df.groupby(["Store ID "])[["Store_Sales"]].mean()
Out[129]:
- Для каждого магазина общая сумма продаж и среднее количество посетителей
In [130]:
df.groupby("Store ID ").agg({"Store_Sales": "sum", "Daily_Customer_Count": "mean"})
Out[130]:
Сортировка данных
- Сортировка по продажам по убыванию
In [131]:
df.sort_values("Store_Sales", ascending=False)
Out[131]:
- Сортировка по нескольким столбцам
In [132]:
df.sort_values(["Store_Area", "Store_Sales"], ascending=[True, False])
Out[132]:
Удаление строк/столбцов
- Удаление столбца
In [133]:
df.drop("Store_Area", axis=1)
Out[133]:
Удаление строки
In [134]:
df.drop(0, axis=0)
Out[134]:
Создание новых столбцов
- Создание нового столбца с доходом на одного клиента
In [135]:
df["Revenue_per_Customer"] = df["Store_Sales"] / df["Daily_Customer_Count"]
df[["Revenue_per_Customer"]]
Out[135]:
Удаление строк с пустыми значениями
- Удаление строк с NaN
In [136]:
df.dropna()
Out[136]:
- Заполнить пустые значения для определённого столбца
In [137]:
df.fillna({"Store_Sales": df["Store_Sales"].mean()}, inplace=True)
Заполнение пустых значений
- Заполнение средним значением
In [138]:
df.fillna(df.mean(), inplace=True)
Визуализация данных с Pandas и Matplotlib
- Линейная диаграмма (plot). Продажи по магазинам
In [139]:
import matplotlib.pyplot as plt
df.plot(x="Store ID ", y="Store_Sales", kind="line")
plt.xlabel("Store ID")
plt.ylabel("Store Sales")
plt.title("Store Sales by Store ID")
plt.show()
- Столбчатая диаграмма (bar). Средние продажи
In [140]:
df.plot(x="Store ID ", y="Store_Sales", kind="bar")
plt.xlabel("Store ID")
plt.ylabel("Store Sales")
plt.title("Store Sales by Store ID")
plt.show()
- Гистограмма (hist). Распределение количества товаров
In [141]:
df["Items_Available"].plot(kind="hist")
plt.xlabel("Number of Items Available")
plt.ylabel("Frequency")
plt.title("Distribution of Items Available in Stores")
plt.show()
- Ящик с усами (box). Продажи
In [142]:
df["Store_Sales"].plot(kind="box")
plt.ylabel("Store Sales (US $)")
plt.title("Box Plot of Store Sales")
plt.show()
- Диаграмма с областями (area).
In [143]:
df.plot(x="Store ID ", y="Store_Sales", kind="area")
plt.xlabel("Store ID")
plt.ylabel("Store Sales")
plt.title("Store Sales by Store ID")
plt.show()
- Диаграмма рассеяния (scatter). Зависимость продаж от количества посетителей
In [144]:
df.plot(kind="scatter", x="Daily_Customer_Count", y="Store_Sales")
plt.xlabel("Daily Customer Count")
plt.ylabel("Store Sales (US $)")
plt.title("Store Sales vs. Daily Customer Count")
plt.show()
- Круговая диаграмма (pie). Количество товаров
In [145]:
# Определение порога для объединения редких значений
threshold = 0.02 # Порог 2%
# Подсчёт количества уникальных значений и расчёт частот
value_counts = df["Daily_Customer_Count"].value_counts()
total_count = value_counts.sum()
# Условие для агрегации значений ниже порога
other_values = value_counts[value_counts / total_count < threshold].sum()
main_values = value_counts[value_counts / total_count >= threshold]
# Добавление категории "Other"
main_values["Other"] = other_values
# Построение диаграммы
main_values.plot(kind="pie",
autopct='%1.1f%%', # Проценты
startangle=90, # Начальный угол
counterclock=False, # По часовой стрелке
cmap="Set3", # Цветовая схема
wedgeprops={'edgecolor': 'black'}) # Границы сегментов
plt.title("Distribution of Daily Customer Count in Stores (Aggregated)")
plt.subplots_adjust(left=0.3, right=0.7, top=0.9, bottom=0.1)
plt.show()