Получение аудиопотока с микрофона
Библиотека
В приведенном примере мы создаем объект класса
Данный объект потока позволяет считывать с устройства с помощью метода
В примере же мы просто считываем 10 секунд, после чего записываем их в аудио-файл
#pyaudio #audio
Библиотека
PyAudio
предоставляет возможности для записи аудиопотока с различных устройств. PyAudio
работает посредством кросс-платформенной библиотеки PortAudio
(поэтому необходимо заранее установить пакет разработки portaudio19-dev
).В приведенном примере мы создаем объект класса
PyAudio
и открываем поток с рядом констант для настройки аудиопотока, поступающего с микрофона (для выбора другого устройства нужно передать его номер в качестве аргумента input_device_index
). Данный объект потока позволяет считывать с устройства с помощью метода
stream.read()
. Полученную информацию мы можем использовать для дальнейшего анализа и модификации. В примере же мы просто считываем 10 секунд, после чего записываем их в аудио-файл
wav
. #pyaudio #audio
Генерация шумов Перлина
Шум перлина — это математический алгоритм по генерированию процедурной текстуры (градиентного шума) псевдо-случайным методом.
Для нас он может пригодится в разных ситуациях: от симуляции временных рядов разных показателей до генерации процедурного мира как в Minecraft.
Для Python уже существует библиотека-реализация этого алгоритма, называется она perlin-noise.
#random #perlin
Шум перлина — это математический алгоритм по генерированию процедурной текстуры (градиентного шума) псевдо-случайным методом.
Для нас он может пригодится в разных ситуациях: от симуляции временных рядов разных показателей до генерации процедурного мира как в Minecraft.
Для Python уже существует библиотека-реализация этого алгоритма, называется она perlin-noise.
pip install perlin-noise
Сначала мы создаем обьект генератора шумов, и задаем ему количество октав и seed для встроенного рандомизатора: noise = PerlinNoise(octaves=10, seed=1)
Обьявляем размер желаемой 2d матрицы: xpix, ypix = 100, 100
И используя списочное включение, генерируем 2d матрицу, где интенсивность значения от координат задает наш обьект генератора noise
: pic = [[noise([i/xpix, j/ypix]) for j in range(xpix)] for i in range(ypix)]
Пример картинки можно посмотреть в комментариях к этому посту. #random #perlin
Форматирование чисел в f-строках
Начиная с версии Python 3.6, стали доступны f-строки. Это удобный способ форматирования текста. Но не все знают, что он умеет вставлять float числа с настраиваемым количеством знаков после запятой.
Допустим у нас есть float число
#fstring
Начиная с версии Python 3.6, стали доступны f-строки. Это удобный способ форматирования текста. Но не все знают, что он умеет вставлять float числа с настраиваемым количеством знаков после запятой.
Допустим у нас есть float число
pi = 3.14159265359
. Если мы его просто скорвертируем в строку, то она примет следующий вид: >>> str(3.14159265359)
'3.14159265359'
Но что если важно выписать только до сотых долей? Делается это черех f-строку: >>> f'Число Пи это {pi:.2f}'
'Число Пи это 3.14'
После обьявления имени переменной мы вставляем следующую комбинацию: .2f
, где цифра как раз и указывает, сколько знаков после запятой нужно преобразовать в строку. Более подробно это описано в PEP 498.#fstring
Определяем координаты места по его адресу
Для работы с адресами существует удобная библиотека geopy.
Она использует публичные API (например OpenStreetMap Nominatim, Google Geocoding API и другие). Благодаря этому мы можем искать разные обьекты и их координаты по адресу.
При поиске мы можем указать как номер и улицу дома, название города, страны, так и полный адрес определенного места.
Официальную документацию можно просмотреть тут. Ознакомиться с интерактивным примером можно тут.
#geopy
Для работы с адресами существует удобная библиотека geopy.
Она использует публичные API (например OpenStreetMap Nominatim, Google Geocoding API и другие). Благодаря этому мы можем искать разные обьекты и их координаты по адресу.
При поиске мы можем указать как номер и улицу дома, название города, страны, так и полный адрес определенного места.
Официальную документацию можно просмотреть тут. Ознакомиться с интерактивным примером можно тут.
#geopy
Библиотека для работы с итераторами
Встроенный пакет
В самой библиотеке их намного больше, поэтому советую вам ознакомится с документацией. Ознакомиться с интерактивным примером можно тут.
#itertools
Встроенный пакет
itertools
содержит сборник полезных итераторов, поговорим о нескольких из них: combinations
— возвращает кортеж в отсортированном порядке без повторяемых элементов. chain
— возвращает элементы из объекта, пока он не будет исчерпан, затем переходит к следующему, используется для обработки множества последовательностей как единой. permutations
— возвращает все возможные перестановки. filterfalse
— возвращает все элементы для которых функция вернула false
. startmap
— применяет функцию к каждому элементу последовательности распаковывая его. В самой библиотеке их намного больше, поэтому советую вам ознакомится с документацией. Ознакомиться с интерактивным примером можно тут.
#itertools
Объёмы данных растут, а компании ищут новый тип сотрудников - квалифицированных инженеров данных
Сегодня роль инженера данных востребована везде, где работа с данными влияет на успех выполнения бизнес-задач. А уже в ближайшие годы мы увидим новые «гибридные» профессии, в работе которых используются технические и бизнес-компетенции.
Обучиться новой профессии можно в Школе Инженерии Данных от билайн.
За три месяца в Школе ты сможешь:
• научиться работать с основными инструментами, используемыми в чаптере инженеров данных (sql, scala, spark, airflow, ide, linux/bash, Hadoop, ci/cd);
• освоить типовые способы интеграции, обработки, хранения данных;
• узнать во время стажировки, как устроены потоки данных внутри компании;
• закрепить полученные знания, работая сначала над учебным, а потом над реальным продуктом;
• открыть для себя новые возможности, став участником одной из продуктовых команд.
Узнать больше о Школе и зарегистрироваться ты можешь уже сегодня, пройдя по ссылке. Регистрация и вступительные испытания до 6 февраля включительно. Старт Школы — 14 февраля.
Подписывайся на телеграм-канал Школы и следи за новостями программы!
Сегодня роль инженера данных востребована везде, где работа с данными влияет на успех выполнения бизнес-задач. А уже в ближайшие годы мы увидим новые «гибридные» профессии, в работе которых используются технические и бизнес-компетенции.
Обучиться новой профессии можно в Школе Инженерии Данных от билайн.
За три месяца в Школе ты сможешь:
• научиться работать с основными инструментами, используемыми в чаптере инженеров данных (sql, scala, spark, airflow, ide, linux/bash, Hadoop, ci/cd);
• освоить типовые способы интеграции, обработки, хранения данных;
• узнать во время стажировки, как устроены потоки данных внутри компании;
• закрепить полученные знания, работая сначала над учебным, а потом над реальным продуктом;
• открыть для себя новые возможности, став участником одной из продуктовых команд.
Узнать больше о Школе и зарегистрироваться ты можешь уже сегодня, пройдя по ссылке. Регистрация и вступительные испытания до 6 февраля включительно. Старт Школы — 14 февраля.
Подписывайся на телеграм-канал Школы и следи за новостями программы!
Извлечение таблиц из PDF
Camelot — это удобная библиотека, которая поможет вам извлечь любую таблицу из PDF файла.
Также есть возможность использоваться Excalibur, это веб интерфейс Camelot.
Почему вам стоит использовать Camelot:
— Каждая таблица является DataFrame;
— Возможность экспорта в множество разных форматов;
— Можно отбрасывать таблицы на основе таких метрик как точность и пробелы, без необходимости вручную просматривать таблицу.
#camelot
Camelot — это удобная библиотека, которая поможет вам извлечь любую таблицу из PDF файла.
Также есть возможность использоваться Excalibur, это веб интерфейс Camelot.
Почему вам стоит использовать Camelot:
— Каждая таблица является DataFrame;
— Возможность экспорта в множество разных форматов;
— Можно отбрасывать таблицы на основе таких метрик как точность и пробелы, без необходимости вручную просматривать таблицу.
#camelot
Синхронизация потоков
Блокировка — один из фундаментальных механизмов синхронизации в
Для каждого такого разделяемого ресурса нам нужно создать объект типа
В том случае когда нам потребуется освободить блокировку, то мы вызываем
Также все это можно заменить через оператор with. Оператор with автоматически захватывает блокировку перед входом в блок, и освобождает её после выхода.
Интерактивный пример — тут. Ссылка документация — тут.
#threading
Блокировка — один из фундаментальных механизмов синхронизации в
threading
. Зачастую блокировки используются для доступа к разделяемым ресурсам. Для каждого такого разделяемого ресурса нам нужно создать объект типа
Lock
и, когда нам потребуется доступ к ресурсу, следует вызвать acquire
, что бы взять контроль над блокировкой. В том случае когда нам потребуется освободить блокировку, то мы вызываем
release
. Стоит учесть то, что блокировку стоит освобождать даже в случае возникновения ошибок. Для этого можно использовать try-finally
. Также все это можно заменить через оператор with. Оператор with автоматически захватывает блокировку перед входом в блок, и освобождает её после выхода.
Интерактивный пример — тут. Ссылка документация — тут.
#threading
Асинхронно скачиваем файлы
Имея список ссылок на картинки, которые нужно скачать, мы можем это сделать используя простой цикл
Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.
Для этого воспользуемся функцией ThreadPoolExecutor из стандартного пакета
Далее метод
Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.
Ознакомиться с интерактивным примером можно тут.
#threading
Имея список ссылок на картинки, которые нужно скачать, мы можем это сделать используя простой цикл
for
, тем самым скачав их последовательно одна за одной. Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.
Для этого воспользуемся функцией ThreadPoolExecutor из стандартного пакета
concurrent.futures
. Она позволяет запустить нашу функцию, в нескольких екземплярах в параллельных потоках. В конструкторе необходимо указать максимальное количество потоков, которые будут одновременно запущены. Далее метод
.map(download, urls)
создает екземпляры нашей функции для скачивания файла, и раскидывает в них элементы списка urls
. Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.
Ознакомиться с интерактивным примером можно тут.
#threading
Пишете на Python или Go и хотите работать в Яндексе?
Или хотите перейти на них с другого языка программирования? Тогда приглашаем 26–27 февраля на Fast Track для бэкенд-разработчиков. На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.
FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.
Регистрируйтесь, решайте отборочный тест и до встречи 26 и 27 февраля!
Или хотите перейти на них с другого языка программирования? Тогда приглашаем 26–27 февраля на Fast Track для бэкенд-разработчиков. На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.
FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.
Регистрируйтесь, решайте отборочный тест и до встречи 26 и 27 февраля!
Воспроизводим аудиофайлы
Для этого воспользуемся кроссплатформенным пакетом playsound, который легко устанавливается через
Он содержит в себе лишь одну полезную функцию для воспроизведения аудиофайла:
В качестве параметра функции можно указать путь к
#audio
Для этого воспользуемся кроссплатформенным пакетом playsound, который легко устанавливается через
pip
. Он содержит в себе лишь одну полезную функцию для воспроизведения аудиофайла:
playsound('path/to/file.mp3')
В качестве параметра функции можно указать путь к
.mp3
или .wav
файлу, или вообще его url
. #audio
Цикл событий в Python
Цикл событий — это ядро для каждого асинхронного приложения. Он нужен для того, что бы запускать асинхронные задачи и функции обратного вызова.
Поговорим теперь о низкоуровневых методах:
Немного о методах для работы с циклами событий:
Также есть методы
Пример можете посмотреть на картинке выше. Много другого полезного вы можете прочитать в документации.
#async
Цикл событий — это ядро для каждого асинхронного приложения. Он нужен для того, что бы запускать асинхронные задачи и функции обратного вызова.
Поговорим теперь о низкоуровневых методах:
get_running_loop
— Возвращает текущий цикл событий в потоке. Если его нет, то будет RuntimeError. Может быть вызвана только с корутины или функции обратного вызова. get_event_loop
— Делает тоже самое что и функция выше, но если set_event_loop
не был вызван, то в добавок ещё закрепит новый цикл. new_event_loop
— Создает новый цикл событий. set_event_loop
— Устанавливает цикл событий для текущего потока. Немного о методах для работы с циклами событий:
run_forever
— Запускает цикл событий до тех пока stop не будет вызван. stop
— Останавливает цикл событий. Также есть методы
is_closed
и is_running
для проверки состояния. Пример можете посмотреть на картинке выше. Много другого полезного вы можете прочитать в документации.
#async
Захват экрана Windows
Существует несколько библиотек на Python для захвата экрана компьютера под управлением операционной системы Windows, но самой быстрой оказалась библиотека d3dshot.
Она использует системные библиотеки DXGI и Direct3D, чтобы обеспечить чрезвычайно быструю и надежную функциональность захвата экрана.
Её можно применить, например, в реализации игровых ботов.
Пример можно посмотреть тут.
#d3dshot
Существует несколько библиотек на Python для захвата экрана компьютера под управлением операционной системы Windows, но самой быстрой оказалась библиотека d3dshot.
Она использует системные библиотеки DXGI и Direct3D, чтобы обеспечить чрезвычайно быструю и надежную функциональность захвата экрана.
Её можно применить, например, в реализации игровых ботов.
Пример можно посмотреть тут.
#d3dshot
Генерация QR кодов
Сегодня покажем создание QR кодов. Для этого нам понадобится модуль
Все максимально просто, за нас по сути все делает уже написанный модуль.
Выше на картинке мы сделали простую функцию
За создание картинки отвечает метод
Получившийся QR код можете посмотреть тут.
#qrcode #pillow
Сегодня покажем создание QR кодов. Для этого нам понадобится модуль
qrcode
, который используется для создания изображений с QR кодом. Все максимально просто, за нас по сути все делает уже написанный модуль.
Выше на картинке мы сделали простую функцию
generate
, которая принимает какую-то информацию и название файла, в который нужно сохранить результат в виде QR кода. За создание картинки отвечает метод
qrcode.make
, который возвращает нам изображение в формате PIL.Image
, а после этого мы его сохраняем в нужном нам файле. Получившийся QR код можете посмотреть тут.
#qrcode #pillow
Работаем с картинками в Python
Библиотека Pillow — это очень мощный, быстрый и удобный инструмент для обработки графики в Python.
В сегодняшнем примере мы применим ее для конвертации картинки в черно-белую, обратим цвета, вертикально отзеркалим и сохраним в файл.
Метод
Больше официальных примеров и документацию можно посмотреть тут.
Пример можно посмотреть тут.
#pillow
Библиотека Pillow — это очень мощный, быстрый и удобный инструмент для обработки графики в Python.
В сегодняшнем примере мы применим ее для конвертации картинки в черно-белую, обратим цвета, вертикально отзеркалим и сохраним в файл.
Метод
Image.open('resources/img/cat.jpg')
считывает картинку из папки. img.convert('L')
трансформирует картинку в черно-белую. ImageOps.invert(image)
обращает цвета. img.transpose(Image.FLIP_LEFT_RIGHT)
вертикально отзеркаливает картинку. img.save('grayscale_cat.jpg')
сохранит картинку на диске. Больше официальных примеров и документацию можно посмотреть тут.
Пример можно посмотреть тут.
#pillow
Missingno
Большие грязные наборы данных и часто отсутствующие значения в них — это одна из частых проблем при работы с датасетами, и это важно отлавливать такие моменты.
Для таких целей существует Missingo — библиотека, которая имеет в себе небольшой набор простых в использовании средств для визуализации отсутствующих данных и утилит, которые позволяют быстро получить сводку полноты или отсутствия вашего набора данных.
Интерактивный пример — тут.
#Missingo
Большие грязные наборы данных и часто отсутствующие значения в них — это одна из частых проблем при работы с датасетами, и это важно отлавливать такие моменты.
Для таких целей существует Missingo — библиотека, которая имеет в себе небольшой набор простых в использовании средств для визуализации отсутствующих данных и утилит, которые позволяют быстро получить сводку полноты или отсутствия вашего набора данных.
Интерактивный пример — тут.
#Missingo
Яндекс ищет тех, кто пишет на Python или Go
А также тех, кто хочет перейти на них с другого языка программирования. Не пропустите момент и успейте зарегистрироваться на Fast Track для бэкенд-разработчиков 26–27 февраля. Отборочный этап длится до 23 февраля, спешите! На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.
FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.
Регистрируйтесь, проходите отборочный этап и до встречи 26 и 27 февраля!
А также тех, кто хочет перейти на них с другого языка программирования. Не пропустите момент и успейте зарегистрироваться на Fast Track для бэкенд-разработчиков 26–27 февраля. Отборочный этап длится до 23 февраля, спешите! На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.
FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.
Регистрируйтесь, проходите отборочный этап и до встречи 26 и 27 февраля!
Работаем с котировками акций в Python
Библиотека yfinance предоставляет мощный и удобный инструмент для получения информации с ресурса
В сегодняшнем примере применим эту библиотеку чтобы узнать цену акций Майкрософт.
Тикер Макйрософт называется "MSFT", именно его необходимо вписать в методе поиска:
— Исторические данные рынка;
— Информация по дивидентам;
— Информация о фирме (адрес, количество работников, прибыль) и т. д.
Больше подробно об этой библиотеке можно посмотреть тут.
Пример с постройкой графика истории цены на тикер тут.
#yfinance
Библиотека yfinance предоставляет мощный и удобный инструмент для получения информации с ресурса
Yahoo!
finance
в Python. В сегодняшнем примере применим эту библиотеку чтобы узнать цену акций Майкрософт.
Тикер Макйрософт называется "MSFT", именно его необходимо вписать в методе поиска:
msft = yf.Ticker("MSFT")
Цена акции находится в поле ['regularMarketPrice']
: price = msft.info['regularMarketPrice']
Кроме этого yfinance
предоставляет огромное количество такой информации о тикере как: — Исторические данные рынка;
— Информация по дивидентам;
— Информация о фирме (адрес, количество работников, прибыль) и т. д.
Больше подробно об этой библиотеке можно посмотреть тут.
Пример с постройкой графика истории цены на тикер тут.
#yfinance
Работа с ChainMap из collections
СhainMap группирует несколько словарей или других сопоставлений вместе, чтобы создать единое представление.
Иногда нам нужно сгруппировать словари в один или же работать с множеством словарей как с одним, в этом случае вам поможет ChainMap.
Немного про особенности ChainMap:
— Представляет тот же интерфейс, что и словарь, но с дополнительными возможностями;
— Создает обновляемое представление;
— Видит внешние изменения во входных отображениях.
#collections
СhainMap группирует несколько словарей или других сопоставлений вместе, чтобы создать единое представление.
Иногда нам нужно сгруппировать словари в один или же работать с множеством словарей как с одним, в этом случае вам поможет ChainMap.
Немного про особенности ChainMap:
— Представляет тот же интерфейс, что и словарь, но с дополнительными возможностями;
— Создает обновляемое представление;
— Видит внешние изменения во входных отображениях.
#collections