Работа с форматированием текста
textwrap — это стандартная библиотека, которая спользуется для форматирования текста в тех случаях, когда нам нужна красивая печать.
Он предлагает функциональность аналогичную текстовым редакторам и текстовым процессорам.
Немного о возможностях:
#textwrap
textwrap — это стандартная библиотека, которая спользуется для форматирования текста в тех случаях, когда нам нужна красивая печать.
Он предлагает функциональность аналогичную текстовым редакторам и текстовым процессорам.
Немного о возможностях:
textwrap.fill()
— принимает текст и возвращает отформатированный текст, первая строка сохраняет свой отступ, а пробелы в начале каждой последующей строки вставляются в абзац.textwrap.dedent()
— используется для удаления общего префикса пробела из всех строк в тексте.textwrap.indent()
— используется для добавления текст префикса ко всем строкам в параграфе#textwrap
Работа с датасетами
Datasets — легкая и расширяемая библиотека для обмена и доступа к наборам данных (они же датасеты).
Наборы данных также предоставляют доступ к оценочным метрикам, предназначенных для того, что бы сообщество могло делиться новыми наборами данных.
Из плюсов библиотеки можно выделить следующее:
— Кэширование данных;
— Совместимость с NumPy, pandas, PyTorch, TenserFlow 2 и JAX;
— Все наборы данных отображаются в памяти.
Основные методы, которые понадобятся в работе с датасетами:
Много всего полезного об этой библиотеке вы можете найти в документации.
#Datasets
Datasets — легкая и расширяемая библиотека для обмена и доступа к наборам данных (они же датасеты).
Наборы данных также предоставляют доступ к оценочным метрикам, предназначенных для того, что бы сообщество могло делиться новыми наборами данных.
Из плюсов библиотеки можно выделить следующее:
— Кэширование данных;
— Совместимость с NumPy, pandas, PyTorch, TenserFlow 2 и JAX;
— Все наборы данных отображаются в памяти.
Основные методы, которые понадобятся в работе с датасетами:
list_dataset()
— показывает доступные датасеты;load_dataset()
— создает экземпляр датасета;list_metrics()
— показывает доступные метрики;load_metric()
— создает экземпляр метрики.Много всего полезного об этой библиотеке вы можете найти в документации.
#Datasets
Python-разработка для начинающих
Мечтаете о карьере в сфере IT — начните с Python. Этот язык рекомендуют в качестве первого языка программирования, и для начала обучения вам не понадобятся технические знания и навыки.
Программа акцентирована на практике. За 6 занятий вы освоите логику и синтаксис языка, научитесь работать с данными, изучите основные инструменты для написания кода. С нуля разработаете приложение «To do-list» и создадите чат-бота для Telegram на Python. Попробуйте ↓
https://netolo.gy/hwh
Мечтаете о карьере в сфере IT — начните с Python. Этот язык рекомендуют в качестве первого языка программирования, и для начала обучения вам не понадобятся технические знания и навыки.
Программа акцентирована на практике. За 6 занятий вы освоите логику и синтаксис языка, научитесь работать с данными, изучите основные инструменты для написания кода. С нуля разработаете приложение «To do-list» и создадите чат-бота для Telegram на Python. Попробуйте ↓
https://netolo.gy/hwh
Чтение аудио-файлов в массив numpy
Одним из основных действий в начале аудиоанализа конечно же является чтение аудио-файла и выгрузка его звукового временного ряда в виде массива
Для чтения используем функцию
В качестве примера также добавили построение в matplotlib графика сигнала по полученным значениям.
#scipy #audio
Одним из основных действий в начале аудиоанализа конечно же является чтение аудио-файла и выгрузка его звукового временного ряда в виде массива
numpy
. Для этих целей хорошо подходит модуль scipy.io.wavfile
, входящий в состав библиотеки scipy и предоставляющий функции для чтения и записи wav файлов.Для чтения используем функцию
read
, которая возвращает частоту дискретизации и массив numpy
со значениями звукового давления для каждого кадра. Т.к. файлы формата wav могут состоять из одного(моно) либо из двух(стерео) каналов, то и массив numpy будет, соответственно, являться одномерным либо двумерным (по подмассиву на каждый канал).В качестве примера также добавили построение в matplotlib графика сигнала по полученным значениям.
#scipy #audio
Пишете на Java или Python и хотите работать в Яндексе?
Тогда приглашаем 22 января на Fast Track для бэкенд-разработчиков. На мероприятии вы можете за один день пройти собеседование и получить оффер в команду HR Tech Яндекса.
HR Tech занимается интранетом Яндекса. Например, это сервисы для процесса найма в Яндекс, учебная платформа Яндекс.Контест и другие сервисы для организации работы сотрудников. Подробнее о команде здесь.
Регистрируйтесь, решайте отборочный тест и до встречи 22 января!
Регистрация: https://clck.ru/Zebfm
Тогда приглашаем 22 января на Fast Track для бэкенд-разработчиков. На мероприятии вы можете за один день пройти собеседование и получить оффер в команду HR Tech Яндекса.
HR Tech занимается интранетом Яндекса. Например, это сервисы для процесса найма в Яндекс, учебная платформа Яндекс.Контест и другие сервисы для организации работы сотрудников. Подробнее о команде здесь.
Регистрируйтесь, решайте отборочный тест и до встречи 22 января!
Регистрация: https://clck.ru/Zebfm
Вакансии: HR Tech
Работа в Яндексе. Яндекс очень разный, поэтому каждый может найти своё.
Углубляемся в Итератор
Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления.
Существует два вида итераторов: внешний,внутренний.
Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода
Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента.
Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод
Так-же у каждого итератора должна быть метод
Интерфейса итератора состоит из
#Python #Итератор
Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления.
Существует два вида итераторов: внешний,внутренний.
Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода
__next__
.Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента.
Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод
__next__
. Метод возвращает следующий элемент, если он существует, в другом случаи вернет StopIteration.Так-же у каждого итератора должна быть метод
__iter__
, он возвращает сам итератор. Интерфейса итератора состоит из
first
,next
,current
.first
— возвращает итератор к началу агрегата,что-то вроде reset.next
— переходит на следующий элемент агрегата, в случаи если нет следующего элемента, то будет StopIteration.current
— возвращает текущий элемент.#Python #Итератор
OpenCV и веб-камера
Для работы с компьютерным зрением и картинками/видео существует библиотека OpenCV.
Устанавливается она через PIP:
Команда
Строчка
Команда
Чтобы прервать работу скрипта используется проверка на нажатие определенной клавиши на клавиатуре:
#opencv
Для работы с компьютерным зрением и картинками/видео существует библиотека OpenCV.
Устанавливается она через PIP:
pip install opencv-python
.
Для простой демонстрации попробуем получить картинку с веб-камеры и вывести видео в графическое окно.Команда
cap = cv2.VideoCapture(0)
инициализирует веб-камеру (цифра указывает её индекс).Строчка
ret, frame = cap.read()
вытягивает из веб-камеры картинку в переменную frame
и статус получения картинки в ret
. Если ret
==
True
, значит все прошло успешно.Команда
cv2.imshow('webcam', frame)
создаст графическое окно с картинкой и покажет его.Чтобы прервать работу скрипта используется проверка на нажатие определенной клавиши на клавиатуре:
if cv2.waitKey(1) & 0xFF == ord('q'):
Метод cap.release()
освобождает веб-камеру из скрипта примера и позволяет ее использовать в других программах, а cv2.destroyAllWindows()
уничтожит графические окна, созданные библиотекой openCV.#opencv
Конвертируем файлы в аудио-формате
В Python мы можем решить задачу конвертации из одного аудио-формата в другой как всегда множеством способов. Наиболее приятным решением, как по мне, является использование модуля
pydub позволяет загружать, редактировать и сохранять аудио-файлы в любом формате, поддерживаемом
Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса
Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию
#audio #pydub
В Python мы можем решить задачу конвертации из одного аудио-формата в другой как всегда множеством способов. Наиболее приятным решением, как по мне, является использование модуля
pydub
, который представляет собой интерфейс-надстройку над ffmpeg
.pydub позволяет загружать, редактировать и сохранять аудио-файлы в любом формате, поддерживаемом
ffmpeg
. Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса
AudioSegment
. Также можно воспользоваться наиболее общей функцией from_file
, передав путь к файлу и его формат. Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию
export
у полученного после загрузки файла объекта класса AudioSegment
.#audio #pydub
Визуализация данных на карте с Folium
Folium позволяет как и привязать данные к карте для визуализации фоновых картограмм, так и передавать векторные, растовые, HTML визуализации в качестве маркеров на карте.
Библиотека поддерживает настраиваемые наборы фрагментов MapBox или Cloudmade.
Есть разные виды маркеров начиная с простого маркера местоположения в стиле листовки с всплывающим окном и всплывающей подсказкой HTML.
Вы так-же можете налаживать изображения, видео, GeoJSON и TopoJSON.
Результат работы — https://i.imgur.com/QhNDb5I.png
#Folium
Folium позволяет как и привязать данные к карте для визуализации фоновых картограмм, так и передавать векторные, растовые, HTML визуализации в качестве маркеров на карте.
Библиотека поддерживает настраиваемые наборы фрагментов MapBox или Cloudmade.
Есть разные виды маркеров начиная с простого маркера местоположения в стиле листовки с всплывающим окном и всплывающей подсказкой HTML.
Вы так-же можете налаживать изображения, видео, GeoJSON и TopoJSON.
Результат работы — https://i.imgur.com/QhNDb5I.png
#Folium
Работа с датой и временем
Dateutil – предоставляет расширения для методов, уже имеющихся в datetime, имеет возможности для обработки сырых данных.
Dateutil разбит на несколько подклассов:
Так-же следуют упомянуть
#Dateutil
Dateutil – предоставляет расширения для методов, уже имеющихся в datetime, имеет возможности для обработки сырых данных.
Dateutil разбит на несколько подклассов:
easter
— используется для вычисления даты и времени с учетом разных календарей, а именно: западный,православный,юлианский.parser
— включает в себя продвинутый парсер даты и времени, с помощью которого мы можем парсить разные форматы.relativedata
— предназначен для замены компонентов даты.Так-же следуют упомянуть
utils
, он содержит основные функции для работы с датой и временем.#Dateutil
Получение аудиопотока с микрофона
Библиотека
В приведенном примере мы создаем объект класса
Данный объект потока позволяет считывать с устройства с помощью метода
В примере же мы просто считываем 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