Python tricks | Хитрости Питона
5.83K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Как работать с транзитивными зависимостями

Для работы с транзитивными зависимостями можно использовать систему управления зависимостями, например, pipenv, poetry или pip. Эти системы позволяют устанавливать зависимости и их транзитивные зависимости, а также контролировать версии зависимостей.

🔗 Python tricks
Annoy

Annoy (Approximate Nearest Neighbors Oh Yeah) — это библиотека, которая используется для поиска точек в пространстве, близких к заданной точке запроса. Она также создает большие файловые структуры данных только для чтения, которые отображаются в память, чтобы многие процессы могли использовать одни и те же данные.

В этом примере мы создаем индекс Annoy с длиной вектора элемента f и используем расстояние angular. Затем мы добавляем 1000 элементов со случайными значениями в индекс и строим его с использованием 10 деревьев. После этого мы сохраняем индекс в файл test.ann. Затем мы загружаем индекс из файла и выполняем поиск 1000 ближайших соседей для элемента с индексом 0.

Результат работы кода - список из 1000 индексов элементов, которые являются ближайшими соседями для элемента с индексом 0.

🔗 Python tricks
Auto-sklearn

Auto-sklearn — это автоматизированный инструмент машинного обучения и замена для оценщика scikit-learn. Он предназначен для автоматического обнаружения хорошо работающих моделей для задач прогнозного моделирования с минимальным участием пользователя.

В этом примере мы создаем экземпляр классификатора AutoSklearnClassifier и обучаем его на тренировочных данных X_train и y_train. Затем мы используем обученный классификатор для предсказания меток классов для тестовых данных X_test.

Результат работы кода — массив предсказанных меток классов для тестовых данных X_test.

🔗 Python tricks
VisPy

VisPy — это высокопроизводительная интерактивная библиотека визуализации данных 2D/3D. VisPy использует вычислительную мощность современных графических процессоров через библиотеку OpenGL для отображения очень больших наборов данных.

VisPy способна создавать высококачественные интерактивные научные графики с миллионами точек.

В этом примере мы создаем данные для точечного графика с N точками и цветами. Затем мы создаем канвас и добавляем на него точечный график с помощью класса Markers. Наконец, мы запускаем приложение с помощью app.run().

Результат работы кода - отображение окна с интерактивным точечным графиком.

🔗 Python tricks
Объясните, что такое monkey patching и приведите пример

Monkey patching — это техника изменения поведения кода во время выполнения путем динамической замены или добавления методов или атрибутов в существующем объекте. Эта техника может быть полезна в том случае, когда изменения не могут быть внесены в существующий код, и требует минимальных изменений в существующем коде.

🔗 Python tricks
dict.items

Метод items() возвращает объект представления, который отображает список пар кортежей словаря (ключ, значение). Если список обновляется в любое время, изменения отражаются на самом объекте представления, как показано в приведенном выше примере.

🔗 Python tricks
Dask

Dask — это гибкая библиотека для параллельных вычислений. Dask состоит из двух частей: динамического планирования задач, оптимизированного для вычислений, и коллекций "больших данных", таких как параллельные массивы, фреймы данных и списки, которые расширяют общие интерфейсы, такие как NumPy, Pandas или итераторы Python, до сред больше памяти или распределенных сред.

В этом примере мы создаем массив Dask x размером 10000x10000 с чанками размером 1000x1000. Затем мы выполняем несколько операций над массивом x, включая транспонирование, срез и вычисление среднего значения. Наконец, мы вызываем метод compute() для вычисления результата.

Результат работы кода - массив NumPy со средними значениями по строкам для каждой второй строки в срезе y[::2, 5000:].

🔗 Python tricks
Catboost

CatBoost это быстрая, масштабируемая и высокопроизводительная библиотека градиентного бустинга на деревьях решений, используемая для ранжирования, классификации, регрессии и других задач машинного обучения для Python, R, Java, C++. Поддерживает вычисления на CPU и GPU.

В этом примере мы импортируем CatBoostClassifier из catboost и создаем экземпляр классификатора с определенными параметрами. Затем мы обучаем модель на тренировочных данных и метках с помощью метода fit. После обучения мы можем использовать методы predict и predict_proba для получения предсказаний классов и вероятностей соответственно.

Результат работы кода будет зависеть от входных данных. В этом примере используются случайные данные для обучения и тестирования. В реальных ситуациях данные будут отличаться.

🔗 Python tricks
LIME

LIME (Local Interpretable Model-agnostic Explanations) - это проект, который объясняет, что делают модели машинного обучения. lime поддерживает объяснения для табличных моделей, текстовых классификаторов и классификаторов изображений.

В этом примере мы загружаем данные о качестве вина и разделяем их на тренировочные и тестовые. Затем мы обучаем модель RandomForestClassifier на тренировочных данных. Далее мы создаем объект LimeTabularExplainer из библиотеки lime, который используется для интерпретации предсказаний модели. Мы выбираем индекс объекта из тестовых данных и используем метод explain_instance для получения объяснения предсказания модели для этого объекта.

🔗 Python tricks
H2Oai

H2O.ai предоставляет модуль Python, который дает доступ к H2O JVM, а также к его расширениям, объектам, алгоритмам машинного обучения и возможностям поддержки моделирования, таким как базовое преобразование данных и генерация признаков.

H2O JVM предоставляет веб-сервер, чтобы все общение происходило через сокет (указанный IP-адресом и портом) с помощью серии вызовов REST.

В этом примере мы импортируем H2OGradientBoostingEstimator из библиотеки h2o и инициализируем H2O с помощью init. Затем загружаем данные и разделяем их на тренировочные и тестовые. Далее мы определяем признаки и целевую переменную для обучения модели.

Затем мы создаем экземпляр H2OGradientBoostingEstimator и обучаем его на тренировочных данных с помощью метода train. После обучения мы можем использовать метод model_performance для оценки качества модели на тестовых данных.

🔗 Python tricks
Объясните, почему такое возможно

Это возможно из-за того, что Python имеет функцию под названием «name mangling», которая изменяет имена атрибутов класса или методов путем добавления двойного подчеркивания «__» в начале их имен. Это сделано для того, чтобы предотвратить случайное переименование атрибутов в подклассах, которые будут унаследованы суперклассом.

🔗 Python tricks
SHAP

SHAP (SHapley Additive exPlanations) — это игровой подход к объяснению вывода любой модели машинного обучения. Он соединяет оптимальное распределение кредитов с локальными объяснениями, используя классические значения Шэпли из теории игр и связанные с ними расширения.

В этом примере мы загружаем модель бостон и разделяем ее на тренировочные и тестовые. Затем мы обучаем модель градиентного бустинга xgboost на тренировочных данных. Далее мы создаем объект Explainer из библиотеки shap, который используется для интерпретации предсказаний модели. Вызываем метод __call__ у объекта explainer с тестовыми данными в качестве аргумента для получения значений SHAP для этих данных.

🔗 Python tricks
Что такое магические методы dunder

Магические методы, также известные как «dunder» (double underscore) методы в Python, это специальные методы, которые начинаются и заканчиваются двойным подчеркиванием. Они позволяют определить, как объекты этого класса будут вести себя в различных контекстах, например, при использовании операторов Python, таких как +, -, *, / и т.д., при вызове функций и методов, при сериализации и многое другое.

🔗 Python tricks
Перечисление

Функция enumerate() добавляет счетчик к итерируемому объекту и возвращает его в виде объекта перечисления.

Этот перечисляемый объект затем может быть использован непосредственно для циклов или преобразован в список кортежей с помощью функции list().

🔗 Python tricks
Forwarded from CyberYozh
Обзор Bespalephone rugged 0.4
Евгений Ивченков

🌐 Смотреть обзор [19:09]

К нам в руки попала актуальная модель BespalePhone. Это пятая версия телефона и четвертая версия прошивки от команды Bespale.

Все, что вам нужно знать о телефоне, можно выразить в одном предложении: «Защита от досмотра, влаги и пыли». Однако такого набора возможностей прошивки вы не встретите в One+ или Pixel.

📦 Вторая хорошая новость: вы можете стать обладателем такого смартфона бесплатно.

С 13 по 23 мая пройдет розыгрыш BespalePhone (как в обзоре) и нескольких дополнительных призов. Все, что вам нужно будет сделать, — быть подписанным на наш канал и на канал BespalePhone. Подробности завтра 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Как начать отладку при утечке памяти в рабочем приложении

Для отладки утечек памяти в Python можно использовать инструменты, такие как Memory Profiler или objgraph.

Запустите вашу программу с помощью команды python -m memory_profiler my_script.py. Будет выведен подробный отчет о том, сколько памяти используется в каждой строке программы, а также общее использование памяти и любые утечки.

Этот код создаст изображение my_list.png, на котором будут показаны все объекты, на которые ссылается my_list, а также все объекты, которые ссылается на них. Это может помочь вам понять, какие объекты держат ссылки на ваши объекты и могут вызывать утечки памяти.

🔗 Python tricks
В каких ситуациях возникает исключение NotImplementedError

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

🔗 Python tricks
Генераторные фунции (generator functions)

Если предикатов фильтрации или обработчиков элементов списка много, то удобнее использовать генераторы. Они могут не дать прироста скорости, но помогут сэкономить память.

Генераторной фунцией в python называется функция, которая ведет себя как итератор. Для определения генераторной функции нужно использовать ключевое слово yield.

🔗 Python tricks
NumPy: Срезы

Срезы (slicing) — это способ выбора подмножества элементов из массива. Ты можешь использовать срезы для доступа к определенным элементам массива или для изменения значений в массиве. Результат включает начальный индекс, но исключает конечный индекс.

🔗 Python tricks
Создание и удаление объектов

Любое описание объекта в объектно-ориентированном программировании начинается с создания объекта и его удаления.

new(cls[, ...]) — метод создания типа класса. Он принимает первым аргументом тип класса, в котором он вызывается, и, как правило, возвращает этот же тип. В основном используется, чтобы настраивать создание экземпляра класса тех объектов, которые наследуются от неизменяемых типов (например, int, str, или tuple).

init(self[, ...]) — конструктор класса. Используется при определении объектов.

init_subclass(cls) — позволяет переопределить создание подклассов объекта.

🔗 Python tricks