gfx
unknown
python
a year ago
3.2 kB
12
Indexable
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
# Данные о покупках
purchase_dates = [
"2025-02-12", # среда
"2025-02-21", # пятница
"2025-02-20", # четверг
"2025-06-18", # среда
"2025-06-23", # понедельник
"2025-07-17", # четверг
"2025-08-04" # понедельник
]
# Преобразование строковых дат в объекты datetime
dates = [datetime.strptime(date, "%Y-%m-%d") for date in purchase_dates]
# Создание DataFrame
df = pd.DataFrame(dates, columns=["Date"])
# Извлечение дня недели на русском
days_of_week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье']
df['DayOfWeek'] = df['Date'].dt.dayofweek.map(lambda x: days_of_week[x])
# Подсчет количества покупок по дням недели
purchase_counts = df['DayOfWeek'].value_counts()
most_popular_day = purchase_counts.idxmax()
most_popular_count = purchase_counts.max()
most_popular_percent = (most_popular_count / len(df)) * 100
# Вычисление дельты в днях
df['DeltaDays'] = df['Date'].diff().dt.days
# Построение графика дельты между покупками
plt.figure(figsize=(10, 6))
plt.plot(df['Date'], df['DeltaDays'], marker='o', label='Дельта в днях', color='skyblue')
plt.title('Дельта между покупками по датам')
plt.xlabel('Дата')
plt.ylabel('Дельта в днях')
plt.xticks(rotation=45)
plt.grid(axis='y')
plt.legend()
# Сохранение графика дельты в формате PNG
plt.savefig('purchase_delta.png', bbox_inches='tight')
plt.show()
# Построение графика количества покупок по дням недели
plt.figure(figsize=(10, 6))
purchase_counts.plot(kind='bar', color='skyblue')
plt.title('Количество покупок по дням недели')
plt.xlabel('День недели')
plt.ylabel('Количество покупок')
plt.xticks(rotation=45)
plt.grid(axis='y')
# Сохранение графика количества покупок в формате PNG
plt.savefig('purchase_counts.png', bbox_inches='tight')
plt.show()
# Запись данных в текстовый файл
with open('purchase_data.txt', 'w') as f:
for index, row in df.iterrows():
if pd.notna(row['DeltaDays']):
previous_date = row['Date'] - pd.Timedelta(days=row['DeltaDays'])
line = f"Дельта меж
ду {row['Date'].date()} и {previous_date.date()}: {row['DeltaDays']} дней\n"
f.write(line)
# Вывод результатов
print(f"Самый популярный день для покупок: {most_popular_day} ({most_popular_count} покупок, {most_popular_percent:.2f}%)")
Editor is loading...
Leave a Comment