Этот практический гайд по статистике на Python - ваш надёжный проводник в мир анализа, визуализации и интерпретации данных.
От простых описательных показателей до регрессий и временных рядов — с примерами, кодом и реальными задачами. Всё, что нужно, чтобы уверенно применять статистику на практике.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥4👍3
🐍 Минимум и максимум в Python
Чтобы быстро получить минимальное и максимальное значение из последовательности, используй встроенные функции
Обе поддерживают параметр
Подписывайся, больше фишек каждый день !
Чтобы быстро получить минимальное и максимальное значение из последовательности, используй встроенные функции
min() и max(). Обе поддерживают параметр
default — он задаёт значение по умолчанию, если последовательность пуста. Подписывайся, больше фишек каждый день !
numbers = [3, 7, 2, 9]
print(min(numbers)) # 2
print(max(numbers)) # 9
# пример с пустым списком
print(min([], default=0)) # 0
print(max([], default=0)) # 0
❤9🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Когда Python-код в Docker начинает внезапно тормозить, а контейнеры — весить гигабайты, часто виновник скрыт глубже: Docker копирует в образ всё виртуальное окружение, кэш pip, артефакты билдов и даже .pyc-файлы.
Есть хитрый способ избежать этого и сделать контейнер в 5–10 раз легче и гораздо быстрее:
Используйте многоступенчатую сборку, где Python-зависимости собираются в одном этапе, а в финальный образ попадает только «чистый» результат.
Так вы исключаете мусор, ускоряете сборку и снижаете attack surface.
Многоступенчатый Dockerfile для Python
1. Этап сборки зависимостей
FROM python:3.12-slim AS builder
WORKDIR /build
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
2. Финальный минимальный образ
FROM python:3.12-slim
WORKDIR /app
Копируем только готовые зависимости без pip-кэша
COPY --from=builder /install /usr/local
Добавляем чистый код без артефактов
COPY . .
CMD ["python", "main.py"]
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥9🥰3
Разработка крупного Python-проекта требует продуманной архитектуры. Правильная структура кода упрощает развитие, тестирование и поддержку приложения.
В этой статье мы рассмотрим ключевые принципы архитектурной организации для разных типов проектов - веб-приложений, библиотек, микросервисов и систем обработки данных.
Обсудим разделение системы на слои (domain, service, infrastructure), использование популярных шаблонов проектирования (Dependency Injection, Repository, Facade), организацию кода по модулям и пакетам, примеры структуры каталогов, работу с зависимостями и конфигурацией (Pydantic, dotenv), логгирование и мониторинг, обеспечение тестируемости, поддержку расширяемости и модульности.
Также приведем примеры кода и структуры каталогов, а в конце – общие советы и распространенные ошибки, которых следует избегать.
https://uproger.com/kak-organizovat-arhitekturu-bolshogo-python-proekta/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🥰2
🎨 NFT Generator: Создавайте уникальные NFT с легкостью!
Этот репозиторий предлагает простой способ генерации изображений NFT с использованием Python. Просто структурируйте свои изображения в папках и запустите скрипт для создания множества уникальных комбинаций. Поддерживает анимацию и графический интерфейс.
🚀Основные моменты:
- Легкая генерация NFT из изображений.
- Поддержка уникальных комбинаций и анимации.
- Интуитивно понятный GUI для удобства использования.
- Настраиваемая структура папок для ваших изображений.
📌 GitHub: https://github.com/vooltex5083/NFT-generator
#python
Этот репозиторий предлагает простой способ генерации изображений NFT с использованием Python. Просто структурируйте свои изображения в папках и запустите скрипт для создания множества уникальных комбинаций. Поддерживает анимацию и графический интерфейс.
🚀Основные моменты:
- Легкая генерация NFT из изображений.
- Поддержка уникальных комбинаций и анимации.
- Интуитивно понятный GUI для удобства использования.
- Настраиваемая структура папок для ваших изображений.
📌 GitHub: https://github.com/vooltex5083/NFT-generator
#python
GitHub
GitHub - vooltex5083/NFT-generator: 🔥 nft generator 🔥 nft generator written in python3 nft generator designed to perform its designated…
🔥 nft generator 🔥 nft generator written in python3 nft generator designed to perform its designated function. nft generator tool nft generator utility nft generator crypto bot nft generator bot uti...
❤4👍3🔥2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Коварная ловушка с замыканиями в Python
Многие хитрые баги в Python появляются из-за того, что разработчики неверно понимают область видимости переменных в замыканиях.
Частая ошибка - внутри цикла создавать функции-лямбды, которые «помнят» одно и то же финальное значение переменной, а не значение на каждой итерации. В итоге весь список функций ведёт себя одинаково. Чтобы избежать ловушки, фиксируйте значение через аргумент по умолчанию или используйте functools.partial.
Многие хитрые баги в Python появляются из-за того, что разработчики неверно понимают область видимости переменных в замыканиях.
Частая ошибка - внутри цикла создавать функции-лямбды, которые «помнят» одно и то же финальное значение переменной, а не значение на каждой итерации. В итоге весь список функций ведёт себя одинаково. Чтобы избежать ловушки, фиксируйте значение через аргумент по умолчанию или используйте functools.partial.
funcs = []
for i in range(5):
# Ошибка - все функции запомнят i=4
funcs.append(lambda: i)
print([f() for f in funcs]) # [4,4,4,4,4]
funcs_safe = []
for i in range(5):
# Правильно - захватываем текущее значение
funcs_safe.append(lambda i=i: i)
print([f() for f in funcs_safe]) # [0,1,2,3,4]
❤7👍4
This media is not supported in your browser
VIEW IN TELEGRAM
🕔 Как сделать задержку в Python разными способами
В Python есть несколько способов сделать задержку, и каждый подходит под разные задачи.
Обычная пауза - через time.sleep().
Неблокирующая задержка - через asyncio.sleep() в асинхронном коде.
Точная задержка в цикле — через time.perf_counter().
Выбирайте под свой сценарий.
import time
В Python есть несколько способов сделать задержку, и каждый подходит под разные задачи.
Обычная пауза - через time.sleep().
Неблокирующая задержка - через asyncio.sleep() в асинхронном коде.
Точная задержка в цикле — через time.perf_counter().
Выбирайте под свой сценарий.
import time
print("Старт")
time.sleep(2) # простая задержка
print("Пауза 2 секунды завершена")
#2 вариант
import asyncio
async def main():
print("Асинхронный старт")
await asyncio.sleep(1.5) # не блокирует поток
print("Прошла асинхронная задержка 1.5 сек")
asyncio.run(main())
#3 вариант
import time
start = time.perf_counter()
while time.perf_counter() - start < 1: # точная контрольная задержка ~1 сек
pass
print("Прошла точная задержка без sleep")
❤8
This media is not supported in your browser
VIEW IN TELEGRAM
🚨 SQL Никогда НЕ ДЕЛАЙ ТАК #sql
НИКОГДА НЕ ЛОМАЙ ИНДЕКСЫ ФУНКЦИЯМИ: не оборачивай индексируемые поля в функции внутри WHERE.
Как только ты пишешь LOWER(), CAST(), COALESCE() или любые вычисления по колонке — индекс перестаёт работать, и запрос падает в полное сканирование таблицы.
Это одна из самых тихих причин, почему запросы внезапно превращаются в тормоза.
Вместо этого приводи значения заранее или используй функциональные индексы.
https://www.youtube.com/shorts/AyiAslOeJFA
НИКОГДА НЕ ЛОМАЙ ИНДЕКСЫ ФУНКЦИЯМИ: не оборачивай индексируемые поля в функции внутри WHERE.
Как только ты пишешь LOWER(), CAST(), COALESCE() или любые вычисления по колонке — индекс перестаёт работать, и запрос падает в полное сканирование таблицы.
Это одна из самых тихих причин, почему запросы внезапно превращаются в тормоза.
Вместо этого приводи значения заранее или используй функциональные индексы.
Плохо: индекс по email НЕ используется
SELECT *
FROM users
WHERE LOWER(email) = 'user@example.com';
-- Хорошо: нормализуем значение заранее
SELECT *
FROM users
WHERE email = 'user@example.com';
-- Или создаём функциональный индекс (PostgreSQL)
CREATE INDEX idx_users_email_lower ON users (LOWER(email));
https://www.youtube.com/shorts/AyiAslOeJFA
❤7👍3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
❌ НЕЛЬЗЯ ТАК ИСПОЛЬЗОВАТЬ LAMBDA В PYTHON
Главная ошибка - превращать lambda в свалку логики: добавлять туда побочные эффекты, вызовы print, длинные условия и вычисления.
Такие лямбды плохо читаются, их невозможно нормально отлаживать, и они нарушают саму идею — быть короткой и чистой функцией. Всё сложное нужно выносить в обычную функцию. Подписывайся, больше фишек каждый день !
Главная ошибка - превращать lambda в свалку логики: добавлять туда побочные эффекты, вызовы print, длинные условия и вычисления.
Такие лямбды плохо читаются, их невозможно нормально отлаживать, и они нарушают саму идею — быть короткой и чистой функцией. Всё сложное нужно выносить в обычную функцию. Подписывайся, больше фишек каждый день !
# нельзя так делать — lambda с изменением состояния
data = [1, 2, 3]
logs = []
# опасный антипаттерн
process = lambda x: logs.append(f"processed {x}") or (x * 10)
result = [process(n) for n in data]
print("RESULT:", result)
print("LOGS:", logs)
👍5❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥Python: САМЫЙ ЭФФЕКТИВНЫЙ АЛГОРИТМ ДЛЯ ПОИСКА
Нет «одного» идеального алгоритма на все случаи жизни, но для поиска по отсортированным данным классика — бинарный поиск с сложностью О лог н.
Вместо того чтобы проходить весь список по очереди, он каждый раз делит диапазон пополам и быстро сужает область поиска.
Главное правило: если можешь отсортировать данные и потом искать — почти всегда лучше использовать бинарный поиск, а не линейный проход.
Нет «одного» идеального алгоритма на все случаи жизни, но для поиска по отсортированным данным классика — бинарный поиск с сложностью О лог н.
Вместо того чтобы проходить весь список по очереди, он каждый раз делит диапазон пополам и быстро сужает область поиска.
Главное правило: если можешь отсортировать данные и потом искать — почти всегда лучше использовать бинарный поиск, а не линейный проход.
nums = [1, 4, 7, 9, 15, 20, 33, 42]
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return True
if arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return False
print(binary_search(nums, 33))
print(binary_search(nums, 100))
❤7🔥2👍1
🚀 DR Tulu: Reinforcement Learning for Deep Research
DR Tulu-8B — первый открытый модель для долгосрочных задач глубоких исследований. Она демонстрирует конкурентоспособные результаты на бенчмарках, сопоставимых с OpenAI. Репозиторий включает библиотеки для разработки агентов, обучение с помощью RL и SFT.
🚀Основные моменты:
- Мощная библиотека агентов для глубоких исследований.
- Обучение с эволюционными рубриками.
- Поддержка высококонкурентного асинхронного управления запросами.
- Интеграция с существующими моделями и фреймворками.
📌 GitHub: https://github.com/rlresearch/dr-tulu
DR Tulu-8B — первый открытый модель для долгосрочных задач глубоких исследований. Она демонстрирует конкурентоспособные результаты на бенчмарках, сопоставимых с OpenAI. Репозиторий включает библиотеки для разработки агентов, обучение с помощью RL и SFT.
🚀Основные моменты:
- Мощная библиотека агентов для глубоких исследований.
- Обучение с эволюционными рубриками.
- Поддержка высококонкурентного асинхронного управления запросами.
- Интеграция с существующими моделями и фреймворками.
📌 GitHub: https://github.com/rlresearch/dr-tulu
❤4🔥3👍2
🐍⚙️ Python + Docker совет:
Не устанавливай зависимости в образ на «сыром» pip install — используй фиксированные версии и слой кеширования. Правильный паттерн:
1) сначала COPY requirements.txt
2) затем RUN pip install -r requirements.txt
3) потом COPY исходники
Так Docker кеширует слой с зависимостями — при изменении кода пересобирается только последний слой, а не весь образ. Это ускоряет CI/CD в разы и делает сборки предсказуемыми.
Не устанавливай зависимости в образ на «сыром» pip install — используй фиксированные версии и слой кеширования. Правильный паттерн:
1) сначала COPY requirements.txt
2) затем RUN pip install -r requirements.txt
3) потом COPY исходники
Так Docker кеширует слой с зависимостями — при изменении кода пересобирается только последний слой, а не весь образ. Это ускоряет CI/CD в разы и делает сборки предсказуемыми.
👍8❤5
🧠 Продвинутая типизация Python, о которой почти никто не знает
Статья показывает, что Python уже давно вышел за рамки простых
Главные идеи:
✔️
✔️
✔️ Python 3.13+ добавляет улучшенный вывод типов и строгие проверки, чтобы типизированный код стал надёжнее.
✔️ Поддержка typed function overloading - теперь можно описывать разные сигнатуры для одной функции, и анализаторы понимают их корректно.
📌 Вывод из статьи - Python типизация уже стала инструментом для архитектуры и предотвращения ошибок, особенно в больших проектах. Но большинство разработчиков использует только её простейший слой.
Кому полезно:
• работаешь с крупными кодовыми базами
• пишешь библиотеки
• хочешь меньше скрытых багов и более предсказуемые refactor-ы
Источник: martynassubonis.substack.com/p/advanced-overlooked-python-typing
Статья показывает, что Python уже давно вышел за рамки простых
List[int] и Optional[str].Главные идеи:
✔️
TypeGuard и новый TypeIs позволяют писать функции, которые доказательно сужают типы - например, проверка превращает Any в конкретный тип для дальнейшего кода.✔️
assert_never из typing помогает ловить случаи, когда ты забыл обработать один из вариантов, что особенно важно в match и сложных условных ветках.✔️ Python 3.13+ добавляет улучшенный вывод типов и строгие проверки, чтобы типизированный код стал надёжнее.
✔️ Поддержка typed function overloading - теперь можно описывать разные сигнатуры для одной функции, и анализаторы понимают их корректно.
📌 Вывод из статьи - Python типизация уже стала инструментом для архитектуры и предотвращения ошибок, особенно в больших проектах. Но большинство разработчиков использует только её простейший слой.
Кому полезно:
• работаешь с крупными кодовыми базами
• пишешь библиотеки
• хочешь меньше скрытых багов и более предсказуемые refactor-ы
Источник: martynassubonis.substack.com/p/advanced-overlooked-python-typing
👍7❤3🔥2🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Удобный контекстный менеджер для работы с файлами
Использование контекстного менеджера делает работу с файлами более безопасной и удобной. В этом примере мы создадим собственный контекстный менеджер для автоматического закрытия файла и обработки ошибок.
Использование контекстного менеджера делает работу с файлами более безопасной и удобной. В этом примере мы создадим собственный контекстный менеджер для автоматического закрытия файла и обработки ошибок.
class ManagedFile:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
self.file = None
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
if self.file:
self.file.close()
with ManagedFile('example.txt', 'w') as f:
f.write('Hello, Custom Context!')
❤4😁4👍2👎2🔥1
🐍 Хитрая ловушка в Python, на которую попадаются даже опытные
Интуитивно кажется, что это создаёт независимые строки матрицы.
Но на самом деле Python копирует ссылки - все три строки указывают на один и тот же список.
🔍 Поэтому изменение matrix[0][0] или append() влияет сразу на все строки.
🧠 Вывод программы:
[[1, 0, 0, 9],
[1, 0, 0, 9],
[1, 0, 0, 9]]
3
4
✔️ Как правильно создавать матрицу с независимыми строками:
matrix = [[0] * 3 for _ in range(3)]
Теперь каждая строка - отдельный список, и изменения не “протекают” по всей матрице.
matrix = [[0] * 3] * 3
matrix[0][0] = 1
matrix[1].append(9)
print(matrix)
print(len(matrix))
print(len(matrix[0]))
Интуитивно кажется, что это создаёт независимые строки матрицы.
Но на самом деле Python копирует ссылки - все три строки указывают на один и тот же список.
🧠 Вывод программы:
[[1, 0, 0, 9],
[1, 0, 0, 9],
[1, 0, 0, 9]]
3
4
✔️ Как правильно создавать матрицу с независимыми строками:
matrix = [[0] * 3 for _ in range(3)]
Теперь каждая строка - отдельный список, и изменения не “протекают” по всей матрице.
👍18❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Не полагайся на “хитрые” семена случайности в Python!
Python игнорирует знак числа в random.seed, поэтому seed от трех и seed от минус трех дают одинаковые результаты.
Разные seed не обязательно означают разные потоки — Python гарантирует только одно: одинаковый seed → одинаковая последовательность.
Если нужны независимые случайные потоки - создавай отдельные RNG или используй разные числовые диапазоны, а не вариации знака.
import random
rng_train = random.Random(42) # отдельный генератор для train
rng_test = random.Random(99) # отдельный генератор для test
print(rng_train.randint(1, 100))
print(rng_test.randint(1, 100))
https://www.youtube.com/shorts/TLNqDK6qQmU
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1🔥1
🎉 Превратите статьи в слайды за один клик! 🎉
Paper2Slides позволяет быстро создавать профессиональные слайды и постеры из научных статей и документов. Поддерживает множество форматов, включая PDF и Word, с точным извлечением данных и возможностью кастомизации стилей.
🚀 Основные моменты:
- 📄 Поддержка различных форматов документов
- 🎯 Точное извлечение контента с сохранением источников
- 🎨 Возможность кастомизации стилей с помощью естественного языка
- ⚡ Быстрое создание слайдов с режимом предварительного просмотра
📌 GitHub: https://github.com/HKUDS/Paper2Slides
#python
Paper2Slides позволяет быстро создавать профессиональные слайды и постеры из научных статей и документов. Поддерживает множество форматов, включая PDF и Word, с точным извлечением данных и возможностью кастомизации стилей.
🚀 Основные моменты:
- 📄 Поддержка различных форматов документов
- 🎯 Точное извлечение контента с сохранением источников
- 🎨 Возможность кастомизации стилей с помощью естественного языка
- ⚡ Быстрое создание слайдов с режимом предварительного просмотра
📌 GitHub: https://github.com/HKUDS/Paper2Slides
#python
❤4👍1🔥1
Git Quest: 12 заданий до Нового года 🎁
SourceCraft приглашает разработчиков в новогодний Git-квест!
12 заданий — от выращивания ASCII-ёлки до спасения подарков через git bisect.
🎅 Персональный рейтинг — чем активнее коммитишь, тем выше в лидерборде.
🎅 Истории, пасхалки и праздничные шаги: украшай репозиторий, помогай Деду Морозу, прокачивай свой Git.
Старт — 10 декабря, финал — 30 декабря, а пока можешь потренироваться — первое задание уже открыто.
Приготовь оливье, включи IDE и отправляйся в путешествие по новогоднему репозиторию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥3
🎥🚀 Wan-Move: Motion-Controlled Video Generation
Wan-Move представляет собой инновационную платформу для генерации видео с управлением движением, обеспечивая высокое качество и точность. Используя новаторское руководство по латентным траекториям, проект позволяет создавать 5-секундные видео с точным контролем на уровне объектов, интегрируясь с существующими моделями без изменений архитектуры.
🚀 Основные моменты:
- 🎯 Высококачественная генерация видео 480p с SOTA контролем движений.
- 🧩 Новая методология латентного управления траекторией.
- 🕹️ Точный контроль движений объектов с помощью плотных точечных траекторий.
- 📊 Уникальный бенчмарк MoveBench для оценки движений.
📌 GitHub: https://github.com/ali-vilab/Wan-Move
#python
Wan-Move представляет собой инновационную платформу для генерации видео с управлением движением, обеспечивая высокое качество и точность. Используя новаторское руководство по латентным траекториям, проект позволяет создавать 5-секундные видео с точным контролем на уровне объектов, интегрируясь с существующими моделями без изменений архитектуры.
🚀 Основные моменты:
- 🎯 Высококачественная генерация видео 480p с SOTA контролем движений.
- 🧩 Новая методология латентного управления траекторией.
- 🕹️ Точный контроль движений объектов с помощью плотных точечных траекторий.
- 📊 Уникальный бенчмарк MoveBench для оценки движений.
📌 GitHub: https://github.com/ali-vilab/Wan-Move
#python
❤2👍1🔥1