Или как прогнозировать деньги, не вызывая шамана
🧠 Введение
Финансовая модель — это как карта сокровищ для бизнеса. Только вместо «X» у нас — будущая прибыль, расходы, инвестиции и немного Excel-магии.
И если раньше всё это делали с помощью утомительных формул и макросов, то сегодня... мы используем Python! Быстро, гибко и не скучно.
В этой статье:
- Покажем, как Python + Excel = 🔥
- Разберём 5 практических задач по созданию финансовой модели
- Каждая строчка кода будет с комментарием
- Будет весело, даже если ты бухгалтер 😉
📦 Что установим?
pip install pandas openpyxl matplotlib seaborn
📁 Структура данных
Представим, у нас есть Excel-файл financial_data.xlsx с тремя листами:
- income — доходы
- expenses — расходы
- investments — инвестиции
✅ Пример 1: Загрузка данных и проверка баланса
import pandas as pd
# Загружаем данные с трёх листов Excel-файла
income = pd.read_excel('financial_data.xlsx', sheet_name='income')
expenses = pd.read_excel('financial_data.xlsx', sheet_name='expenses')
investments = pd.read_excel('financial_data.xlsx', sheet_name='investments')
# Считаем суммарные значения
total_income = income['Сумма'].sum()
total_expenses = expenses['Сумма'].sum()
total_investments = investments['Сумма'].sum()
print(f"💰 Доходы: {total_income}")
print(f"💸 Расходы: {total_expenses}")
print(f"📈 Инвестиции: {total_investments}")
# Проверим баланс
net_profit = total_income - total_expenses - total_investments
print(f"\n📊 Чистая прибыль: {net_profit}")
🔍 Что происходит:
- Загружаем таблицы по листам
- Суммируем все значения
- Вычитаем расходы и инвестиции — получаем реальный результат месяца
📈 Пример 2: Визуализируем динамику доходов и расходов по месяцам
import matplotlib.pyplot as plt
# Группируем доходы и расходы по месяцам
monthly_income = income.groupby('Месяц')['Сумма'].sum()
monthly_expenses = expenses.groupby('Месяц')['Сумма'].sum()
# Строим график
plt.figure(figsize=(10, 6))
plt.plot(monthly_income.index, monthly_income.values, label='Доходы', marker='o')
plt.plot(monthly_expenses.index, monthly_expenses.values, label='Расходы', marker='x')
plt.title("📊 Доходы и расходы по месяцам")
plt.xlabel("Месяц")
plt.ylabel("Сумма")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("income_vs_expenses.png")
print("✅ График сохранён как income_vs_expenses.png")
📌 Бонус: можно вставить график прямо в Excel (через openpyxl или xlwings).
🔮 Пример 3: Прогнозирование доходов и расходов на 6 месяцев вперёд
# Предположим, что у нас есть дата и сумма
from datetime import timedelta
# Преобразуем дату
income['Дата'] = pd.to_datetime(income['Дата'])
expenses['Дата'] = pd.to_datetime(expenses['Дата'])
# Группируем по месяцу
monthly = pd.DataFrame({
'Доходы': income.groupby(income['Дата'].dt.to_period('M'))['Сумма'].sum(),
'Расходы': expenses.groupby(expenses['Дата'].dt.to_period('M'))['Сумма'].sum()
})
# Скользящее среднее за 3 месяца
forecast = monthly.rolling(3).mean().dropna().tail(1)
# Прогнозируем на следующие 6 месяцев
for i in range(1, 7):
forecast.index = [forecast.index[-1] + 1]
monthly = pd.concat([monthly, forecast])
print("📅 Прогноз на 6 месяцев вперёд:\n", monthly.tail(6))
📌 Для новичков: да, это упрощённый способ, но он уже помогает оценить тренды.
👨💻 Для профи: хочешь Prophet, ARIMA, LightGBM — тоже покажу!
🏦 Пример 4: Анализ рентабельности инвестиций (ROI)
# Предположим, у нас есть дата инвестиций и возвраты
# Подсчитаем ROI = (Доход от инвестиций - сумма инвестиций) / сумма инвестиций
# Группируем возвраты по проектам
returns = investments.groupby('Проект')['Возврат'].sum()
costs = investments.groupby('Проект')['Сумма'].sum()
roi = ((returns - costs) / costs) * 100
roi = roi.round(2)
print("📈 ROI по проектам:\n", roi)
📌 Теперь ты знаешь, какой проект — 💸, а какой — 🚀
📤 Пример 5: Генерация Excel-отчёта с итогами и форматированием
from openpyxl import Workbook
from openpyxl.styles import Font
# Создаём новый файл
wb = Workbook()
ws = wb.active
ws.title = "Финансовый отчёт"
# Записываем данные
ws.append(["Метрика", "Сумма"])
ws.append(["Доходы", total_income])
ws.append(["Расходы", total_expenses])
ws.append(["Инвестиции", total_investments])
ws.append(["Чистая прибыль", net_profit])
# Жирный шрифт для заголовка
for cell in ws[1]:
cell.font = Font(bold=True)
# Сохраняем файл
wb.save("financial_report.xlsx")
print("📁 Финансовый отчёт сохранён как financial_report.xlsx")
🧩 Бонус: Структура модели для дашборда или API
Ты можешь превратить эту модель в:
- 📊 Streamlit-дэшборд
- 📡 Flask API с прогнозом
- 💼 Телеграм-бота, который шлёт отчёты по команде
- ⏰ Автоматический отчёт каждый месяц через cron или schedule
📋 Что мы умеем?
🧠 Вывод
Финансовая модель — это не только для MBA и CFO. С помощью Python и Excel ты можешь:
- Анализировать бизнес-метрики
- Быстро строить отчёты
- Делать прогнозы и находить слабые места
- Сохранять кучу времени на рутине
🚀 Что дальше?
- Хочешь добавить налоговую модель?
- Или учесть сезонность?
- Или превратить это в веб-приложение для команды?
Пиши — сделаю следующую часть 😉