/
Boris388
/
git_test1
Обзор
Документация
Войти
/
Boris388
/
git_test1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
analysis.py
66 строк
2 KB
Boris
added models, analysis and storage
08 янв 2026, 13:15
08 янв 2026, 13:15
3d0fe67
Код
Авторство
О чём код?
import matplotlib.pyplot as plt import pandas as pd import seaborn as sns def get_balance(transactions: list) -> dict: df = pd.DataFrame([{ "amount": tx.amount, "is_income": tx.is_income, "category": tx.category.name, "date": tx.date } for tx in transactions]) incomes = df[df["is_income"]].amount.sum() expenses = df[~df["is_income"]].amount.sum() balance = incomes - expenses return { "income": round(incomes, 2), "expense": round(expenses, 2), "balance": round(balance, 2) } def expenses_by_category(transactions: list) -> pd.DataFrame: df = pd.DataFrame([{ "amount": tx.amount, "category": tx.category.name } for tx in transactions if not tx.is_income]) return df.groupby("category").sum().reset_index() def plot_income_expense_timeline(transactions: list): df = pd.DataFrame([{ "amount": tx.amount if tx.is_income else -tx.amount, "date": tx.date } for tx in transactions]) df["date"] = pd.to_datetime(df["date"], format="%d-%m-%Y") df = df.resample("ME", on="date").sum().reset_index() plt.figure(figsize=(10, 5)) plt.plot(df["date"], df["amount"], marker="o") plt.title("Доходы и расходы по месяцам") plt.xlabel("Месяц") plt.ylabel("Сумма") plt.grid(True) plt.show() def plot_expense_pie(transactions: list): expenses = expenses_by_category(transactions) if expenses.empty: print("Нет расходов для отображения") return plt.figure(figsize=(8, 8)) plt.pie(expenses["amount"], labels=expenses["category"], autopct='%1.1f%%') plt.title("Расходы по категориям") plt.show() def plot_top_expenses(transactions: list, n=5): expenses = expenses_by_category(transactions) top = expenses.nlargest(n, "amount") plt.figure(figsize=(10, 6)) sns.barplot(data=top, x="amount", y="category") plt.title(f"Топ-{n} самых крупных расходов") plt.xlabel("Сумма") plt.ylabel("Категория") plt.show()