PythonTalk
4.74K subscribers
1.44K photos
47 videos
7 files
1.3K links
Привет, меня зовут Олег Булыгин 👋

🐍 Здесь я делюсь полезной информацией для тех, кто пишет код на Python: от разработки до Data Science.

По вопросам: @obulygin91
Download Telegram
Что будет нового в Python 3.14? 🐍

Если коротко — Python продолжает войну с GIL и делает очередной шаг в сторону производительности.
Релиз запланирован на октябрь 🗓

Что самого сочного нас ждёт:

1️⃣ Free-threaded Python теперь официально поддерживается (PEP 779).
Сборка без глобальной блокировки интерпретатора — больше не эксперимент. Да, пока это опционально и с небольшими потерями в однопотоке, но вектор задан.

2️⃣ Множественные интерпретаторы в стандартной библиотеке (PEP 734).
Еще один гвоздь в крышку гроба GIL. Теперь можно запускать изолированные копии Python в одном процессе, используя concurrent.interpreters. Это как multiprocessing, только легковеснее и эффективнее. Мощнейший инструмент для CPU-bound задач.

3️⃣ T-строки (PEP 750).
Новый вид строк с префиксом t"...". В отличие от f-строк, они не вычисляются сразу, а создают объект-шаблон. Это удобно для безопасной генерации HTML, SQL и других DSL. Больше никаких случайных XSS-уязвимостей из-за кривых конкатенаций.

4️⃣ Удаленная отладка с PDB (PEP 768).
Теперь можно подключить pdb к любому запущенному Python-процессу по его PID: python -m pdb -p 12345. Отлаживать зависшие в проде приложения станет проще.

А ещё отложенные аннотации (прощай, from __future__ import annotations), Zstandard из коробки и улучшенная подсветка синтаксиса в REPL.

Больше подробностей здесь ◀️

Доживём до того, как шутки про медленный Python останутся в прошлом?
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍221🔥1🥰1🎉1🙏1🍾1
🔮 Прогнозирование временных рядов в Python: от хаоса в данных к работающей модели SARIMA

Как изменятся продажи? Какой спрос ждать к праздникам? Вечные вопросы, на которые бизнесу нужны ответы. И чаще всего решение кроется в анализе временных рядов.

Вот вам подробный гайд, где мы возьмём хрестоматийный, но показательный датасет и пройдём весь путь от подготовки данных до построения предсказательной модели.

Что внутри:
1️⃣ Загружаем и смотрим на данные. Учимся видеть тренд и сезонность.
2️⃣ Узнаём, почему «нестационарный» ряд — это плохо, и как его исправить с помощью логарифмов и дифференцирования.
3️⃣ Разбираемся, как подбирать параметры в SARIMA при помощи ACF/PACF графиков.
4️⃣ Строим и проверяем полученную модель.
🔥9311👍1🎉1🙏1
✍️ Решения вчерашней задачи

Задачку никто не решил 🥹 Но она была не из простых. Давайте посмотрим, как можно было.

💡 Оптимальное решение: умный бэктрекинг с умом

Этот метод по своей сути — умный перебор. Мы пытаемся рекурсивно "пристроить" каждый слиток в одну из k корзин, но с важными оптимизациями, которые отсекают заведомо проигрышные пути.

def can_partition(nums: list[int], k: int) -> bool:
total_sum = sum(nums)
if total_sum % k != 0:
return False

target_sum = total_sum // k
subsets = [0] * k
nums.sort(reverse=True)

def backtrack(index):
if index == len(nums):
return True

for i in range(k):
if subsets[i] + nums[index] <= target_sum:
subsets[i] += nums[index]
if backtrack(index + 1):
return True
subsets[i] -= nums[index]

if subsets[i] == 0:
break

return False

return backtrack(0)


🧠 Как это работает?

1. Первым делом считаем общую сумму total_sum. Если она не делится на k нацело, то поделить слитки на равные по весу группы невозможно. Сразу возвращаем False.

2. Сортируем слитки по убыванию nums.sort(reverse=True). Пытаясь разместить сначала самые тяжелые слитки, мы гораздо быстрее обнаруживаем "тупиковые" ветви комбинаций и отбрасываем их, экономя уйму времени.

3. Рекурсивный поиск (бэктрекинг):
- Функция backtrack пытается разместить каждый слиток, начиная с index = 0.
- Она перебирает все k "корзин" (subsets) и пробует добавить текущий слиток nums[index].
- Если после добавления сумма в корзине не превышает target_sum, мы рекурсивно вызываем backtrack для следующего слитка.
- Если вызов вернул True — ура, решение найдено!
- Если нет — мы "откатываем" изменение (убираем слиток из корзины) и пробуем положить его в следующую.

4. Оптимизация: if subsets[i] == 0: break.
Эта строчка означает: если мы попробовали положить слиток в пустую корзину и эта попытка не привела к итоговому решению, то нет никакого смысла пробовать класть этот же слиток в другие пустые корзины. Они ведь ничем не отличаются! Это простое условие радикально сокращает пространство поиска.

Временная сложность: O(k^N), где N — количество слитков. Задача относится к классу NP-полных, поэтому решения с полиномиальным временем (вроде O(N^2)) не существует. Однако благодаря нашим оптимизациям, на реальных данных алгоритм работает значительно быстрее, чем его худшая оценка.
А пространственная сложность: O(N + k). В основном определяется глубиной рекурсии (O(N)) и хранением "корзин" (O(k)).

Наверное, одна из самых сложных задачек, которые тут были 😏
👍3💯21🎉1🙏1
Трон опенсорс-моделей снова занят 🤴

Недолго Kimi K2 носил корону. Китайцы из Qwen выкатили обнову Qwen3-235B-A22B-Instruct-2507, которая их подвинула.

Самое интересное даже не в цифрах, а в подходе. Они официально разделили модели на Instruct и Reasoning. Эта — чистый Instruct. Зачем? Да потому что, по их словам, гибриды пока получаются "ни рыба, ни мясо" и проигрывают специализированным версиям.

Что на счёт метрик в задачах программирования?

💻 LiveCodeBench: 51.8. Для понимания: у Kimi K2 — 48.9, у Claude Opus — 44.6. Разница не в пределах погрешности, а вполне себе ощутимая.
🌍 MultiPL-E (код на разных языках): 87.9. Это уровень Claude Opus, который многие считают эталоном.
🤖 Aider-Polyglot (агентное использование в IDE): 57.3. Тут она чуть уступает Claude (70.7), но всё ещё наравне с другими топами и показывает, что заточена под реальные задачи, а не только синтетические тесты.

🚀 Как им это удаётся?
Вся магия в MoE (Mixture of Experts). Из 235 миллиардов параметров в любой момент времени активны только 22 миллиарда. Это делает модель гораздо более лёгкой и быстрой на инференсе, чем можно было бы подумать. А главное — это прямой намёк, что скоро эту мощь дистиллируют в модели поменьше. Так что праздник на улице простых смертных с одной-двумя RTX на борту точно будет.

Ещё они мощно вкладываются в агентное применение и tool calling через свою библиотеку Qwen-Agent. То есть её можно не просто просить написать функцию, а встраивать в сложные рабочие процессы, давать доступ к инструментам и заставлять работать, а не только болтать.

Погонять бесплатно тут | Веса на Hugging Face
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🎉1🙏1🏆1
Нейронка-исследователь от Стэнфорда 🧑🏻‍🔬

Наткнулся тут на проект от ребят из Стэнфорда — STORM. Это LLM-система, которая по заданной теме сама лезет в интернет, проводит ресёрч и на выходе генерирует подробную статью в стиле Википедии, сразу со ссылками на источники.

Самое интересное, конечно, как оно под капотом работает. Вместо того чтобы тупо просить LLM задавать вопросы, они сделали хитрее:
1️⃣ Сначала система находит похожие статьи, чтобы понять, с каких разных точек зрения (перспектив) можно посмотреть на тему.
2️⃣ А потом симулирует диалог между автором и экспертом, который «заземлён» на найденные интернет-источники. Это позволяет задавать более глубокие и осмысленные вопросы.

Сами авторы, конечно, честно признаются, что на выходе получается не готовая к публикации статья, а скорее очень хороший черновик для дальнейшей работы. Так что заявления в стиле «ИИ пишет научные статьи как PhD» — это, как обычно, заигрывания с мечтами людей 🌚

Что ещё крутого:
▫️ Есть фича Co-STORM, где человек может влезть в процесс и направить дискуссию LLM-агентов в нужное русло.
▫️ Всё это дело опенсорсное и ставится через pip install knowledge-storm.
▫️ Можно под капотом менять и LLM (через litellm), и поисковые движки.

В общем, инструмент для автоматизации ресёрча выглядит как минимум любопытно. Особенно для тех, кто устал от бесконечного гуглежа на старте изучения новой темы.

👉🏻 GitHub проекта
👉🏻 Попробовать онлайн
👍32🔥22🙏1👨‍💻1
КИТАЙСКИЙ КОНВЕЙЕР НЕ ОСТАНОВИТЬ 🇨🇳

Не успела вчера выйти новость про обновление Qwen3-235B, как китайцы выкатили новую модель.

И на этот раз они не просто обновили флагман, а выкатили узкоспециализированный инструмент для программирования — Qwen3-Coder. И вновь занимают топ 🏆

Что самое важное, кроме очередной победы на бенчмарках:

1️⃣ Агентность > Генерация. Это главный тренд. Модель натаскивали не просто на написание кода по промпту, а на решение комплексных задач в несколько шагов (Long-Horizon RL). Её учили работать с инструментами, анализировать фидбек и самостоятельно закрывать тикеты на SWE-Bench.

2️⃣ Практичность, а не синтетика. Они прямо говорят, что забили на типовые задачки в духе соревновательного программирования и сфокусировались на RL-тренировке на реальных, повседневных задачах программистов. Для этого развернули 20 000 параллельных окружений на своей облачной инфраструктуре. Масштаб впечатляет.

3️⃣ Инструменты "из коробки". Вместе с моделью выложили и CLI-агента Qwen Code — допиленный форк Gemini Code. Устанавливается одной командой и готов к работе.

npm i -g @qwen-code/qwen-code

Более того, модель можно подцепить к Claude Code от Anthropic. То есть её встраивают в уже существующую экосистему, а не заставляют всех переходить на что-то новое.

Погонять бесплатно тут: https://chat.qwen.ai/
Репа с CLI-агентом: https://github.com/QwenLM/qwen-code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥621🙏1👨‍💻1
Сегодня самый простой квиз, буквально одна две операции 😌

Жду 100% правильных ответов 🌝
👍2🎉2🙏1
Что получим при запуске кода?
Anonymous Quiz
49%
100
2%
-20
6%
SyntaxError
43%
-100
1%
20
🎉32👍2💯2🔥1🙏1
📊 Вот вам немного свежих цифр по рынку труда в IT, чтобы вернуть вас с небес на землю.

Картина, конечно, интересная 😁

1. Деньги
Разрыв между тем, что хотят соискатели, и тем, что готовы платить компании, не просто есть — он растёт.

▫️ Ожидаемые зарплаты (фиолетовая линия) подросли со 100к до 110к. Аппетиты не стоят на месте.
▫️ Предлагаемые (красная линия) замерли на отметке 90к и не двигаются.

То есть, пропасть между хотелками и реальностью за полгода увеличилась с 15к до 20к.

2. Конкуренция
hh.индекс — это количество резюме на одну вакансию.

▫️В прошлом году (синяя линия) было в среднем 7-8 человек на место. Рынок работодателя, но терпимо.
▫️В этом году (зеленая линия) показатель улетел в космос: с 9.9 в январе до 12.5 в июне.

По классификации самого hh.ru, 12+ — это «крайне высокий уровень конкуренции».

Итого, что мы имеем:
Людей, желающих «войти в айти», стало КРАТНО больше. При этом их зарплатные ожидания растут, а вот готовность бизнеса платить — нет.

Получается какой-то идеальный шторм. Хотелок больше, денег столько же (если не меньше), а на каждое место теперь претендует целая толпа.

Что будет дальше? 🔮
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯5💔3😭2👻2😁1🤔1😱1🌚1🍌111
Лекс Фридман взял интервью у Демиса Хассабиса — сооснователя и CEO Google DeepMind.

Получилось интересно. Что касается программирования, то он высказал такие мысли:

ИИ-системы исключительно хорошо справляются с программированием.


В ближайшие 5-10 лет программисты, которые примут и освоят эти технологии, станут сверхчеловечески продуктивными (в 10 раз эффективнее, чем сейчас)


Фокус работы программистов сместится: вместо написания всего кода вручную, они будут определять архитектуру, формулировать задачи, направлять "ai-помощников" и проверять качество сгенерированного кода.


Некоторые области программирования (например, фронтенд) станут более поддающимися автоматической генерации ИИ, тогда как другие (проектирование игровых движков, высокопроизводительное программирование, руководство сложными системами) останутся для человека.


Это изменение будет в 10 раз масштабнее и в 10 раз быстрее, чем промышленная революция. Программистам придется переучиваться и адаптировать свои текущие навыки. Появятся новые профессии, которые мы сегодня даже не можем представить.


Think about it 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔621🔥1🙏11
Создаём GPT с нуля: фундаментальный туториал от Карпатого 🧠

Есть контент, который не стареет. Например, туториал от Андрея Карпатого (сооснователь OpenAI, экс-директор по AI в Tesla), где он с нуля на Python собирает и тренирует GPT от начала до конца: от определения nn.Module и оптимизации с помощью Flash Attention до настройки гиперпараметров и оценки результатов.

Да, в видео разбирают GPT-2, но его главный плюс, а не минус. Именно эту модель, в отличие от современных гигантов, можно реально натренировать на одной домашней GPU, пройдя своими руками весь путь от и до. При этом фундаментальные принципы, лежащие в основе современных LLM, там раскрыты полностью.

А код доступен на GitHub 🐍
9👍4🔥31
ТРЕТИЙ УДАР КИТАЙСКОГО МОЛОТА 🔨

Qwen выкатывает модели быстрее, чем я успеваю писать посты.

Сначала было обновление универсального Instruct (пост тут). Потом узкоспециализированный Coder (пост тут). Теперь улучшают мышление.

Встречайте, Qwen3-235B-A22B-Thinking-2507.
Это продолжение стратегии работы над узкоспециализированными инструментами для конкретных доменов.

Что по результатам? Они снова на вершине, но теперь в самых престижных номинациях:

🧠 Математика и логика: На бенчмарке HMMT25 (олимпиада по математике) она рвёт всех, включая GPT-4o и Gemini 2.5 Pro. На AIME25 дышит в спину самой мощной версии OpenAI.

💻 Программирование: Снова топ-1 на LiveCodeBench. 74.1 балла против 72.5 у Gemini и 71.8 у GPT-4o-mini.

🔥 Как из неё выжать максимум (советы от разрабов):
▫️ Для сложных задач (код, математика) ставьте max_new_tokens не меньше 81,920. Модели нужно место, чтобы «подумать».
▫️ Используйте Temperature=0.6, TopP=0.95.

Китайцы не просто догнали, а в самых сложных интеллектуальных задачах начали обгонять. И всё это в опенсорсе.

Погонять бесплатно тут: https://chat.qwen.ai/
Веса на Hugging Face: https://huggingface.co/Qwen/Qwen3-235B-A22B-Thinking-2507
👍931🔥1🏆1
Forget python, it turned out that spreadsheet is all you need

Сложно понимать, как писать нейронки на Python?

Чувак в Excel (!) написал языковую модель на 85к параметров. Как раз на основе структуры, которую реализует Андрей Карпатый.

Для тех, кто не может в голове уложить, как все эти матрицы в трансформерах перемножаются, — это просто находка. Можно буквально пальцем тыкнуть в любую ячейку и увидеть, какая формула за ней стоит и откуда берутся все эти эмбеддинги, self-attention и прочая магия.

Никаких запутанных классов и абстракций, только цветные ячейки:
🟣 Фиолетовые — параметры модели, которые можно крутить.
🟢 Зелёные — данные, которые текут по пайплайну.
🟠 Оранжевые — промежуточные расчёты для ясности.

Автор так и пишет:
Forget python, it turned out that spreadsheet is all you need


А вы говорите, что табличные редакторы дата-сайентистам уже не нужны 🌝
👍10😁6😱3🔥2🤔1🙏1
🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
😁176❤‍🔥1🔥1🤣1👨‍💻1🤪1
Алгоритмическая задачка 🐍

Представьте, что вы — квант в крутом хедж-фонде. Ваш босс дал вам задание: найти самый длинный период "идеальной волатильности" в котировках акций.

Это когда цена то падает, то растет, то снова падает... и так далее.

🐍 Условие задачи

Написать функцию, которая принимает список целых чисел (цены акций) и возвращает максимальную длину непрерывного подсписка, в котором знаки сравнения строго чередуются.

> То есть, последовательность должна быть вида: a < b > c < d ... или a > b < c > d ...


Примеры для ясности 👇

Пример 1:
- Вход: 9, 4, 2, 10, 7, 8, 8, 1, 9
- Вывод: 5
- Объяснение: Самый длинный такой участок — это 4, 2, 10, 7, 8. Давайте проверим:
- 4 > 2 (вниз 📉)
- 2 < 10 (вверх 📈)
- 10 > 7 (вниз 📉)
- 7 < 8 (вверх 📈)
Знаки чередуются, длина — 5 элементов.

Пример 2:
- Вход: 4, 8, 12, 16
- Вывод: 2
- Объяснение: Здесь только один подъем (4 < 8). Длина этого участка — 2. Дальше тренд не меняется.

Пример 3:
- Вход: 100
- Вывод: 1

Пример 4:
- Вход: 5, 5, 5
- Вывод: 1
- Объяснение: Равные элементы прерывают последовательность, так как сравнение не является ни строгим > ни строгим <.

Обойдемся одним циклом или понадобится что-то хитрее? 😉
4🤔2🏆1👨‍💻11
Бесплатный учебник по Deep Learning от MIT Press с 68-ю ноутбуками 📕

Фундаментальный учебник «Understanding Deep Learning» от Саймона Принса и MIT Press это:

- Книга: Полный PDF на 500+ страниц, покрывающий все от основ до диффузионных моделей и трансформеров.
- 68(!) Python-ноутбуков: К каждой главе прилагаются ноутбуки с кодом. Можно сразу запускать и ковыряться.

И да, на английском.

👉🏻 Скачать всё можно здесь

Крутота 👊
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥6331🎉1👨‍💻1
👨‍💻 df.isna().sum() — вредная команда.

Вредная не потому, что она врёт, а потому, что создаёт опасную иллюзию контроля.

Вы видите аккуратную табличку с количеством пропусков и думаете: «Окей, я всё знаю». Но на самом деле вы не знаете ничего. Знать, сколько данных пропущено — это первый класс, вторая четверть. Гораздо важнее понимать, КАК они пропущены.

Есть ли в пропусках система? Они случайны или нет? Пропуски в столбце А связаны с пропусками в столбце Б?

Простой подсчёт NaN на эти вопросы не ответит. Чтобы перейти от поверхностного взгляда к глубокому пониманию, нужен более глубокий инструмент. И он есть — это библиотека missingno.

В ней разные полезные визуализации, например:

🔬 msno.matrix() — показывает точное расположение каждой «дыры» в данных. Сразу видно, пропуски — это единичные точки или целые «мёртвые зоны».

📊 msno.heatmap() — детектор скрытых связей. Показывает, значения в каких признаках пропущены вместе.

🗺 msno.dendrogram() — карта родства. Группирует столбцы по схожести паттернов пропусков. Сразу видно, какие признаки ведут себя одинаково, а какие — живут своей жизнью.

Вот вам руководство по missingno с примерами кода и графиками:
👉🏻 Пропуски в данных — не приговор: Полное руководство по визуализации и анализу с missingno в Python

Работаем с пропусками умнее 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍421🙏1💯1
✍️ Решения вчерашней задачи

Видимо, оказалось сложной 🤔 Но ничего страшного, давайте разберем элегантный и очень эффективный способ её решения.

🎯 Ключевая идея

Чтобы решить задачу за один проход, мы будем использовать подход, похожий на динамическое программирование. Нам не нужно хранить все подпоследовательности, достаточно отслеживать всего два значения:
- up — длина текущей "волнистой" последовательности, которая заканчивается ростом (📈).
- down — длина текущей "волнистой" последовательности, которая заканчивается падением (📉).

Идём по списку и на каждом шаге обновляем эти два счётчика.

Вот как выглядит код, реализующий эту идею. Он одновременно и самый быстрый, и очень "питоничный" по духу — простой и ясный.

def max_turbulence_size(prices: list[int]) -> int:
if len(prices) < 2:
return len(prices)

max_len = 1
up = 1
down = 1

for i in range(1, len(prices)):
if prices[i] > prices[i-1]:
up = down + 1
down = 1
elif prices[i] < prices[i-1]:
down = up + 1
up = 1
else:
up = 1
down = 1

max_len = max(max_len, up, down)

return max_len


🧐 Как это работает?

- Шаг 1: Инициализация
Мы начинаем с up = 1 и down = 1. Это логично, ведь любой один элемент сам по себе является последовательностью длиной 1. max_len тоже равен 1.

- Шаг 2: Итерация
Мы проходим по списку цен, начиная со второго элемента, и сравниваем его с предыдущим.

- Шаг 3: Логика обновления. Это самая соль алгоритма.
- Если цена выросла (prices[i] > prices[i-1]):
Значит, мы можем продлить последовательность, которая до этого падала. Новая длина последовательности, заканчивающейся ростом, будет up = down + 1. При этом любая последовательность, заканчивающаяся ростом, прервалась, поэтому down мы сбрасываем до 1.
- Если цена упала (prices[i] < prices[i-1]):
Зеркальная логика. Мы продлеваем последовательность, которая росла. down = up + 1, а up сбрасываем до 1.
- Если цены равны (prices[i] == prices[i-1]):
Чередование нарушено. Любая волна прерывается. Мы сбрасываем и up, и down обратно в 1.

- Шаг 4: Поиск максимума
На каждом шаге цикла мы обновляем max_len, выбирая самое большое значение из max_len, up и down. Так мы гарантированно не упустим самую длинную волну.

Временная сложность: O(N) . Мы проходим по входному списку всего один раз. Быстрее просто невозможно! 🚀
Пространственная сложность: O(1). Мы используем фиксированное количество переменных (up, down, max_len), которое не зависит от размера списка. Максимально эффективно по памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥2🐳211
🇨🇳 Китайцы снова разрывают! Выкатили GLM-4.5 🐲

Я изучил их анонс и доки, вот короткая выжимка:
▫️Что это? Здоровенная MoE-модель (355B параметров), 128к контекста. Главное — полный опенсорс под лицензией MIT. Можно брать и использовать в коммерческих проектах.
▫️В чем фишка? Заточена под «агентов». По демкам, она может по команде сгенерить рабочую игру или написать сайт с нуля.
▫️Она реально так хороша?
Бенчмарки на уровне топов. Не «убийца» всего и вся, но, возможно, один из самых мощных открытых ИИ-агентов на сегодня.
▫️А запустить можно? Только если у вас есть доступ к серверу с пачкой H100. На игровом ноуте пока не взлетит. 🫠

🔗Первоисточники для самостоятельного изучения:
- Официальный анонс
- Репозиторий на GitHub
- Модели на HuggingFace

Разбор архитектуры — что там с MoE, их RL-фреймворком slime и как это все-таки запустить тут:
👉 Читать полный разбор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍632🔥1🙏11