Комментарии 21
Финансисты и экономисты это не гуманитарии. Микроэкономика это вообще точная наука.
Питон, конечно, мощный инструмент. Но у него есть важный недостаток. Вы не можете отправить файл с кодом клиенту/коллеге/начальнику со словами "посмотри, что получилось". И с печатью все не так просто. Даже предложенных майкрософт компромисс в виде вызова питона прямо в экселе не решает все эти вопросы. Печать - ок. Но вот чтобы "поиграться со значениями" надо иметь лицензию и соответствующую версию самого экселя.
В общем, все очень ситуативно.
Python встроен в свободный офисный пакет LibreOffice, а в нем есть Calc (аналог Excel). который поддрживает UDF (в т.ч. функции ячеек листа) и макросы на языках VBA, StarBasic, Python, С++, Java и JavaScript etc. И макросы эти могут быть внутри самого файла, который можно отправить клиенту/коллеге/начальнику, а могут альтернативно лежать на шаре в LAN или вообще работать как API-сервис, чтобы не палить "понижающие коэффициенты". В Calc заработают все функции и формулы ячеек из статьи. И поиграть со значениями получится, и использовать мощь Python/
Устанавливать LibreOffice не надо, достаточно даже с ограниченной учеткой просто распаковать portable- версию с офсайта (архив 170 MB), в которую до запаковки установить пакеты pip numpy-financial odfpy openpyxl и pandas.
К сожалению, варианты с "скачать" и "установить" - это не про корпоративную среду. Да и я не представляю себе ситуацию, где прокатило бы
"уважаемый клиент, я вам отправил отчёт. Но чтобы его посмотреть, вам придётся скачать и установить пакет по этой ссылке"
"ах, так у вас macos? Ну тогда ссылка другая.."
"о, у вас не административные права, так как лэптоп рабочий... Ну тогда вам придётся как то договариваться со своими айтишниками"
" подождите, как это вы прекращаете наше сотрудничество? "
на vba можно писать полноценные проекты, без использования "ручных формул". при необходимости, можно их задавать, прямо из vba. то есть, нет необходимости шерстить руками таблицы.
однако, в зависимости от версии, порог вхождения, в определенных моментах, может превышать питоновский.
Уважаемый автор, а вы умеете работать с VBA? Он, конечно не для любой задачи во Вселенной, как Питон (хотя есть DOOM написанный на VBA), но, вообще говоря, для всего MS Office, а не только для Excel. И да VBA не есть EXCEL, это не "формулы в ячейках", это макросы, выражаясь по простому. Это то, что появляется на экране по Alt-F11.
Для того чтобы сравнивать насколько хорош, в вашем случае, Питон в Excel, надо вашу формулу написать в VBA и сравнить быстродействие. И что-то мне подсказывает, что вас ждёт сюрприз. Хотя бы потому, что " 900 столбцов " не понадобятся. Всего одно слово - "массивы". Но надо уметь.
А ещё мне что-то подсказывает, что если вашу абраккадабру формулу разделить на 10, к примеру, формул, которые можно понять с одного взгляда, то быстродействие тоже не останется равнодушным к этому подвигу.
Вы пишите "Любому, кто не участвовал в создании модели, придётся потратить время, чтобы понять, что к чему." А почему люди должны тратить своё время на понимание ваших "формул"? Может просто научится писать кратко и понятно? Это сложно, я понимаю. И надо тратить своё время, которого жалко. Это на чужое время - насрать. Валить всё в кучу - проще. Вот только отлаживать такую кучу...
В тех кругах, где я общаюсь, за такие формулы, бьют по лицу высказывают сомнения в профпригодности и компетентности. Что поделать - круги такие.
Вы пишите "Любому, кто не участвовал в создании модели, придётся потратить время, чтобы понять, что к чему." А почему люди должны тратить своё время на понимание ваших "формул"? Может просто научится писать кратко и понятно?
Полностью согласен. Программирование это социальная дисциплина. Только надо, как сказал когда-то Дейкстра, "сосредоточиться не на том, чтобы объяснять компьютеру, что мы от него хотим, а на том, чтобы людям объяснить, что мы хотим от компьютера".
Да, с VBA я знакома и понимаю, что это полноценный инструмент, не ограниченный формулами в ячейках. Конечно, можно решить ту же задачу через макросы, используя массивы и грамотную структуру кода — и, скорее всего, это даст прирост производительности. Но моя цель в статье была не в том, чтобы противопоставить Python и VBA, а скорее показать направление тем, кто только начинает.
Если человек пока не знает ни того, ни другого, и планирует расти не только в рамках Excel, а, скажем, в сторону автоматизации, анализа данных, работы с API и так далее — Python даёт шире возможности. Именно в этом контексте я упомянула его как более универсальный выбор для старта.
Что касается расчётов — вы правы, что их можно и нужно упрощать. Пример в статье специально сделан утрированным: в реальных моделях я, конечно, тоже за краткость, читаемость и поддерживаемость. Но в учебных целях, на мой взгляд, полезно иногда показать сам принцип построения шагов, даже если они избыточны.
Спасибо, что обратили внимание на важность этих моментов. Полностью согласна: лаконичность и прозрачная логика — это уважение к коллегам и к будущему себе. Постараюсь в следующих материалах делать оговорки, чтобы такие моменты не воспринимались как небрежность или отсутствие профессионализма.
Рада, что статья вызвала отклик — это помогает расти и писать лучше. Ещё раз спасибо за обратную связь!)
Как человек, писавший на VBA, спрошу: а зачем? Питон однозначно лучше. ВБА уже больше мертв, чем жив. Да и вендор лок.
Зачем? Первое, что в голову пришло - для использования связки Excel+VBA нужен только Excel. И это - один файл. Удобный для пересылки, к примеру. Который можно использовать там, где есть только Excel. Безотносительно к другому программному обеспечению.
Excel входит в списки программного обеспечения, допущенного к работе с документами с грифом "секретно\конфиденциально". А Питон? И ВСЕ его библиотеки? Это второе, что в голову пришло.
Я не спорю, что Питон во многом лучше. Но "лучше" далеко не всегда синоним "удобнее". Человеческие ноги по проходимости лучше колеса. Значит ли это, что когда есть выбор, то передвигаться в экспедиции лучше пешком, чем автотранспортом ? А болид "Формула -1" гораздо лучше "Ролс-Ройса" по динамике, управляемости, безопасности и престижности (стать владельцем "Ролс-Ройса" гораздо проще и дешевле). Вот только он ни разу не удобнее "Ролс-Ройса".
Excel входит в списки программного обеспечения, допущенного к работе с документами с грифом "секретно\конфеденциально". А Питон? И ВСЕ его библиотеки?
В больших компаниях следят за информационной безопасностью и "дырками" в библиотеках. Но с чем возникнут проблемы - если кто захочет воспроизвести весь расчет: придется устанавливать python и все его библиотеки... или упаковывать решение в продукт.
В больших компаниях следят за информационной безопасностью
100% следят! И именно в больших! И особенно в гос! И совсем строго в оборонных!!!! Тут недавно у сказочных долбоёбов гномиков как-то утекли к эльфам чертежи их подземных городов и шахт. Тех самых шахт, где можно встретить сатану. И говорят, что чертежей с сопроводиловкой там несколько миллионов листов.
А я придумал, как сократить вашу экселевскую формулу как минимум на два символа! Вот эти два символа - ^1 - можно смело убрать и результат не изменится ;)
В целом я согласен с автором, что если питон (или любой другой инструмент) позволяет сэкономить время и нервы, то обязательно нужно этим пользоваться. Особенно, в российском бизнесе, где крайне велика вероятность того, что большой начальник (он же ЛПР, т. е. лицо, принимающее решения) посмотрит на принесённые ему цифры, отложит бумагу в сторону и скажет примерно следующее "уважаемые коллеги, это всё конечно хорошо, но учитывая обстоятельства, мы будем действовать по-другому" (нецензурные междометия из речи ЛПР я предусмотрительно вырезал).
Я работаю на одного из ведущих поставщиков информационных услуг для финансовых рынков, наша компания обслуживает все крупнейшие банки, финансовые институты и корпорации в мире. На примере клиентской выборки в пределах 100 тыс чел. скажу, что excel пока что остается предпочтительным, несмотря на неудобства с формулами, как в вашем примере.
Среди наших продуктов есть как своя (адаптированная) версия jupyterhub с предустановленными финснвовыми библиотеками и обертками к API для работы с рыночными данными и функционалом для финансового инжениринга, так и собственные надстройки для excel. Число клиентов, переходящих с excel на питон для решения повседневных задач растёт, но очень медленно. Основная масса трейдеров и аналитиков всё равно предпочитает традиционный excel. Я конечно, не говорю про квантов или рисковиков - для них у нас есть целое направление решений.
А вы пробовали использовать xlwings?
Спасибо за комментарий — очень интересно было прочитать про ваш опыт и инфраструктуру. Да, Excel пока точно живее всех живых, особенно в повседневной работе. И несмотря на возможные неудобства с формулами, многим он просто привычнее и быстрее.
Про xlwings, раньше не использовала, но сейчас прочитала подробнее - буду погружаться. Я осваиваю Python в процессе работы, и хотя уже активно применяю его для автоматизации и аналитики, некоторые подходы пока ещё интуитивные. Постепенно развиваю навыки, изучаю best practices и ищу новые пути. Спасибо, что поделились — возьму на заметку и обязательно протестирую!
Раз прозвучал XlWIngs, то упомяну и PyXLL как альтернативу python-кода в Excel. И, конечно же, встроенный Python/Numpy/Pandas в LibreOffice Calc - как альтернативу альтернатив (замена Excel с его VBA и макрорекордером на нечто совместимое, с сохранением 80% работоспособного VBA-кода).
Блокноты Jupyter в браузере и среде JupyterLab являются "клеем" и центром притяжения вообще всего упомянутого, они свободны и бесплатны, и тоже имеют альтернативы простого развертывания, см. JupyterLite и Docker-образы JupyterLab/Hub, в одну строку - готовая среда для аналитиков (образы должны собрать коллеги для коллег, конечно же). Тут вам будет и правка блокнотов в несколько курсоров одновременно, и самодокументирование, и доктесты (не дадут просочиться ошибкам вроде PI<0 при IRR>0) и ML/BigData, и самые-самые полезные фишки CI/CD в финансовых расчетах и BI. Стек с блокнотами абсолютно безграничны и свободны во всех смыслах и направлениях.
Смотрите, у Вас получается PI меньше единицы, а проект получается не выгоден экономически, но NPV положителен, значит есть ошибка. Вы делите чистую приведенную стоимость на затраты, а надо было просуммировать дисконированный денежный поток и разделить на затраты. для указанного проекта PI получился около 1,57. Вы можете поступить по-другому: от чистой приведенной стоимости (NPV) отнимите затраты (не ошибитесь со знаком!), потом разделите на затраты, получите то же
Учитывая развитие современных технологий добавлю: подобные короткие скрипты и вывод графиков в python можно нагенерировать в ChatGPT (чем иногда и занимаюсь, но не в финансах). Причем иногда это быстрее чем прочитать в том же ChatGPT про решение той или иной задачи в excel. Поэтому порог входа в python становится ниже, и с использованием LLM типовые задачи решаются быстрее чем может показать.
Но для демонстрации excel и вправду удобнее с учетом его распространения.
P.S. Спасибо автору за интересный практичный кейс программирования для непрограммистов!
Финансовое моделирование в Python и Excel: мой путь перехода на код