#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
Simplifying the Python Code for Data Engineering Projects
Оригинальная статья (10 min read)

Стоит прочитать или нет? Сделали краткое содержание 🙌


Статья исследует различные техники и лучшие практики для повышения эффективности и читаемости кода на Python в проектах по обработке данных. Она охватывает важные аспекты, такие как ввод данных, их проверка, обработка и тестирование конвейера, используя встроенные функции и библиотеки Python.

Ввод данных
📌 Использование yield для обработки больших наборов данных: yield позволяет создавать генераторы, которые возвращают по одному элементу за раз вместо загрузки всех данных в память. Это особенно полезно при работе с большими наборами данных, так как позволяет экономить память и ускорять процесс обработки данных.

📌 Обработка данных частями: Вместо того чтобы загружать все данные сразу, можно обрабатывать их порциями (batch processing). Это помогает избежать проблем с памятью и позволяет начать обработку данных до завершения их полной загрузки.

Проверка данных
📌 Использование библиотеки Pydantic для проверки полей данных: Pydantic позволяет определить схему данных с использованием моделей Python. Эти модели используются для проверки данных на соответствие заданным правилам и форматам, что помогает обеспечить их целостность и точность.

📌 Реализация пользовательских правил проверки: Pydantic поддерживает создание пользовательских валидаторов, которые могут проверять значения полей на соответствие определенным критериям (например, допустимым значениям платежных методов). Это позволяет дополнительно контролировать качество данных.

Обработка данных
📌 Применение декораторов Python для измерения времени выполнения: Декораторы позволяют оборачивать функции дополнительным функционалом без изменения их исходного кода. Например, можно создать декоратор для измерения времени выполнения функций, что помогает выявлять узкие места и оптимизировать производительность.

📌 Использование функциональных методов программирования (map, filter, reduce):
- map применяется для выполнения одной и той же операции над всеми элементами списка (например, добавление суффикса к значениям платежных методов).
- filter позволяет отфильтровать элементы списка, которые соответствуют определенным условиям (например, оставить только записи с платежным методом "Cryptocurrency").
- reduce используется для получения единственного значения из списка (например, суммирование всех значений).

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

📌 Проверка качества выходных данных и обнаружение ошибок: Тестирование помогает выявлять логические ошибки и несоответствия на ранних стадиях разработки. Это особенно важно для сложных конвейеров данных, где ошибки могут быть трудно обнаружимыми.

Лучшие практики
📌 Поддержка ясного и модульного кода:
Структурированный и модульный код облегчает его понимание, поддержку и масштабирование. Разделение кода на логические модули и функции помогает управлять сложностью проекта.

📌 Интеграция тестирования и проверки данных: Тестирование и проверка данных должны быть неотъемлемой частью рабочего процесса. Это помогает обеспечить высокое качество данных и надежность работы системы в целом.


#почитать
На днях мне подкинули интересный канал https://t.me/press_any_button , рекомендую присмотреться, особенно начинающим разработчикам 🐍

Авторы публикуют различные гайды по python, разработке на django, использованию docker, написанию ботов с aiogram и по другим темам. Так же разбирают различные задачи на python. Описание контента в одном посте можно посмотреть тут https://t.me/press_any_button/738 👈

Для тех кто только начинает своей погружение в мир разработки, рекомендую начать читать канал с самых первых постов, можно последовательно пройти через уроки разработки сайтов с самого нуля 🎓, если вам подходит django.
# Материалы к докладу на PYCON RUSSIA: "Долгая дорога к JIT"

Уже завтра стартует pycon, а я как обычно в последний день переделываю весь доклад 😂. Выкладываю материалы по докладу для зрителей. Завтра после выступления выложу в канал презентацию, но полноценные видео записи придется какое-то время подождать.

## Про cpython и байткод

- Афонасьев Евгений - А побыстрее можно? - доклад про оптимизации в работе с байтокодом, в рамках него я подробно рассказываю, что такое байткод и как с ним работает cpython (ru)
- Афонасьев Евгений - адаптируйся или умри - в рамках доклада подробно разбирается, как работает Specializing Adaptive Interpreter (ru)

## Про JIT в целом

- разбор базовых приемов для JIT на примере простой С программы (ru)
- пример написания JIT для brainfuck и не только (eng)
- пример написания jit для lua (eng)

## Изменения в python последних лет

- как выглядит DSL для байткода в исходном коде cpython (eng)
- спецификация DSL для байткода (eng)
- ранний дизайн tier2 оптимизатора (uops) (eng)
- PEP 669 – Low Impact Monitoring for CPython (eng)
- PEP 689 – Unstable C API tier (eng)

## PEP 744 – JIT Compilation

- Brandt Bucher – A JIT Compiler for CPython презентация для кор девелоперов (eng)
- JIT в Python | Никита Соболев доклад от core developer (ru)
- PR с добавлением JIT (eng)
- PEP про JIT, написанный и принятый уже после мержа изменений (eng)
- обсуждение PEP (eng)
- научная публикация про copy-and-patch jit (eng)
- хорошая статья с простым разъяснением нового JIT в python (eng)

#pycon
Выложили в паблик полный плейлист докладов с ekbpy 🔥

От себя рекомендую ознакомиться с докладами

🤜 Николай Марков - Управление пакетами - хорошее, плохое, злое? - основательный исторический обзор инструментов управления пакетами в python, какими они были, какие они сейчас?
🤜 Александр Гончаров. Чистый код: антипаттерны в питоне, и как с ними бороться - бодро, весело, задорно про типичные антипаттерны, хорошая подача, юмор
🤜 Аль Амин Ужахов. Как внутри работает Litestar? - про интересные особенности внутреннего устройства фреймворка

#ekbpy
https://peps.python.org/pep-0751/

Вы не ждали и не просили, но он пришел. Очередной pep про стандартный формат lock файлов для фиксации версий транзитивных зависимостей в python. Автор уже давно бьется за право принять подобный pep, и может быть в этот раз ему сопутствует удача. Все же лютый зоопарк решений (poentry, pipenv, pdm, rye) пора уже привести к какому-то общему знаменателю.

Пример нового формата
PEP 665 – A file format to list Python dependencies for reproducibility of an application - последний откланенный pep от этого же автора
Forwarded from Zen of Python
В Python слишком много менеджеров пакетов?

В отличие от JavaScript, C#, Dart или Rust, где есть стандартизированные менеджеры пакетов типа npm, NuGet, pub или Cargo, Python стандарты обошли стороной. У него есть целый ворох менеджеров, например, pip, venv, conda и др.

Хорошо это или плохо? Автор этой статьи попробовал разобраться в этом вопрос, попутно разобрав популярные менеджеры для Python:

https://dublog.net/blog/so-many-python-package-managers/

А вы за обилие вариантов или мечтаете о стандартизации?
Forwarded from Zen of Python
Как писать чистый код на Python. Советы разработчикам

Написав несколько проектов, вы заметите, что использование паттернов и правил написания кода действительно упрощает разработку и дальнейшую поддержку. А если работаете с кем-то, то без этого вообще никуда.

В этой статье вы узнаете, что такое PEP8, poetry, как создавать архитектуру python-приложения, какие существуют методологии Driven Development и как писать чистый код на Python.

#советы #чистыйкод
Forwarded from Zen of Python
Асинхронность, многопоточность и многопроцессность в python

Хоть Python пока и не стал по-настоющему многопоточным, как нам обещают в Python 3.13, кое-что он всё же может.

С помощью этого видео вы сможете разобраться в том:

— что такое асинхронное программирование;
— какие есть виды многозадачности при проектировании приложения;
— узнать про процессы, потоки и асинхронный код.

https://youtu.be/_4QY1nGFRY8

#видео #многопоточность
Forwarded from Zen of Python
В Python слишком много менеджеров пакетов?

В отличие от JavaScript, C#, Dart или Rust, где есть стандартизированные менеджеры пакетов типа npm, NuGet, pub или Cargo, Python стандарты обошли стороной. У него есть целый ворох менеджеров, например, pip, venv, conda и др.

Хорошо это или плохо? Автор этой статьи попробовал разобраться в этом вопрос, попутно разобрав популярные менеджеры для Python:

https://dublog.net/blog/so-many-python-package-managers/

А вы за обилие вариантов или мечтаете о стандартизации?
Forwarded from Zen of Python
Как писать чистый код на Python. Советы разработчикам

Написав несколько проектов, вы заметите, что использование паттернов и правил написания кода действительно упрощает разработку и дальнейшую поддержку. А если работаете с кем-то, то без этого вообще никуда.

В этой статье вы узнаете, что такое PEP8, poetry, как создавать архитектуру python-приложения, какие существуют методологии Driven Development и как писать чистый код на Python.

#советы #чистыйкод
Forwarded from Zen of Python
Асинхронность, многопоточность и многопроцессность в python

Хоть Python пока и не стал по-настоющему многопоточным, как нам обещают в Python 3.13, кое-что он всё же может.

С помощью этого видео вы сможете разобраться в том:

— что такое асинхронное программирование;
— какие есть виды многозадачности при проектировании приложения;
— узнать про процессы, потоки и асинхронный код.

https://youtu.be/_4QY1nGFRY8

#видео #многопоточность
Forwarded from Data Whisperer
Линтеры в Python

В python много линтеров на любой вкус и цвет, выбирай какой нравится и настраивай под себя.
Но наверное самым жестким является wemake-python-styleguide
У них даже на главной странице заявлено

Welcome to the strictest and most opinionated Python linter ever.

Основным кнтрибьютором проекта является Никита Соболев, у которого есть крутой курс Типизация в Python.

Дата Инженеры не так сильно упарываются в линтеры и CI как бэкендеры, но все чаще это присутсвует в новых проектах.

Посмотрим на примере Airflow и TaskFlow API.

Берем код с сайта Astranomer и запускаем линтер с настройками из коробки.
Если не брать во внимание простые ворнинги типа:

- Q000 Double quotes found but single quotes preferred
- W292 no newline at end of file

То стоит посмотреть на следующий ворниг:
- WPS430 Found nested function: extract_bitcoin_price


@dag(schedule="@daily", start_date=datetime(2021, 12, 1), catchup=False)
def taskflow():
@task(task_id="extract", retries=2)
def extract_bitcoin_price() -> Dict[str, float]:
return requests.get(API).json()["bitcoin"]


Получается, нужно переписывать большую часть дага, чтобы линтеры прошли.

Теперь попробуем традиционный синтаксис написания дага (переключаем вкладку на сайте astronomer на Traditional syntax).
И получаем другой интересный ворнинг:

- WPS428 Found statement that has no effect


extract_bitcoin_price >> process_data >> store_data


Всем знакомый синтаксис обьявления зависимомтей в airflow тоже не проходит линтер.
Получается, чтобы линтеры прошли нужно комбинировать оба варианта синтаксиса в Airflow.

Линтеры безусловно нужны, но нужно понимать, что линтер настраиваится под проект, а не наоборот.
Перед внедрением линтеров в свой проект обязательно обсудити с командой, какие проверки вам необходимы, а от каких можно отказаться.
Хороший пример был приведен выше с Airflow, все примеры кода тестировал с оффициального сайта Airflow и Astronomer
Forwarded from Data Whisperer
И в догонку пятничное про линтеры для Python Dev
История упаковки Python
• В 2000-х годах Python был популярен, но имел проблемы с упаковкой.
• В 2010-х годах появились инструменты, такие как setuptools и virtualenv, но они не решили всех проблем.
• В 2020-х годах колеса и pyproject.toml стали стандартом для упаковки Python.
Проблемы с упаковкой в 2000-х
• Python был популярен, но имел проблемы с установкой и распространением пакетов.
• Проблемы с упаковкой были связаны с отсутствием единого стандарта и сложностью установки.
Развитие инструментов упаковки
• В 2010-х годах были разработаны инструменты, такие как setuptools и virtualenv, для упрощения установки пакетов.
• Однако эти инструменты не решили всех проблем, и многие разработчики продолжали использовать setup.py.
Переход к pyproject.toml
• В 2016 году был представлен PEP 518, который предлагал единый формат для сборки проектов.
• pyproject.toml стал стандартом для управления проектами и настройки инструментов сборки.
Современное состояние упаковки
• pyproject.toml стал основным инструментом для управления проектами и настройки инструментов сборки.
• Несмотря на то, что pyproject.toml является стандартом, многие разработчики все еще используют setup.py.
Разнообразие и стандартизация
• В Python существует огромное разнообразие инструментов и подходов к упаковке.
• Стандартизация упрощает сотрудничество и устраняет трения, но может привести к более высоким затратам.
Рекомендации по упаковке
• Рекомендуется сосредоточиться на основах и использовать pyproject.toml для настройки линтеров и других инструментов.
• Для создания и распространения собственных пакетов можно использовать setuptools, но это не обязательно.
• Важно практиковать избирательное невежество и не увлекаться новыми экспериментами в области упаковки.

https://300.ya.ru/XOKLQaQ9

#ya300 #300yaru
Forwarded from Хитрый Питон
Хорошая статья про то, как устроена в питоне сборка/установка пакетов и почему именно так. Для тех, кому любопытно чуть больше погрузиться в историю - самое то. Выводы у статьи простые - используйте pyproject.toml везде, где это возможно. Я с автором в этом согласен, например у меня на работе как минимум во всех новых проектах pyproject.toml используется по умолчанию.

Ссылка - https://www.bitecode.dev/p/whats-the-deal-with-setuptools-setuppy