-
Мастерство стандартной библиотеки python: functools.cached_property
В python есть великолепный модуль
functools
, в котором находится, пожалуй, моя самая любимая штука во всем python - декораторыlru_cache
иcached_property
.lru_cache
позволяет кешировать (иногда еще говорят мемоизировать) результаты работы декорируемых функций - это чертовски ускоряет повторное (или рекурсивное) исполение CPU bound функций, как впрочем и для IO bound функций он бывает полезен.cached_property
позволяет кешировать исполнение метода класса, но только если у него дополнительных аргументов, кроме self.
Вместе они позволяют покрыть большинство хотелок по кешированию чего-либо прямо в memory питоньего процесса.
Однако, есть у них как неочивидные фишки, так и некоторые тонкости, о которых сейчас и поговорим.
-
Мастерство стандартной библиотеки python: бесконечные итераторы itertools
Продолжаем наше исследование модуля
itertools
.На очереди 3 конструктора бесконечных итераторов:
-
Мастерство стандартной библиотеки python: itertools.chain
Представьте, что вам нужно пробежать за один проход по N коллекциям, например по двум вот таким.
Естественно, возникает желание написать вот такой цикл:
-
Прикольный трюк: сжатие csv файлов 'на лету' в pandas
Pandas - великолепный инструмент для работы с данными в python, а csv - де-факто стандартный формат хранения данных в Data Science (да и много где еще).
Однако, csv файлы могут занимать ооочень много места. Если Вы сохраняете какие-то промежуточные данные или регулярно делаете выгрузки из СУБД, то и количество этих файлов может быстро расти.
Если Вам приходится часто двигать файлы через сеть между различными окружениями - сервера/рабочая станция/Google Colab/Kaggle, то этот процесс может превратиться в настоящую головную боль. Большие файлы долго передаются по сети, дисковое пространство в сервисах быстро заканчивается и они начинают требовать от Вас апгрейдить аккаунт и расширять лимиты.
Но есть решение, причем удивительно простое и удобное.
-
Тепловые карты по децилям в plotly.express
Построить тепловую карту (как и почти любую визуализацию данных) в великолепной
plotly.express
невероятно просто:Но иногда хочется разбить данные на децили/квартили/квинтили. Как например, в нашем случае - по оси Y.
К сожалению, “из коробки”
plotly.express
не справится.