ch
Feedback
Python/ django

Python/ django

前往频道在 Telegram

📈 Telegram 频道 Python/ django 的分析概览

频道 Python/ django (@pythonl) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 58 972 名订阅者,在 技术与应用 类别中位列第 2 162,并在 俄罗斯 地区排名第 10 185

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 58 972 名订阅者。

根据 29 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -292,过去 24 小时变化为 -1,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 6.27%。内容发布后 24 小时内通常能获得 3.33% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 3 696 次浏览,首日通常累积 1 963 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 20
  • 主题关注点: 内容集中在 github, claude, контекст, архитектура, api 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
по всем вопросам @workakkk @itchannels_telegram - 🔥 все ит каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - 📚 @pythonlbooks РКН: clck.ru/3Fm...

凭借高频更新(最新数据采集于 30 八月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

58 972
订阅者
-124 小时
+137
-29230
帖子存档
📌 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