• Мастерство стандартной библиотеки 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 конструктора бесконечных итераторов:

    from itertools import count, cycle, repeat

    Читать дальше →

  • Мастерство стандартной библиотеки python: itertools.chain

    Представьте, что вам нужно пробежать за один проход по N коллекциям, например по двум вот таким.

    In [2]: l1 = list(range(5))
    
    In [3]: l2 = list(range(10))
    
    In [4]: l1
    Out[4]: [0, 1, 2, 3, 4]
    
    In [5]: l2
    Out[5]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    Естественно, возникает желание написать вот такой цикл:

    Читать дальше →

  • Прикольный трюк: сжатие csv файлов 'на лету' в pandas

    Pandas - великолепный инструмент для работы с данными в python, а csv - де-факто стандартный формат хранения данных в Data Science (да и много где еще).

    Однако, csv файлы могут занимать ооочень много места. Если Вы сохраняете какие-то промежуточные данные или регулярно делаете выгрузки из СУБД, то и количество этих файлов может быстро расти.

    Если Вам приходится часто двигать файлы через сеть между различными окружениями - сервера/рабочая станция/Google Colab/Kaggle, то этот процесс может превратиться в настоящую головную боль. Большие файлы долго передаются по сети, дисковое пространство в сервисах быстро заканчивается и они начинают требовать от Вас апгрейдить аккаунт и расширять лимиты.

    Но есть решение, причем удивительно простое и удобное.

    Читать дальше →

  • Тепловые карты по децилям в plotly.express

    Построить тепловую карту (как и почти любую визуализацию данных) в великолепной plotly.express невероятно просто:

    px.density_heatmap(df, x='x', y='y', z='z', marginal_y='histogram').show()

    Тепловая карта по децилям в plotly.express с помощью px.density_heatmap

    Но иногда хочется разбить данные на децили/квартили/квинтили. Как например, в нашем случае - по оси Y.

    К сожалению, “из коробки” plotly.express не справится.

    Читать дальше →