gfx

 avatar
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