en
Feedback
Python/ django

Python/ django

Open in Telegram

📈 Analytical overview of Telegram channel Python/ django

Channel Python/ django (@pythonl) in the Russian language segment is an active participant. Currently, the community unites 58 972 subscribers, ranking 2 162 in the Technologies & Applications category and 10 185 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 58 972 subscribers.

According to the latest data from 29 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -292 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 6.27%. Within the first 24 hours after publication, content typically collects 3.33% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 3 696 views. Within the first day, a publication typically gains 1 963 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 20.
  • Thematic interests: Content is focused on key topics such as github, claude, контекст, архитектура, api.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
по всем вопросам @workakkk @itchannels_telegram - 🔥 все ит каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - 📚 @pythonlbooks РКН: clck.ru/3Fm...

Thanks to the high frequency of updates (latest data received on 30 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

58 972
Subscribers
-124 hours
+137 days
-29230 days
Posts Archive
📌 Tracecat — open-source платформа для автоматизации безопасности. Этот проект предлагает YAML-шаблоны для создания workflow
📌 Tracecat — open-source платформа для автоматизации безопасности. Этот проект предлагает YAML-шаблоны для создания workflow с визуальным редактором, упрощая автоматизацию рутинных задач. Инструмент позволяет интегрировать Temporal для надёжного выполнения сценариев и поддержка MITRE D3FEND. Локальный запуск возможен через Docker Compose, а для продакшена есть Terraform-конфиги для AWS Fargate. 🤖 GitHub @pythonl

Repost from Machinelearning
🌟 TARIFF — инструмент, который вы реально ждали, Python-пакет, который делает импорты «Великими» снова. Инструмент позволяет
🌟 TARIFF — инструмент, который вы реально ждали, Python-пакет, который делает импорты «Великими» снова. Инструмент позволяет вводить "пошлины" на Python-библиотеки, замедляя загрузку определённых пакетов, чтобы подчеркнуть идею "экономического протекционизма" в коде.​ ✔️ Основные особенности Имитация тарифов на импорты: пользователь может установить "тарифы" (в процентах) на определённые пакеты, например:​

  import tariff

  tariff.set({
      "numpy": 50,     # 50% тариф на numpy
      "pandas": 200,   # 200% тариф на pandas
      "requests": 150  # 150% тариф на requests
  })
Замедление импорта: при импорте указанных пакетов время загрузки увеличивается пропорционально установленному тарифу.​ Вывод сообщений: при каждом "обложенном тарифом" импорте выводится сообщение в стиле политической риторики, например:​ JUST IMPOSED a 50% TARIFF on numpy! Original import took 45000 us, now takes 67500 us. American packages are WINNING AGAIN! #MIPA Библиотека использует monkey-patching для перехвата и модификации процесса импорта.​ ▪Github @ai_machinelearning_big_data #fun #python

🖥 Важная особенность генераторов в Python! Давай разберемся, как это работает: Что такое Генератор? Функция my_generator_fun
🖥 Важная особенность генераторов в Python! Давай разберемся, как это работает: Что такое Генератор? Функция my_generator_function является генератором, потому что она использует ключевое слово yield. В отличие от обычной функции, которая выполняет весь код и возвращает одно значение через return, генератор "приостанавливается" на каждом yield, возвращая указанное значение. При следующем вызове он возобновляет работу с того места, где остановился. Как работает yield: Когда вы вызываете gen = my_generator_function(), код внутри функции не выполняется. Создается специальный объект-генератор (gen). Первый вызов next(gen) заставляет функцию выполниться до первого yield 1. Функция возвращает 1 и приостанавливается. Второй вызов next(gen) возобновляет выполнение с точки после yield 1 и доходит до yield 2. Функция возвращает 2 и снова приостанавливается. Именно поэтому print(next(gen), next(gen)) выводит 1 2. Как работает return в генераторе: Когда поток выполнения внутри генератора доходит до оператора return (в нашем случае return 73) или просто до конца функции без явного return, генератор считается завершенным. Важно: Значение, указанное в return (здесь 73), не возвращается как обычное значение через yield. Вместо этого генератор выбрасывает (raises) специальное исключение: StopIteration. Этот механизм StopIteration - стандартный способ в Python сигнализировать, что итератор (а генератор - это тип итератора) исчерпан. Перехват StopIteration и получение значения: В правой части кода мы пытаемся вызвать next(gen) еще раз. Генератор возобновляется после yield 2, доходит до return 73 и выбрасывает StopIteration. Конструкция try...except StopIteration as err: перехватывает это исключение. Ключевой момент (показан стрелкой на картинке): Значение, которое было указано в операторе return генератора (73), становится доступным как атрибут .value пойманного исключения StopIteration. Поэтому print(err.value) выводит # 73. Итог: Teturn в генераторе не производит очередное значение, а завершает его работу. При этом значение из return "упаковывается" в исключение StopIteration, сигнализирующее об окончании, и его можно извлечь из атрибута .value этого исключения, если перехватить его вручную. Стандартный цикл for item in generator(): в Python автоматически обрабатывает StopIteration (просто завершает цикл) и не дает прямого доступа к err.value. Поэтому для демонстрации этого механизма и получения возвращаемого значения используется явный вызов next() внутри блока try...except. @pythonl

Стартовал набор в ШАД — успейте подать заявку! Технологии меняют нашу реальность, но за их развитием стоят люди, которые умею
+4
Стартовал набор в ШАД — успейте подать заявку! Технологии меняют нашу реальность, но за их развитием стоят люди, которые умеют находить нестандартные решения. И именно в Школе анализа данных Яндекса готовят таких специалистов! Здесь амбициозные и увлечённые студенты: - погружаются в машинное обучение, Data Science и искусственный интеллект; - перенимают опыт экспертов из индустрии; - учатся решать задачи, стоящие перед ведущими IT-компаниями и исследовательскими центрами. Учёба в ШАДе — это серьёзный вызов даже для тех, кто уже знаком с анализом данных. Поступить непросто, но если вы готовы к интенсивной нагрузке, нестандартным кейсам и полной пересборке своего мышления — это место для вас! За 2 года обучения вы получите инструменты и навыки, которые позволят работать над сложнейшими задачами индустрии, запускать собственные проекты и двигать науку вперёд. Занятия полностью бесплатны и проходят по вечерам. Если в вашем городе нет филиала, можно учиться онлайн. Готовы бросить вызов данности? Тогда подавайте заявку до 4 мая!

🧠 Влияет ли кэш CPU на производительность Python-кода? Лукас Аткинсон провёл серию тестов, чтобы проверить, как поведение CP
🧠 Влияет ли кэш CPU на производительность Python-кода? Лукас Аткинсон провёл серию тестов, чтобы проверить, как поведение CPU-кэша влияет на время выполнения Python-кода. Результаты удивляют. 🔍 Ключевые выводы: - Последовательный доступ к спискам быстрее, чем случайный - При 200k элементах случайный доступ медленнее на 47% - При 1.6M элементов — почти в 4 раза - Python чувствителен к низкоуровневым аспектам памяти, в том числе CPU-кэшу 💡 Совет: при работе с большими объёмами данных используй последовательный доступ — это реально ускоряет код. 📖 Читать подробнее: lukasatkinson.de @pythonl

Аналитиков данных становится все больше, а вы до сих пор не понимаете, что это за специалисты, и чем они занимаются? Онлайн-ш
Аналитиков данных становится все больше, а вы до сих пор не понимаете, что это за специалисты, и чем они занимаются? Онлайн-школа Data Science karpovꓸcourses приглашает на бесплатный вебинар, где вы не только узнаете все о востребованной профессии, но еще и поймете, подходит ли вам эта сфера, и как начать развиваться в ней! Старт: 15 апреля в 19:00 мск. Спикер вебинара — преподаватель karpovꓸcourses и Team lead команды продуктовой аналитики в Raiffeisen CIB — расскажет о том, какие навыки нужны для старта карьеры, и с какими задачами работают аналитики каждый день. А в конце вебинара вас ждет бонус от школы karpovꓸcourses — карьерный гайд и промокод на скидку на обучение. Регистрируйтесь, чтобы не упустить возможность узнать больше о профессии аналитика данных и сделать шаг к новой карьере → https://clck.ru/3L4Y8K/?erid=2VtzqwmamE1 Реклама. ООО «Карпов Курсы», ИНН: 7811764627, erid: 2VtzqwmamE1

🖥 Строковый метод translate позволяет заменять (или удалять) несколько символов строки за один проход. (Похоже на множествен
🖥 Строковый метод translate позволяет заменять (или удалять) несколько символов строки за один проход. (Похоже на множественные вызовы метода replace.) import string s = "Hello, world!" print(s.translate(str.maketrans("", "", string.punctuation))) # Hello world Строковый метод translate ожидает «таблицу перевода», которую мы создаем с помощью вспомогательного метода класса maketrans. Третий аргумент (string.punctuation в примере) — это строка символов, которые мы хотим удалить. Значение string.punctuation (на которое указывает стрелка): !'#$%&\'()*+,-./:;<=>?@[\\]^_{|}~` Суть шпаргалки: Она показывает, как эффективно удалить все стандартные знаки препинания из строки в Python, используя комбинацию методов str.maketrans для создания "инструкции" по удалению и str.translate для применения этой инструкции к строке. @pythonl

Repost from Machinelearning
🌟 NVIDIA добавила нативную поддержку Python в CUDA. Python уже несколько лет уверенно лидирует среди языков программирования
+4
🌟 NVIDIA добавила нативную поддержку Python в CUDA. Python уже несколько лет уверенно лидирует среди языков программирования, а теперь стал ещё ближе к железу. На GTC 2025 NVIDIA объявила о полноценной интеграции Python в свой CUDA-стек. Это значит, что писать код для GPU можно будет напрямую на Python — без погружения в C++ или Fortran. Как подчеркнул Стивен Джонс, архитектор CUDA, цель — сделать инструмент естественным для Python-разработчиков: «Это не перевод синтаксиса C на Python. Все должно работать так, как привыкли разработчики». Раньше CUDA требовала глубокого понимания низкоуровневых языков и это здорово ограничивало аудиторию. Сейчас, когда Python стал стандартом в ML и DS, NVIDIA открывает двери для миллионов программистов. По данным The Futurum Group, в 2023 году CUDA использовали 4 миллиона человек — теперь их число может резко вырасти. Техническая часть такая же обширная, как и ожидания этого события профессиональным сообществом. 🟢Во-первых, появилась библиотека cuPyNumeric — аналог NumPy, который переносит вычисления с CPU на GPU буквально заменой импорта. 🟢Во-вторых, CUDA Core переосмыслен для Python: здесь сделан упор на JIT-компиляцию и минимизацию зависимостей. 🟢В-третьих, добавлены инструменты для профилирования и анализа кода, а ускоренные C++-библиотеки теперь доступны из Python без потерь в производительности. Но главное — новый подход к параллельным вычислениям. Вместо ручного управления потоками, как в C++, NVIDIA предлагает модель CuTile, которая оперирует массивами, а не отдельными элементами. Это упрощает отладку и делает код читаемым, не жертвуя скоростью. По сути, разработчики получают высокоуровневую абстракцию, скрывающую сложности железа, но сохраняющую гибкость. Пока CuTile доступен только для Python, но в планах — расширение для C++. Это часть стратегии NVIDIA по поддержке новых языков: Rust и Julia уже на походе. Python-сообщество уже может экспериментировать — например, интегрировать CUDA-ядра в PyTorch или вызывать привычные библиотеки. Теперь даже те, кто никогда не писал на C++, смогут использовать всю мощь GPU — осталось проверить, как это скажется на скорости создания прекрасных LLM светлого будущего. 🔜 Посмотреть полную презентацию на GTC 2025 @ai_machinelearning_big_data #AI #ML #Python #CUDA #NVIDIA

🐍 Сложная задача по Python: Замыкания и области видимости Что выведет следующий код?
def outer():
    x = 5
    def inner():
        nonlocal x
        x += 1
        return x
    return inner

f = outer()
print(f())
print(f())
print(f())
Варианты ответа: A)
6
7
8
B)
5
5
5
C)
6
6
6
D)
Ошибка выполнения
--- ✅ Правильный ответ: A Почему: Функция outer создаёт замыкание. Переменная x сохраняется между вызовами f, потому что inner — замыкает x и изменяет её с помощью nonlocal. Это классический пример использования замыканий в Python.

🧠 Python-задача на внимательность и знание подводных камней Что выведет этот код?

def make_funcs():
    funcs = []
    for i in range(3):
        def wrapper(x=i):
            return lambda: x
        funcs.append(wrapper())
    return funcs

a, b, c = make_funcs()
print(a(), b(), c())
❓ Варианты ответа: A)0 1 2 В) 2 2 2 C)0 0 0 D)Ошибка на этапе выполнения ✅ Ответ: 0 1 2 📘 Объяснение: 🔹 Цикл for i in range(3) проходит по значениям 0, 1, 2. 🔹 В каждой итерации вызывается wrapper(x=i) — это копирует текущее значение i в локальную переменную x. 🔹 Затем возвращается lambda: x, которая запоминает это конкретное значение x. 🔹 В итоге: a() → 0 b() → 1 c() → 2 Если бы мы не использовали x=i по умолчанию, а писали просто lambda: i, все функции замкнули бы одну и ту же переменную i, и на момент вызова она бы уже была равна 3. @pythonl

🚀 Автоматизируй Docker для Python за 1 команду с Python 📦 Dockerpyze — мощный опенсорс-инструмент, который превращает любой
🚀 Автоматизируй Docker для Python за 1 команду с Python 📦 Dockerpyze — мощный опенсорс-инструмент, который превращает любой Python-проект на uv или poetry в Docker-образ без ручной возни. 💡 Просто добавь - [tool.dpy] в pyproject.toml, укажи entrypoint — и собирай образы одной командой. Без Dockerfile, без боли. 🔧 Поддерживает: ✅ PEP-621 ✅ uv и poetry ✅ кастомные переменные, порты и зависимости ✅ CI/CD (в т.ч. GitHub Actions) 🔥 Подходит для быстрой упаковки ML-сервисов, REST API, CLI-инструментов и всего, что крутится на Python. Github #python #docker #poetry #uv #devtools #opensource #cli @pythonl

🚀 Автоматизируй Docker для Python за 1 команду с Python 📦 Dockerpyze — мощный опенсорс-инструмент, который превращает любой
🚀 Автоматизируй Docker для Python за 1 команду с Python 📦 Dockerpyze — мощный опенсорс-инструмент, который превращает любой Python-проект на uv или poetry в Docker-образ без ручной возни. 💡 Просто добавь - [tool.dpy] в pyproject.toml, укажи entrypoint — и собирай образы одной командой. Без Dockerfile, без боли. 🔧 Поддерживает: ✅ PEP-621 ✅ uv и poetry ✅ кастомные переменные, порты и зависимости ✅ CI/CD (в т.ч. GitHub Actions) 🔥 Подходит для быстрой упаковки ML-сервисов, REST API, CLI-инструментов и всего, что крутится на Python. Github #python #docker #poetry #uv #devtools #opensource #cli @pythonl

🚀 Как Duolingo ускорил микросервисы на 40% с помощью асинхронного Python 🐍⚡ Duolingo рассказали, как им удалось значительно
+5
🚀 Как Duolingo ускорил микросервисы на 40% с помощью асинхронного Python 🐍⚡ Duolingo рассказали, как им удалось значительно повысить производительность своих Python-сервисов, переведя их на async/await, и сделали это не ради хайпа, а ради экономии. 💸 Мотивация: производительность и снижение затрат Duolingo работает с большим количеством микросервисов, обрабатывающих огромные объёмы трафика. Несмотря на высокую нагрузку, многие их Python-сервисы простаивали в ожидании I/O — например, сетевых запросов или операций с базой данных. Это означало неэффективное использование CPU, а значит — деньги на облачный хостинг тратились зря. Асинхронный код — способ “переключаться” между задачами во время ожидания, используя CPU с большей отдачей. Именно это стало главной мотивацией: не “просто быть async”, а снизить расходы. ⚙️ Как проходила миграция Процесс был постепенным и продуманным. Ниже ключевые шаги: ▪ Переход не “всё или ничего” Команда не бросалась переписывать весь сервис с нуля. Они начали с конвертации отдельных маршрутов (routes) на async def, добавляя поддержку асинхронности по частям. ▪ Инструменты постепенно адаптировали Библиотеки и инструменты внутри компании пришлось обновить:  ▪ свой HTTP-клиент переписали под aiohttp,  ▪ систему аутентификации сделали совместимой с async-контекстами,  ▪ логирование, трассировка и метрики обновили под async-архитектуру. ▪ Тесты и инфраструктура Асинхронные изменения требовали пересмотра тестов. Они внедрили поддержку pytest-asyncio и переосмыслили подход к мокам и фикстурам. ▪ Запуск в проде — поэтапно Сначала маршруты работали в синхронном режиме. Потом их перевели в async-режим и замерили разницу. Так удалось отловить “узкие места” до массового внедрения. 📈 Результаты: +40% производительности на инстанс ▪ У каждого экземпляра микросервиса CPU начал использоваться эффективнее. ▪ Снизилось среднее время ответа (latency). ▪ Уменьшилось количество необходимых инстансов — экономия в $$$. ▪ Код стал удобнее масштабировать и поддерживать в I/O-интенсивной среде. Пока один запрос “ждёт”, процессор может выполнять другие задачи. 🔍 Выводы Duolingo подчёркивает: асинхронность не нужна “просто потому что модно”. Но если у вас сервис с большим числом I/O-операций и важна производительность — async Python может дать реальный прирост и экономию. ➡ Оригинальный пост @pythonl

🚀 Летняя школа бэкенда Яндекса открыла набор! Хочешь провести лето с пользой, развивая реальные сервисы в команде с профи? Э
🚀 Летняя школа бэкенда Яндекса открыла набор! Хочешь провести лето с пользой, развивая реальные сервисы в команде с профи? Это твой шанс! Если ты: • Уверенно пишешь на Python, Java или C++ • Понимаешь основы алгоритмов и структур данных — подавай заявку в Летнюю школу бэкенд‑разработки Яндекса. 🗓 Формат обучения: • 2 июня – 27 июля — онлайн-лекции и практика • 28 июля – 24 августа — работа над проектами (онлайн или офлайн) 💡 Что тебя ждёт: • Реальные задачи и работа в фулстек-команде • Наставничество от инженеров Яндекса • Возможность получить офер: >50% выпускников становятся стажёрами или сотрудниками компании • Нетворкинг, лекторий и крутая атмосфера 📍Участие бесплатное. 🕓 Заявки принимаются до 27 апреля. Не упусти! 🔗 Подробнее #backend #летняяшкола #яндекс #стажировка #разработка #python #java #cplusplus

🖥 Разработка игры в стиле Mario с нуля на Python Создание собственной игры в духе легендарного Super Mario Bros — это отличн
🖥 Разработка игры в стиле Mario с нуля на Python Создание собственной игры в духе легендарного Super Mario Bros — это отличный способ прокачать навыки программирования, погрузиться в основы геймдева и просто повеселиться. Гайд по разработке простой платформенной игры с нуля Python, используя библиотеку Pygame. 📌 Гайд @pythonl

⚡️Поступили новости от Kaspersky! В «Лаборатории Касперского» стартовал набор на оплачиваемую стажировку SafeBoard по несколь
⚡️Поступили новости от Kaspersky! В «Лаборатории Касперского» стартовал набор на оплачиваемую стажировку SafeBoard по нескольким направлениям тестирования! Если ты студент вуза Москвы/МО или учишься в Школе 21 и готов(а) работать от 20 часов в неделю, присоединяйся к нашим IT-командам. Ты научишься интересным задачам: Разрабатывать подходы и методики тестирования; Анализировать требования и проектную документацию; Участвовать в развитии тестового фреймворка на Python; Поддерживать CI/CD; Расширять тестовое покрытие для KasperskyOS. Тебя ждет зарплата, компенсация питания и крутая атмосфера в офисе: спортзал, сауна, игровые комнаты, кофейные паузы и многое другое 😇 Делай крутые тесты, регистрируйся https://kas.pr/bn12?erid=2W5zFJhkKRr Реклама. Рекламодатель АО «Лаборатория Касперского» ИНН 7713140469

🔌 python-kasa — управление умными устройствами TP-Link из Python. Если у вас есть умные розетки, лампы или другие устройства
🔌 python-kasaуправление умными устройствами TP-Link из Python. Если у вас есть умные розетки, лампы или другие устройства TP-Link и вы хотели бы автоматизировать их через Python, обратите внимание на эту библиотеку. С её помощью можно легко включать/выключать устройства, проверять их статус и даже управлять через командную строку. Поддерживаются как модели Kasa, так и Tapo, включая розетки, выключатели, лампы и даже камеры. 🤖 GitHub @pythonl

Инженеры и любители работать с железом, отмечаем даты: 25 и 26 апреля в Москве пройдет Repair Cafe. Когда-то Яндекс начинался
Инженеры и любители работать с железом, отмечаем даты: 25 и 26 апреля в Москве пройдет Repair Cafe. Когда-то Яндекс начинался с Поиска, а сегодня в компании полный in-house цикл производства железа: роботы-доставщики, автономный транспорт, умные устройства для дома и многое другое. И для тех, кто разделяет этот инженерный дух и не боится пробовать и создавать, Яндекс проводит Repair Cafe. Оба дня будет работать мастерская — сердце всего мероприятия. Место для тех, кто хочет припаять контакты, починить наушники или разобрать проигрыватель под чутким присмотром опытных наставников. Там же будет доступно целое меню паяльников и нужных запчастей. А любителей ретро-железа ждет починка культового ПК «Ленинград», который выпускался еще в конце 80-х годов. Кроме того, можно послушать доклады, где спикеры поговорят про неочевидные особенности термодизайна серверов и расскажут, как им удалось сделать устройство для чтения ДНК напильником. Зарегистрироваться и ознакомиться с программой можно здесь. Прием заявок открыт до 16 апреля.

🗣 OuteTTS 1.0 — это современный open-source инструмент для синтеза речи (Text-to-Speech), который делает акцент на высоком качестве озвучки, клонировании голоса и поддержке множества языков. Основные особенности: 🔊 Ключевые возможности: Высокая производительность: Способен генерировать аудио до 42 секунд (~8192 токена) за один прогон. Однако для наилучших результатов рекомендуется ограничиваться ~7000 токенами. - Поддержка клонирования голоса: Использует референсный голос (speaker reference) длиной, например, 10 секунд. В таком случае контекст для синтеза сокращается: доступно около 32 секунд активного контента (из 42). - 20 языков: Поддерживает озвучку на 20 различных языках, что делает его универсальным решением для мультиязычных проектов. 🛠️ Под капотом: Хотя подробностей о модели в описании немного, из GitHub-репозитория следует, что: Используются современные архитектуры трансформеров для TTS. Поддерживается реалистичное клонрование голоса по короткому фрагменту. Скорость генерации и качество аудио находятся на уровне лучших TTS-систем с открытым кодом. Установка: git clone https://github.com/edwko/OuteTTS.git cd OuteTTS pip install -r requirements.txt

python 
from outetts import OuteTTS

tts = OuteTTS(
    reference_speaker_path="reference_audio/igor_voice.wav",
    language="ru"  # поддерживаются и другие языки, например: "en", "ja"
)

text = "Привет, Python разработчик! Я твой кастомный голосовой ассистент."
audio = tts.generate(text)

with open("output.wav", "wb") as f:
    f.write(audio)
📥 Ссылка на репозиторий @pythonl

🖥 Ibis — SQL и Python в одном флаконе Надоело переключаться между SQL и pandas? Ibis — это библиотека, которая объединяет лу
🖥 Ibis — SQL и Python в одном флаконе Надоело переключаться между SQL и pandas? Ibis — это библиотека, которая объединяет лучшее из двух миров: SQL-запросы и Python-пайплайны в одном коде. 📦 Установка (с DuckDB и примерами):

bash pip install 'ibis-framework[duckdb,examples]'
🔍 Пример:

import ibis
penguins = ibis.examples.penguins.fetch()

# SQL внутри Python
res = penguins.sql(\"""
SELECT species, island, count(*) AS count
FROM penguins GROUP BY 1, 2
\""")

# Python-стиль фильтрации и сортировки
res.order_by("count")

┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species   ┃ island    ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string    │ string    │ int64 │
├───────────┼───────────┼───────┤
│ Adelie    │ Biscoe    │    44 │
│ Adelie    │ Torgersen │    52 │
│ Adelie    │ Dream     │    56 │
│ Chinstrap │ Dream     │    68 │
│ Gentoo    │ Biscoe    │   124 │
└───────────┴───────────┴───────┘
📌 Что умеет Ibis: — SQL-прослойка прямо по датафреймам — Один и тот же код работает с DuckDB, PostgreSQL, BigQuery, SQLite и др. — Унифицированный синтаксис независимо от движка — Отлично вписывается в data science-пайплайны 📊 Где пригодится: — Аналитика — Дашборды — EDA и быстрые прототипы — Интеграция SQL в ноутбуках без боли. Совместим с Jupyter, Airflow, и всей питоновской экосистемой. 🔗 Подробнее 🔗 Github @pythonl