Pystan
Pystan — это python-обёртка для Stan, которая позволяет использовать методы байесовского статистического вывода.
Основные возможности
— Простой интерфейс для задания байесовских моделей на языке
— Автоматическая компиляция моделей в высокооптимизированный код на C++.
— Выполнение статистического вывода с использованием методов Монте-Карло (MCMC).
— Возможность задавать сложные иерархические модели.
— Удобные инструменты для анализа результатов моделирования.
— Интеграция со многими библиотеками данных и визуализации в Python.
Pystan — это python-обёртка для Stan, которая позволяет использовать методы байесовского статистического вывода.
Основные возможности
Pystan:— Простой интерфейс для задания байесовских моделей на языке
Stan.— Автоматическая компиляция моделей в высокооптимизированный код на C++.
— Выполнение статистического вывода с использованием методов Монте-Карло (MCMC).
— Возможность задавать сложные иерархические модели.
— Удобные инструменты для анализа результатов моделирования.
— Интеграция со многими библиотеками данных и визуализации в Python.
Pystan используется везде, где нужно решать задачи статистического моделирования и анализа данных с помощью байесовских методов.Библиотека cvxpy
cvxpy — эта библиотека позволяет описывать оптимизационные задачи в высокоуровневом виде и эффективно решать их с помощью численных методов.
Основные возможности
— Удобный синтаксис для задания целевой функции и ограничений в виде выражений Python.
— Поддержка разных типов переменных: вещественных, целочисленных, булевых.
— Возможность задания неравенств и равенств как ограничений.
— Встроенные функции для задания норм, статистических величин и других полезных выражений.
— Автоматический выбор подходящего численного решателя на основе задачи.
— Интеграция с
cvxpy — эта библиотека позволяет описывать оптимизационные задачи в высокоуровневом виде и эффективно решать их с помощью численных методов.
Основные возможности
cvxpy:— Удобный синтаксис для задания целевой функции и ограничений в виде выражений Python.
— Поддержка разных типов переменных: вещественных, целочисленных, булевых.
— Возможность задания неравенств и равенств как ограничений.
— Встроенные функции для задания норм, статистических величин и других полезных выражений.
— Автоматический выбор подходящего численного решателя на основе задачи.
— Интеграция с
NumPy, SciPy и другими популярными библиотеками.cvxyp часто используется для решения задач оптимизации в машинном обучении, обработке сигналов, финансовом моделировании и других областях.#вопросы_с_собеседований
Для чего нужен модуль operator?
Модуль operator предоставляет функции, которые соответствуют встроенным операторам языка.
Например, функции add(), sub(), mul() и другие реализуют арифметические операторы +, -, *.
Основные причины использования модуля operator:
— Возможность передавать функции в качестве аргументов или возвращаемых значений других функций. Например, в sorted(), min(), max() и др.
— Оптимизация производительности за счет использования функций вместо выражений. Функции заранее компилируются.
— Удобство использования при работе с изменяемыми операторами. Можно легко передать нужный оператор в функцию.
— Дополнительные возможности, например, operator.itemgetter() и operator.attrgetter() для извлечения элементов из объектов.
Для чего нужен модуль operator?
Например, функции add(), sub(), mul() и другие реализуют арифметические операторы +, -, *.
Основные причины использования модуля operator:
— Возможность передавать функции в качестве аргументов или возвращаемых значений других функций. Например, в sorted(), min(), max() и др.
— Оптимизация производительности за счет использования функций вместо выражений. Функции заранее компилируются.
— Удобство использования при работе с изменяемыми операторами. Можно легко передать нужный оператор в функцию.
— Дополнительные возможности, например, operator.itemgetter() и operator.attrgetter() для извлечения элементов из объектов.
#вопросы_с_собеседований
Что такое каррирование?
Каррирование — это техника преобразования функции с несколькими аргументами в цепочку функций, каждая из которых принимает только один аргумент.
Это позволяет зафиксировать некоторые аргументы функции и создать новую функцию с меньшим количеством аргументов.
Каррирование часто используется в функциональном программировании для создания более гибких и переиспользуемых функций.
Оно помогает избежать дублирования кода и упростить работу с функциями высшего порядка.
Что такое каррирование?
Это позволяет зафиксировать некоторые аргументы функции и создать новую функцию с меньшим количеством аргументов.
Каррирование часто используется в функциональном программировании для создания более гибких и переиспользуемых функций.
Оно помогает избежать дублирования кода и упростить работу с функциями высшего порядка.
Библиотека qiskit
Qiskit — это библиотека для работы с квантовыми вычислениями и квантовым программированием на Python.
Она позволяет реализовывать и тестировать квантовые алгоритмы на компьютере.
Основные возможности
— Создание и симуляция квантовых цепей.
— Работа с квантовыми алгоритмами (Гровера, Шора, квантовое Фурье-преобразование и др.).
— Оптимизация и компиляция квантовых программ.
— Интеграция с реальным квантовым оборудованием (квантовыми процессорами).
— Визуализация и анализ квантовых цепей.
Qiskit — это библиотека для работы с квантовыми вычислениями и квантовым программированием на Python.
Она позволяет реализовывать и тестировать квантовые алгоритмы на компьютере.
Основные возможности
Qiskit:— Создание и симуляция квантовых цепей.
— Работа с квантовыми алгоритмами (Гровера, Шора, квантовое Фурье-преобразование и др.).
— Оптимизация и компиляция квантовых программ.
— Интеграция с реальным квантовым оборудованием (квантовыми процессорами).
— Визуализация и анализ квантовых цепей.
Библиотека scikit-image
scikit-image — это библиотека для обработки изображений.
Библиотека содержит множество полезных инструментов для работы с изображениями, включая:
— Фильтрация и преобразования изображений (размытие, поворот, масштабирование и т. д.).
— Сегментация изображений и анализ регионов.
— Обнаружение особых точек и линий (краев, углов, границ).
— Морфологические операции.
— Анализ текстур и цветов.
— Восстановление изображений и удаление шумов.
scikit-image — это библиотека для обработки изображений.
scikit-image также удобна для применения в задачах компьютерного зрения.Библиотека содержит множество полезных инструментов для работы с изображениями, включая:
— Фильтрация и преобразования изображений (размытие, поворот, масштабирование и т. д.).
— Сегментация изображений и анализ регионов.
— Обнаружение особых точек и линий (краев, углов, границ).
— Морфологические операции.
— Анализ текстур и цветов.
— Восстановление изображений и удаление шумов.
Моржовый оператор (Walrus Operator)
Моржовый оператор (Walrus operator) — это оператор :=, введенный в версии 3.8. Он позволяет одновременно присвоить значение переменной и вернуть его.
Синтаксис выглядит так:
Переменная доступна в остальной части выражения после оператора.
Это удобно при работе с выражениями со сложными вложенными операциями. Позволяет избежать повторного вычисления.
#это_база
Моржовый оператор (Walrus operator) — это оператор :=, введенный в версии 3.8. Он позволяет одновременно присвоить значение переменной и вернуть его.
Синтаксис выглядит так:
имя_переменной := выражение. Справа вычисляется выражение и присваивается переменной слеваПеременная доступна в остальной части выражения после оператора.
Это удобно при работе с выражениями со сложными вложенными операциями. Позволяет избежать повторного вычисления.
#это_база
Инкапсуляция
Инкапсуляция — это принцип ограничения доступа к части реализации объекта от внешнего кода.
Это позволяет предотвратить непреднамеренное изменение внутреннего состояния объекта.
В Python инкапсуляция реализуется с помощью:
— Префикса
— Двойного префикса
Свойств (
#это_база
Инкапсуляция — это принцип ограничения доступа к части реализации объекта от внешнего кода.
Это позволяет предотвратить непреднамеренное изменение внутреннего состояния объекта.
В Python инкапсуляция реализуется с помощью:
— Префикса
_ в именах атрибутов и методов класса. Это сигнализирует, что они предназначены только для внутреннего использования в классе.— Двойного префикса
__ в именах атрибутов методов (например, __private_method). Такая запись делает их недоступными извне класса.Свойств (
property) для контролируемого доступа к атрибутам класса.#это_база
PySnooper
PySnooper — это библиотека для отладки, которая позволяет логгировать каждую строку выполняемого кода вместе со значениями переменных. Она полезна, когда нужно понять, как работает код и где происходят изменения переменных.
Для использования необходимо декорировать функцию, которую нужно отладить с помощью
Результат использования pysnooper предоставлен на изображении.
PySnooper — это библиотека для отладки, которая позволяет логгировать каждую строку выполняемого кода вместе со значениями переменных. Она полезна, когда нужно понять, как работает код и где происходят изменения переменных.
Для использования необходимо декорировать функцию, которую нужно отладить с помощью
@pysnooper.snoop(). Вид лога можно настроить с помощью параметров: variables — какие переменные отображать, depth — максимальная вложенность структур данных, prefix — префикс для каждой строки лога.Результат использования pysnooper предоставлен на изображении.
Boltons.iterutils
Boltons — это набор из более чем 230 утилит на чистом Python, распространяемых по лицензии BSD, которые дополняют стандартную библиотеку. А iterutils — модуль, который предоставляет множество полезных функций для работы с итераторами.
В примере мы используем следующие функции:
- chunked: разделяет список на чанки заданного размера.
- windowed: возвращает скользящее окно заданного размера из списка.
- pairwise: возвращает пары соседних элементов из списка.
- split: разделяет список на две части по заданному условию.
- split_at: разделяет список на две части по заданному индексу.
Boltons — это набор из более чем 230 утилит на чистом Python, распространяемых по лицензии BSD, которые дополняют стандартную библиотеку. А iterutils — модуль, который предоставляет множество полезных функций для работы с итераторами.
В примере мы используем следующие функции:
- chunked: разделяет список на чанки заданного размера.
- windowed: возвращает скользящее окно заданного размера из списка.
- pairwise: возвращает пары соседних элементов из списка.
- split: разделяет список на две части по заданному условию.
- split_at: разделяет список на две части по заданному индексу.
Дана входная строка s, необходимо изменить порядок слов в строке на противоположный.
Слово определяется как последовательность символов, не содержащих пробелов. Слова в s будут разделены как минимум одним пробелом.
Вернуть строку, состоящую из слов в обратном порядке, объединенных одним пробелом.
*s может содержать начальные или конечные пробелы, а также несколько пробелов между двумя словами. Возвращаемая строка должна содержать только один пробел, разделяющий слова.
Чтобы решить данную задачу нам необходимо:
- Удалить начальные и конечные пробелы, а также уменьшить количество пробелов между словами до одного.
- Разбить строку на отдельные слова и сохранить в списке.
- Поменять порядок слов в списке на обратный с помощью метода reverse().
- Объединить слова в строку, разделенную одним пробелом, и вернуть результат.
#разбор_кода
Слово определяется как последовательность символов, не содержащих пробелов. Слова в s будут разделены как минимум одним пробелом.
Вернуть строку, состоящую из слов в обратном порядке, объединенных одним пробелом.
*s может содержать начальные или конечные пробелы, а также несколько пробелов между двумя словами. Возвращаемая строка должна содержать только один пробел, разделяющий слова.
Чтобы решить данную задачу нам необходимо:
- Удалить начальные и конечные пробелы, а также уменьшить количество пробелов между словами до одного.
- Разбить строку на отдельные слова и сохранить в списке.
- Поменять порядок слов в списке на обратный с помощью метода reverse().
- Объединить слова в строку, разделенную одним пробелом, и вернуть результат.
#разбор_кода
#вопросы_с_собеседований
Можно ли создать словарь с упорядоченным набором ключей в Python ниже 3.7?
Начиная с версии Python 3.7, порядок вставки ключей сохраняется, и вы можете создать словарь с упорядоченным набором ключей.
Чтобы создать такой словарь на версиях ниже чем 3.7, вы можете использовать collections.OrderedDict.
collections.OrderedDict сохраняет порядок добавления элементов, а также предоставляет два дополнительных метода:
— .popitem() удаляет элемент с начала или конца OrderedDict;
— .move_to_end() перемещает элемент в начало или конец OrderedDict.
Можно ли создать словарь с упорядоченным набором ключей в Python ниже 3.7?
Чтобы создать такой словарь на версиях ниже чем 3.7, вы можете использовать collections.OrderedDict.
collections.OrderedDict сохраняет порядок добавления элементов, а также предоставляет два дополнительных метода:
— .popitem() удаляет элемент с начала или конца OrderedDict;
— .move_to_end() перемещает элемент в начало или конец OrderedDict.
Перегрузка операторов сравнения
Перегрузка операторов сравнения позволяет определить поведение операторов сравнения (таких как ==, !=, <, >, <= и >=) для экземпляров пользовательских классов. Это может быть полезно, когда вы хотите сравнивать объекты на основе определенных атрибутов или свойств.
В этом примере мы определяем класс Person с атрибутами name и age. Затем мы перегружаем операторы сравнения, чтобы они сравнивали объекты Person на основе их возраста. Например, оператор == возвращает True, если возраст двух объектов Person равен, иначе возвращает False.
#это_база
Перегрузка операторов сравнения позволяет определить поведение операторов сравнения (таких как ==, !=, <, >, <= и >=) для экземпляров пользовательских классов. Это может быть полезно, когда вы хотите сравнивать объекты на основе определенных атрибутов или свойств.
В этом примере мы определяем класс Person с атрибутами name и age. Затем мы перегружаем операторы сравнения, чтобы они сравнивали объекты Person на основе их возраста. Например, оператор == возвращает True, если возраст двух объектов Person равен, иначе возвращает False.
#это_база
Starlette
Starlette — это легковесный ASGI фреймворк/набор инструментов, который идеально подходит для создания асинхронных веб-сервисов на Python.
Он готов к использованию в продакшене и предлагает следующие возможности:
- легковесный, низкосложный HTTP веб-фреймворк;
- поддержка WebSocket;
- фоновые задачи в процессе;
- события запуска и остановки;
- тестовый клиент, построенный на httpx.
В этом примере создается приложение Starlette с одним маршрутом, который обрабатывается функцией homepage. Эта функция возвращает JSON-ответ с сообщением “Hello, world”.
Чтобы запустить это приложение, необходимо установить ASGI-сервер, например uvicorn, и выполнить следующую команду: uvicorn example:app, где example — это имя файла с кодом приложения, а app — имя переменной с экземпляром приложения Starlette.
Starlette — это легковесный ASGI фреймворк/набор инструментов, который идеально подходит для создания асинхронных веб-сервисов на Python.
Он готов к использованию в продакшене и предлагает следующие возможности:
- легковесный, низкосложный HTTP веб-фреймворк;
- поддержка WebSocket;
- фоновые задачи в процессе;
- события запуска и остановки;
- тестовый клиент, построенный на httpx.
В этом примере создается приложение Starlette с одним маршрутом, который обрабатывается функцией homepage. Эта функция возвращает JSON-ответ с сообщением “Hello, world”.
Чтобы запустить это приложение, необходимо установить ASGI-сервер, например uvicorn, и выполнить следующую команду: uvicorn example:app, где example — это имя файла с кодом приложения, а app — имя переменной с экземпляром приложения Starlette.
#вопросы_с_собеседований
Как решить проблему конфликта зависимостей?
Конфликт зависимостей может возникнуть, когда два разных пакета требуют разные версии одной и той же зависимости.
Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.
При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.
Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
Как решить проблему конфликта зависимостей?
Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.
При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.
Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
TPOT
TPOT (Tree-based Pipeline Optimization Tool) — это библиотека с открытым исходным кодом для автоматизированного машинного обучения (AutoML). Она использует популярную библиотеку Scikit-Learn для преобразования данных и алгоритмов машинного обучения.
Один из примеров использования TPOT — это автоматическое создание и оптимизация конвейера машинного обучения. Выше предоставлен пример кода, который демонстрирует, как использовать TPOT для этой цели:
В этом примере мы импортируем класс TPOTClassifier и загружаем набор данных iris из библиотеки Scikit-Learn. С помощью функции train_test_split мы разделяем набор данных на обучающий и тестовый.
Далее создается экземпляр классификатора TPOT с заданными параметрами generations, population_size и verbosity. Классификатор обучается с помощью метода fit и оценивается с помощью метода score.
В конце оптимизированный конвейер экспортируется в виде скрипта Python с помощью метода export.
TPOT (Tree-based Pipeline Optimization Tool) — это библиотека с открытым исходным кодом для автоматизированного машинного обучения (AutoML). Она использует популярную библиотеку Scikit-Learn для преобразования данных и алгоритмов машинного обучения.
Один из примеров использования TPOT — это автоматическое создание и оптимизация конвейера машинного обучения. Выше предоставлен пример кода, который демонстрирует, как использовать TPOT для этой цели:
В этом примере мы импортируем класс TPOTClassifier и загружаем набор данных iris из библиотеки Scikit-Learn. С помощью функции train_test_split мы разделяем набор данных на обучающий и тестовый.
Далее создается экземпляр классификатора TPOT с заданными параметрами generations, population_size и verbosity. Классификатор обучается с помощью метода fit и оценивается с помощью метода score.
В конце оптимизированный конвейер экспортируется в виде скрипта Python с помощью метода export.
Декоратор
Один из распространенных способов использования методов класса — это создание фабричных методов, которые возвращают новые экземпляры класса.
В этом примере мы определяем класс MyClass с методом __init__, который принимает один аргумент value. Затем определяем метод класса from_string, который принимает строку и преобразует ее в целое число с помощью функции int. Метод возвращает новый экземпляр класса MyClass, созданный с помощью переданного значения.
Метод класса определяется с помощью декоратора
#это_база
@classmethod
Декоратор @classmethod используется для создания методов класса. Метод класса — это метод, который привязан к классу, а не к его экземпляру. Это означает, что вы можете вызвать метод класса на самом классе, а не на его экземпляре.Один из распространенных способов использования методов класса — это создание фабричных методов, которые возвращают новые экземпляры класса.
В этом примере мы определяем класс MyClass с методом __init__, который принимает один аргумент value. Затем определяем метод класса from_string, который принимает строку и преобразует ее в целое число с помощью функции int. Метод возвращает новый экземпляр класса MyClass, созданный с помощью переданного значения.
Метод класса определяется с помощью декоратора
@classmethod и принимает первым аргументом ссылку на сам класс (обычно называемую cls). Внутри метода мы используем эту ссылку для создания и возврата нового экземпляра класса.#это_база
Сортировка списков
В Python есть два способа сортировки списка: встроенный метод списка list.sort() и встроенная функция sorted(). Вот в чем заключается их отличие:
- Функция sorted() принимает итерируемый объект и возвращает новый отсортированный список, не изменяя исходный.
- Метод list.sort() сортирует список на месте, то есть изменяет исходный список.
#это_база
В Python есть два способа сортировки списка: встроенный метод списка list.sort() и встроенная функция sorted(). Вот в чем заключается их отличие:
- Функция sorted() принимает итерируемый объект и возвращает новый отсортированный список, не изменяя исходный.
- Метод list.sort() сортирует список на месте, то есть изменяет исходный список.
#это_база
Прогресс выполнения программы
Индикаторы прогресса добавляют наглядности в скриптах, которые исполняют какие-то функции, требующие времени для выполнения. Модуль
Привычный
Индикаторы прогресса добавляют наглядности в скриптах, которые исполняют какие-то функции, требующие времени для выполнения. Модуль
tqdm является простым и лаконичным вариантом.Привычный
range можно заменить на trange для визуализации прогресса. А для итерации по какой-либо последовательности достаточно просто передать её в функцию tqdm. Также модуль хорошо себя зарекомендовал и в Jupyter Notebook.#вопросы_с_собеседований
Напишите функцию, которая будет принимать два списка чисел (вложенный и обычный) и проверять, все ли числа в подсписках вложенного принадлежат множеству чисел второго, обычного списка
Примечания:
1) пустой список считаем валидным подмножеством множества чисел второго списка
2) в каждом отдельном списке (как во вложенных, так и во втором, обычном списке) числа будут уникальными.
Напишите функцию, которая будет принимать два списка чисел (вложенный и обычный) и проверять, все ли числа в подсписках вложенного принадлежат множеству чисел второго, обычного списка
Примечания:
1) пустой список считаем валидным подмножеством множества чисел второго списка
2) в каждом отдельном списке (как во вложенных, так и во втором, обычном списке) числа будут уникальными.