Удобно, правда?
---
### Зачем это нужно?
Можно возразить: "Зачем Pydantic, если я и так могу проверять данные вручную?". Ответ прост: Pydantic экономит ваше время, код становится чище, а ошибки легче отлавливать. Вместо изобретения велосипеда вы получаете готовое решение — тестированное и надежное.
Библиотека удобна как для начинающих, так и для опытных разработчиков. И, что немаловажно, она идеально сочетается с популярными фреймворками вроде FastAPI.
---
### Заключение
Pydantic — это тот инструмент, которому вы не забудете сказать "спасибо". С его помощью вы можете забыть о головной боли, связанной с валидацией данных, и сосредоточиться на разработке функциональности. Попробуйте Pydantic в своем следующем проекте, и вы заметите, насколько проще станет жизнь.
---
### Зачем это нужно?
Можно возразить: "Зачем Pydantic, если я и так могу проверять данные вручную?". Ответ прост: Pydantic экономит ваше время, код становится чище, а ошибки легче отлавливать. Вместо изобретения велосипеда вы получаете готовое решение — тестированное и надежное.
Библиотека удобна как для начинающих, так и для опытных разработчиков. И, что немаловажно, она идеально сочетается с популярными фреймворками вроде FastAPI.
---
### Заключение
Pydantic — это тот инструмент, которому вы не забудете сказать "спасибо". С его помощью вы можете забыть о головной боли, связанной с валидацией данных, и сосредоточиться на разработке функциональности. Попробуйте Pydantic в своем следующем проекте, и вы заметите, насколько проще станет жизнь.
Создаем графические анимации с помощью Manim
Привет! Сегодня я хочу рассказать вам о потрясающей библиотеке Python, которая позволяет создавать захватывающие графические анимации. Это Manim — инструмент, который изначально разработал Грант Сандерсон, автор популярного YouTube-канала 3Blue1Brown. Если вы когда-либо видели его образовательные видео с красивыми анимациями, то вам точно стоит узнать, как можно создать нечто подобное самостоятельно.
Manim (Mathematical Animation Engine) — это мощный инструмент для создания визуализаций, особенно полезный для объяснения математических или научных концепций. Несмотря на его сложность на первый взгляд, начать с ним работать совсем несложно. Самый большой плюс этой библиотеки заключается в том, что весь процесс состоит из написания кода. Хотите создать вращающийся куб? Пару строк в Python — и вы на коне!
---
### Установка Manim
Для начала нужно установить библиотеку. Manim активно развивается, поэтому используйте последнюю версию из PyPI. Просто выполните команду:
После установки вы готовы к созданию своей первой анимации.
---
### Простая анимация с квадратом
Чтобы понять, как работает Manim, давайте создадим базовую анимацию, где квадрат появляется на экране и плавно передвигается вправо. Вот минимальный пример:
В этом коде:
- Мы импортируем
- Метод
- Функция
- Мы используем метод
Чтобы создать итоговое видео, выполните команду в терминале:
Опции
---
### Добавляем стиль
Давайте немного украсим нашу анимацию. Например, добавим цветной текст, круг и вращения:
Manim предоставляет гибкие возможности для стилизации объектов. Вы можете изменять их цвет, размер, прозрачность и даже анимировать весь процесс.
---
### Используем математику!
Если вы хотите визуализировать функции, Manim — идеальный инструмент. Например, вот как вы можете построить график синуса:
Этот код создает координатные оси и рисует на них график функции синуса. Вы можете менять функцию в
---
### Особенности Manim, которые вдохновляют
Manim — это не только инструмент для создания красивых визуализаций, но и мощное средство обучения, которое учит вас мыслить структурно. Оно идеально укладывается в мировосприятие программистов, ведь каждое действие здесь — это код.
Привет! Сегодня я хочу рассказать вам о потрясающей библиотеке Python, которая позволяет создавать захватывающие графические анимации. Это Manim — инструмент, который изначально разработал Грант Сандерсон, автор популярного YouTube-канала 3Blue1Brown. Если вы когда-либо видели его образовательные видео с красивыми анимациями, то вам точно стоит узнать, как можно создать нечто подобное самостоятельно.
Manim (Mathematical Animation Engine) — это мощный инструмент для создания визуализаций, особенно полезный для объяснения математических или научных концепций. Несмотря на его сложность на первый взгляд, начать с ним работать совсем несложно. Самый большой плюс этой библиотеки заключается в том, что весь процесс состоит из написания кода. Хотите создать вращающийся куб? Пару строк в Python — и вы на коне!
---
### Установка Manim
Для начала нужно установить библиотеку. Manim активно развивается, поэтому используйте последнюю версию из PyPI. Просто выполните команду:
pip install manim
После установки вы готовы к созданию своей первой анимации.
---
### Простая анимация с квадратом
Чтобы понять, как работает Manim, давайте создадим базовую анимацию, где квадрат появляется на экране и плавно передвигается вправо. Вот минимальный пример:
from manim import *
class MovingSquare(Scene):
def construct(self):
square = Square() # Создаем квадрат
self.play(Create(square)) # Анимация появления квадрата
self.play(square.animate.shift(RIGHT * 2)) # Перемещаем квадрат вправо
В этом коде:
- Мы импортируем
manim
и создаем класс MovingSquare
, который наследуется от Scene
.- Метод
construct
, который мы переопределяем, определяет, что будет происходить в анимации.- Функция
Create
отвечает за постепенное появление объекта на экране.- Мы используем метод
animate
и функцию shift
для перемещения объекта.Чтобы создать итоговое видео, выполните команду в терминале:
manim -pql your_script.py MovingSquare
Опции
-pql
означают предварительный просмотр (p), высокую скорость рендеринга (q), анимацию с низким качеством (l).---
### Добавляем стиль
Давайте немного украсим нашу анимацию. Например, добавим цветной текст, круг и вращения:
from manim import *
class StyledAnimation(Scene):
def construct(self):
text = Text("Hello, Manim!", color=BLUE)
circle = Circle(color=RED).shift(UP)
self.play(Write(text)) # Анимация написания текста
self.play(DrawBorderThenFill(circle)) # Рисуем круг
self.play(Rotate(circle, angle=PI)) # Вращаем круг на 180 градусов
self.wait(1)
Manim предоставляет гибкие возможности для стилизации объектов. Вы можете изменять их цвет, размер, прозрачность и даже анимировать весь процесс.
---
### Используем математику!
Если вы хотите визуализировать функции, Manim — идеальный инструмент. Например, вот как вы можете построить график синуса:
from manim import *
class PlotSin(Scene):
def construct(self):
axes = Axes(
x_range=[-PI, PI, PI/4],
y_range=[-1.5, 1.5, 0.5],
axis_config={"color": WHITE}
)
sin_graph = axes.plot(
lambda x: np.sin(x),
color=YELLOW,
stroke_width=4
)
self.play(Create(axes), Create(sin_graph))
self.wait(1)
Этот код создает координатные оси и рисует на них график функции синуса. Вы можете менять функцию в
lambda x: np.sin(x)
на любую другую — например, np.cos(x)
или сложные уравнения.---
### Особенности Manim, которые вдохновляют
Manim — это не только инструмент для создания красивых визуализаций, но и мощное средство обучения, которое учит вас мыслить структурно. Оно идеально укладывается в мировосприятие программистов, ведь каждое действие здесь — это код.
👍1
Что делает Manim уникальным:
- Гибкость. Все строится программно, нет неудобных графических интерфейсов.
- Четкость. Ваши визуализации будут выглядеть профессионально прямо "из коробки".
- Сообщество. Существует множество примеров, документации и готовых анимаций от других пользователей.
---
### Подводя итог
Manim отлично подходит не только для образовательных роликов, но и для творческого выражения. Если вы мечтали изучать математику или программирование через визуализацию, этот инструмент станет вашим лучшим другом. Возьмите пару примеров, поиграйте с параметрами, и через несколько часов вы сможете создавать свои первые серьезные работы. Только оштрафуйте себя за банальные квадратные примеры. 😉
- Гибкость. Все строится программно, нет неудобных графических интерфейсов.
- Четкость. Ваши визуализации будут выглядеть профессионально прямо "из коробки".
- Сообщество. Существует множество примеров, документации и готовых анимаций от других пользователей.
---
### Подводя итог
Manim отлично подходит не только для образовательных роликов, но и для творческого выражения. Если вы мечтали изучать математику или программирование через визуализацию, этот инструмент станет вашим лучшим другом. Возьмите пару примеров, поиграйте с параметрами, и через несколько часов вы сможете создавать свои первые серьезные работы. Только оштрафуйте себя за банальные квадратные примеры. 😉
# Основы использования технологий машинного зрения с библиотекой OpenCV
Когда дело доходит до машинного зрения, библиотека OpenCV — это настоящий швейцарский нож. Она давно завоевала популярность в мире Python-разработки и используется как новичками, так и профессионалами. Давайте посмотрим, как начать знакомство с этой мощной библиотекой и решить несколько простых задач, которые откроют перед вами дверь в мир компьютерного зрения.
### Установка OpenCV
Для начала необходимо установить OpenCV. Сделать это можно с помощью Python Package Index:
Элементарно, не так ли? Теперь мы готовы к тому, чтобы изучить основные функции библиотеки.
---
## Чтение и отображение изображений
Первое, чему нас учит OpenCV — это работа с изображениями. Рассмотрим простой пример, как загрузить картинку, вывести её на экран и сохранить в другом формате.
Здесь
---
## Работа с фильтрами и преобразованиями
Мир машинного зрения часто требует предобработки изображений. Например, преобразования изображения в серый формат или размытие. Давайте попробуем это сделать.
Здесь используется метод
---
## Обнаружение контуров
Одна из наиболее интересных и часто используемых возможностей OpenCV — это выявление контуров объектов на изображении. Давайте попробуем выделить контуры.
Функция
---
## Начало работы с видео
OpenCV позволяет работать не только с изображениями, но и с видео. Рассмотрим пример, где мы откроем поток с веб-камеры, а также будем отображать его в реальном времени.
Этот пример позволяет понять, как легко можно захватить видео, обработать его в режиме реального времени или сохранить кадры для последующего анализа.
---
## Почему OpenCV так популярен?
OpenCV — это не просто инструмент, это настоящий клад для разработчиков. С его помощью можно решать задачи распознавания лиц, трекинга объектов, обработки потокового видео, анализировать движения и многое другое. Ключевое преимущество библиотеки — её богатая функциональность и активная поддержка сообществом.
Эта статья показала лишь верхушку айсберга возможностей OpenCV.
Когда дело доходит до машинного зрения, библиотека OpenCV — это настоящий швейцарский нож. Она давно завоевала популярность в мире Python-разработки и используется как новичками, так и профессионалами. Давайте посмотрим, как начать знакомство с этой мощной библиотекой и решить несколько простых задач, которые откроют перед вами дверь в мир компьютерного зрения.
### Установка OpenCV
Для начала необходимо установить OpenCV. Сделать это можно с помощью Python Package Index:
pip install opencv-python
pip install opencv-python-headless # Если не нужен графический интерфейс
Элементарно, не так ли? Теперь мы готовы к тому, чтобы изучить основные функции библиотеки.
---
## Чтение и отображение изображений
Первое, чему нас учит OpenCV — это работа с изображениями. Рассмотрим простой пример, как загрузить картинку, вывести её на экран и сохранить в другом формате.
import cv2
# Загружаем изображение
image = cv2.imread('example.jpg')
# Отображаем изображение в новом окне
cv2.imshow('Displayed Image', image)
# Ждем нажатия любой клавиши
cv2.waitKey(0)
# Закрываем все окна
cv2.destroyAllWindows()
# Сохраняем изображение в новом формате
cv2.imwrite('example_copy.png', image)
Здесь
cv2.imread
считывает изображение, а cv2.imshow
отображает его в отдельном окне. После нажатия клавиши срабатывает cv2.destroyAllWindows
, который убирает все открытые окна. Конструкция проста и наглядна.---
## Работа с фильтрами и преобразованиями
Мир машинного зрения часто требует предобработки изображений. Например, преобразования изображения в серый формат или размытие. Давайте попробуем это сделать.
# Преобразуем изображение в оттенки серого
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray_example.jpg', gray_image)
# Применяем размытие
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
cv2.imwrite('blurred_example.jpg', blurred_image)
Здесь используется метод
cv2.cvtColor
для перевода изображения в оттенки серого, а функция cv2.GaussianBlur
помогает создать эффект размытия, который часто используется для устранения шумов перед обработкой изображения.---
## Обнаружение контуров
Одна из наиболее интересных и часто используемых возможностей OpenCV — это выявление контуров объектов на изображении. Давайте попробуем выделить контуры.
# Преобразуем изображение в градации серого
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Применяем метод обнаружения границ
edges = cv2.Canny(gray, 100, 200)
cv2.imwrite('edges_example.jpg', edges)
Функция
cv2.Canny
обнаруживает границы на изображении, используя алгоритм Канни. Параметры 100
и 200
определяют пороги градиентов, ниже и выше которых границы не обнаруживаются.---
## Начало работы с видео
OpenCV позволяет работать не только с изображениями, но и с видео. Рассмотрим пример, где мы откроем поток с веб-камеры, а также будем отображать его в реальном времени.
# Открываем поток с камеры
video = cv2.VideoCapture(0)
while True:
# Читаем кадр
ret, frame = video.read()
# Если кадр успешно получен
if not ret:
break
# Отображаем его
cv2.imshow('Webcam Feed', frame)
# Выход из цикла по нажатию клавиши 'q'
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Закрываем поток и окна
video.release()
cv2.destroyAllWindows()
Этот пример позволяет понять, как легко можно захватить видео, обработать его в режиме реального времени или сохранить кадры для последующего анализа.
---
## Почему OpenCV так популярен?
OpenCV — это не просто инструмент, это настоящий клад для разработчиков. С его помощью можно решать задачи распознавания лиц, трекинга объектов, обработки потокового видео, анализировать движения и многое другое. Ключевое преимущество библиотеки — её богатая функциональность и активная поддержка сообществом.
Эта статья показала лишь верхушку айсберга возможностей OpenCV.
👍4❤1
Машинное зрение — это динамичная и перспективная область, а изучение OpenCV становится отличной отправной точкой для тех, кто хочет освоить современные технологии обработки изображений. Впереди — бесконечное поле для экспериментов и творчества!
## Как улучшить производительность приложений с помощью инструмента профилирования cProfile
Когда речь заходит о написании приложений на Python, производительность может ощутимо упасть, если некоторые части кода работают не так эффективно, как могли бы. Казалось бы, идея «оптимизации кода» звучит просто, но как понять, какие именно участки программы требуют внимания? Вот тут на сцену выходит инструмент профилирования cProfile — мощное средство для аналитики производительности вашего Python-кода. Он поможет вам узнать, какие функции занимают больше всего времени, и где ваша программа "тормозит".
### Что такое cProfile?
cProfile — это встроенный модуль в Python, который позволяет измерять время выполнения различных частей кода. Вместо того чтобы гадать, в чем проблема, вы можете опираться на конкретные данные и понимать, на какие функции уходит больше всего времени.
Когда вы используете cProfile, он отслеживает выполнение вашего кода, «докладывая» о затратах времени на выполнение каждой функции, количестве вызовов функций и многом другом. В итоге вы получаете отчет, показывающий, какие части кода затормаживают программу.
### Основы работы с cProfile
Начнем с простого примера. Допустим, у нас есть программа, которая осуществляет поиск в массиве и сортирует его:
Когда вы запускаете этот код, cProfile выдает отчет в консоли. Пример вывода будет выглядеть так:
Этот отчет содержит следующие столбцы:
- ncalls: количество вызовов функции.
- tottime: общее время, затраченное исключительно на выполнение функции (без учета вызовов других функций).
- cumtime: общее время, затраченное на функцию и все функции, вызванные внутри нее.
Эти данные помогут вам понять, сколько времени программы тратится на определенные участки.
### Улучшение производительности
Допустим, мы видим, что на
Заменив в
### Сохранение результатов профилирования
Работать с отчетами прямо в консоли не всегда удобно. cProfile позволяет сохранять данные профилирования в файл для дальнейшего анализа:
После выполнения создастся файл
### Обработка результатов с pstats
Для улучшения читаемости вы также можете использовать модуль pstats, который предоставляет гибкость настройки отчета.
Когда речь заходит о написании приложений на Python, производительность может ощутимо упасть, если некоторые части кода работают не так эффективно, как могли бы. Казалось бы, идея «оптимизации кода» звучит просто, но как понять, какие именно участки программы требуют внимания? Вот тут на сцену выходит инструмент профилирования cProfile — мощное средство для аналитики производительности вашего Python-кода. Он поможет вам узнать, какие функции занимают больше всего времени, и где ваша программа "тормозит".
### Что такое cProfile?
cProfile — это встроенный модуль в Python, который позволяет измерять время выполнения различных частей кода. Вместо того чтобы гадать, в чем проблема, вы можете опираться на конкретные данные и понимать, на какие функции уходит больше всего времени.
Когда вы используете cProfile, он отслеживает выполнение вашего кода, «докладывая» о затратах времени на выполнение каждой функции, количестве вызовов функций и многом другом. В итоге вы получаете отчет, показывающий, какие части кода затормаживают программу.
### Основы работы с cProfile
Начнем с простого примера. Допустим, у нас есть программа, которая осуществляет поиск в массиве и сортирует его:
import cProfile
def linear_search(arr, target):
for i, val in enumerate(arr):
if val == target:
return i
return -1
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
def main():
data = [5, 2, 9, 1, 5, 6]
bubble_sort(data)
linear_search(data, 9)
if __name__ == "__main__":
cProfile.run("main()")
Когда вы запускаете этот код, cProfile выдает отчет в консоли. Пример вывода будет выглядеть так:
13 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 script.py:4(linear_search)
1 0.000 0.000 0.000 0.000 script.py:10(bubble_sort)
1 0.000 0.000 0.000 0.000 script.py:18(main)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}
9 0.000 0.000 0.000 0.000 {built-in method builtins.len}
Этот отчет содержит следующие столбцы:
- ncalls: количество вызовов функции.
- tottime: общее время, затраченное исключительно на выполнение функции (без учета вызовов других функций).
- cumtime: общее время, затраченное на функцию и все функции, вызванные внутри нее.
Эти данные помогут вам понять, сколько времени программы тратится на определенные участки.
### Улучшение производительности
Допустим, мы видим, что на
bubble_sort
уходит слишком много времени. Решением может быть замена его на более эффективный алгоритм (например, встроенный метод Python sorted()
):def better_sort(arr):
return sorted(arr)
Заменив в
main()
вызов bubble_sort(data)
на better_sort(data)
, вы сразу заметите улучшение производительности на больших наборах данных.### Сохранение результатов профилирования
Работать с отчетами прямо в консоли не всегда удобно. cProfile позволяет сохранять данные профилирования в файл для дальнейшего анализа:
cProfile.run("main()", "output.prof")
После выполнения создастся файл
output.prof
. Для его чтения и анализа можно использовать сторонние инструменты, такие как SnakeViz или pstats
(входит в стандартную библиотеку Python).### Обработка результатов с pstats
Для улучшения читаемости вы также можете использовать модуль pstats, который предоставляет гибкость настройки отчета.
GitHub
GitHub - jiffyclub/snakeviz: An in-browser Python profile viewer
An in-browser Python profile viewer. Contribute to jiffyclub/snakeviz development by creating an account on GitHub.
👍3
Например:
Этот код выводит только 10 строк, отсортированных по времени выполнения.
### Когда использовать cProfile?
- Долгое выполнение программы. Если ваш код выполняется долго и вы не знаете, в чем причина.
- Оптимизация функции. Профилирование поможет найти наиболее «дорогие» части программы.
- Анализ новых алгоритмов. Хотите узнать, ускоряет ли ваша новая реализация код? Проверьте с cProfile.
### Заключение
cProfile — это незаменимый инструмент для каждого Python-разработчика, когда нужно выжать максимум из вашего приложения. Применяя профилирование, вы сможете найти слабые места и улучшить производительность кода без лишних догадок. А главное — это делать просто, ведь cProfile идет «из коробки» с Python! Попробуйте, и, возможно, вы с удивлением обнаружите участки кода, которые никогда не считали проблемными.
import pstats
stats = pstats.Stats("output.prof")
stats.strip_dirs().sort_stats("time").print_stats(10)
Этот код выводит только 10 строк, отсортированных по времени выполнения.
### Когда использовать cProfile?
- Долгое выполнение программы. Если ваш код выполняется долго и вы не знаете, в чем причина.
- Оптимизация функции. Профилирование поможет найти наиболее «дорогие» части программы.
- Анализ новых алгоритмов. Хотите узнать, ускоряет ли ваша новая реализация код? Проверьте с cProfile.
### Заключение
cProfile — это незаменимый инструмент для каждого Python-разработчика, когда нужно выжать максимум из вашего приложения. Применяя профилирование, вы сможете найти слабые места и улучшить производительность кода без лишних догадок. А главное — это делать просто, ведь cProfile идет «из коробки» с Python! Попробуйте, и, возможно, вы с удивлением обнаружите участки кода, которые никогда не считали проблемными.
👍2🔥2
Машинное обучение с TensorFlow: проще, чем кажется!
В мире Python есть множество инструментов для работы с машинным обучением, но одним из самых мощных и популярных является TensorFlow. Этот фреймворк, разработанный компанией Google, открывает невероятные возможности для создания моделей машинного обучения. Сегодня я расскажу, как начать с TensorFlow и покажу несколько простых примеров, чтобы вдохновить вас пробовать его самому.
### 1. Что такое TensorFlow?
TensorFlow — это фреймворк для работы с многомерными вычислениями и построением моделей машинного обучения. Если простыми словами, это огромный инструмент, который позволяет вам брать данные, обрабатывать их и создавать прогнозы. Под капотом TensorFlow использует графы вычислений, чтобы эффективно работать с большими объемами данных, а также поддерживает аппаратное ускорение через GPU.
### 2. Установка и первое знакомство
Чтобы начать работу, достаточно установить библиотеку:
После этого вы готовы к исследованиям. Использование TensorFlow начинается с базовых концепций: создание тензоров (массивов данных), определение моделей и их обучение.
### 3. Простой пример: линейная регрессия
Представьте, что вы хотите предсказать стоимость недвижимости на основе площади квартиры. Попробуем сделать это с TensorFlow.
#### Определяем данные
Мы создадим искусственные данные для задачи линейной регрессии:
#### Создаем модель
Теперь определим простую нейронную сеть с одной линейной связью:
На этом этапе наша модель "пустая" и ей не известна связь между данными. Именно для этого нужна процедура обучения.
#### Компиляция и обучение
Теперь обучим нашу модель:
#### Прогноз
После обучения наша модель готова к прогнозам. Проверим, как она работает:
И вот, TensorFlow выдал предсказание для нового значения. Теперь мы — маги данных!
---
### 4. Зачем TensorFlow?
Данный инструмент крайне полезен благодаря следующим ключевым возможностям:
1. Гибкость: TensorFlow поддерживает любые типы нейросетей — от простых регрессий до сложных рекуррентных или сверточных сетей для работы с видео, текстом и изображениями.
2. Скорость: Аппаратное ускорение через GPU заметно увеличивает скорость тренировок.
3. Интеграция: TensorFlow легко сочетается с другими библиотеками Python, такими как Pandas, NumPy, Scikit-learn.
4. Масштабируемость: От маленьких ноутбуков до кластеров с десятками серверов — TensorFlow справляется со всем.
---
### 5. Заключение
TensorFlow может показаться сложным для изучения, но, как показал наш пример, его основные концепции достаточно просты. Это идеальный инструмент для первых шагов в машинном обучении, а затем — для реализации более амбициозных проектов. С TensorFlow вы можете создать что угодно: от простой линейной регрессии до анализа изображений и рекоммендательных систем. И самое главное, этот путь уже начинается с пары простых строк кода!
В мире Python есть множество инструментов для работы с машинным обучением, но одним из самых мощных и популярных является TensorFlow. Этот фреймворк, разработанный компанией Google, открывает невероятные возможности для создания моделей машинного обучения. Сегодня я расскажу, как начать с TensorFlow и покажу несколько простых примеров, чтобы вдохновить вас пробовать его самому.
### 1. Что такое TensorFlow?
TensorFlow — это фреймворк для работы с многомерными вычислениями и построением моделей машинного обучения. Если простыми словами, это огромный инструмент, который позволяет вам брать данные, обрабатывать их и создавать прогнозы. Под капотом TensorFlow использует графы вычислений, чтобы эффективно работать с большими объемами данных, а также поддерживает аппаратное ускорение через GPU.
### 2. Установка и первое знакомство
Чтобы начать работу, достаточно установить библиотеку:
pip install tensorflow
После этого вы готовы к исследованиям. Использование TensorFlow начинается с базовых концепций: создание тензоров (массивов данных), определение моделей и их обучение.
### 3. Простой пример: линейная регрессия
Представьте, что вы хотите предсказать стоимость недвижимости на основе площади квартиры. Попробуем сделать это с TensorFlow.
#### Определяем данные
Мы создадим искусственные данные для задачи линейной регрессии:
import tensorflow as tf
import numpy as np
# Исходные данные
x_train = np.array([40, 50, 70, 90, 100], dtype=np.float32) # Площадь квартир
y_train = np.array([100, 150, 200, 250, 300], dtype=np.float32) # Цена квартир
#### Создаем модель
Теперь определим простую нейронную сеть с одной линейной связью:
# Создаем модель
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=1, input_shape=[1]) # Один вход, один выход
])
На этом этапе наша модель "пустая" и ей не известна связь между данными. Именно для этого нужна процедура обучения.
#### Компиляция и обучение
Теперь обучим нашу модель:
# Компилируем модель
model.compile(optimizer='sgd', loss='mean_squared_error')
# Обучение
model.fit(x_train, y_train, epochs=500, verbose=0) # 500 эпох для точности
#### Прогноз
После обучения наша модель готова к прогнозам. Проверим, как она работает:
# Предсказание
test_data = 80.0 # Площадь 80 кв. м
predicted_price = model.predict([test_data])
print(f"Предсказанная цена для {test_data} кв. м: {predicted_price[0][0]}")
И вот, TensorFlow выдал предсказание для нового значения. Теперь мы — маги данных!
---
### 4. Зачем TensorFlow?
Данный инструмент крайне полезен благодаря следующим ключевым возможностям:
1. Гибкость: TensorFlow поддерживает любые типы нейросетей — от простых регрессий до сложных рекуррентных или сверточных сетей для работы с видео, текстом и изображениями.
2. Скорость: Аппаратное ускорение через GPU заметно увеличивает скорость тренировок.
3. Интеграция: TensorFlow легко сочетается с другими библиотеками Python, такими как Pandas, NumPy, Scikit-learn.
4. Масштабируемость: От маленьких ноутбуков до кластеров с десятками серверов — TensorFlow справляется со всем.
---
### 5. Заключение
TensorFlow может показаться сложным для изучения, но, как показал наш пример, его основные концепции достаточно просты. Это идеальный инструмент для первых шагов в машинном обучении, а затем — для реализации более амбициозных проектов. С TensorFlow вы можете создать что угодно: от простой линейной регрессии до анализа изображений и рекоммендательных систем. И самое главное, этот путь уже начинается с пары простых строк кода!
🔥2
Основы обработки естественного языка (NLP) с библиотекой spaCy
Если вам интересно погрузиться в мир обработки естественного языка (NLP) с нуля, то библиотека spaCy — это отличный выбор для начала. Это мощный, универсальный инструмент для работы с текстом на многих языках, включая русский. Сегодня я расскажу, как spaCy помогает анализировать текст, а также покажу несколько простых и практичных примеров его использования.
### Почему именно spaCy?
SpaCy — это библиотека Python, специально созданная для продакшн-задач. Она быстрая, хорошо оптимизированная и имеет множество встроенного функционала: токенизация, лемматизация, определение частей речи, выделение именованных сущностей и многое другое. Кроме того, spaCy имеет удобный API, что делает её простой для изучения даже начинающими программистами.
Установить библиотеку просто:
### Начало работы
После установки нужно загрузить языковую модель. SpaCy поддерживает различные модели, от легковесных до более мощных, включающих глубокое обучение. Для работы с русским языком можно использовать модель
Теперь вы готовы анализировать текст.
### Пример 1: Токенизация текста
Токенизация — это процесс разбиения текста на отдельные составляющие, такие как слова и знаки препинания. С spaCy можно легко разделить текст на токены и получить информацию о каждом из них:
Вывод покажет каждый токен, укажет, является ли он знаком препинания или стоп-словом (например, "и", "это", "на").
### Пример 2: Лемматизация
Лемматизация — это приведение слова к его базовой форме. Например, слова "делал", "делать" и "делаю" имеют одну и ту же лемму: "делать". Это важно для уменьшения количества вариаций слов в тексте.
Вы заметите, что spaCy правильно определяет лемму для каждого слова, что особенно полезно в задачах поиска или анализа текста.
### Пример 3: Определение частей речи
Чтобы понимать, какие роли играют слова в предложении, spaCy умеет определять части речи (POS-tagging):
Теперь вы увидите не только части речи, но и более подробные метаданные, что полезно для лингвистического анализа.
### Пример 4: Выделение именованных сущностей
Именованные сущности (Named Entities) — это такие элементы текста, как имена людей, мест, организаций, даты и так далее. SpaCy автоматически распознает их:
В этом примере spaCy выделит "Илон Маск" как имя человека, "SpaceX" как организацию, а "2002 год" как дату. Это невероятно полезно для задач, связанных с поиском информации и анализа данных.
### Подводя итоги
Библиотека spaCy делает обработку естественного языка простой, но при этом чрезвычайно мощной. С её помощью можно анализировать текст, извлекать полезную информацию и создавать сложные NLP-приложения. Несмотря на то, что мы здесь рассмотрели лишь базовый функционал, spaCy поддерживает и более сложные вещи, такие как обучение моделей, расширение словарей и глубокая работа с синтаксисом.
Если вы когда-либо думали о том, чтобы начать работать с текстами, теперь у вас в руках мощный инструмент, с которым этот путь станет гораздо проще.
Если вам интересно погрузиться в мир обработки естественного языка (NLP) с нуля, то библиотека spaCy — это отличный выбор для начала. Это мощный, универсальный инструмент для работы с текстом на многих языках, включая русский. Сегодня я расскажу, как spaCy помогает анализировать текст, а также покажу несколько простых и практичных примеров его использования.
### Почему именно spaCy?
SpaCy — это библиотека Python, специально созданная для продакшн-задач. Она быстрая, хорошо оптимизированная и имеет множество встроенного функционала: токенизация, лемматизация, определение частей речи, выделение именованных сущностей и многое другое. Кроме того, spaCy имеет удобный API, что делает её простой для изучения даже начинающими программистами.
Установить библиотеку просто:
pip install spacy
### Начало работы
После установки нужно загрузить языковую модель. SpaCy поддерживает различные модели, от легковесных до более мощных, включающих глубокое обучение. Для работы с русским языком можно использовать модель
ru_core_news_sm
:import spacy
# Загрузка русской модели
nlp = spacy.load('ru_core_news_sm')
Теперь вы готовы анализировать текст.
### Пример 1: Токенизация текста
Токенизация — это процесс разбиения текста на отдельные составляющие, такие как слова и знаки препинания. С spaCy можно легко разделить текст на токены и получить информацию о каждом из них:
text = "Привет, мир! Natural Language Processing — это круто."
doc = nlp(text)
for token in doc:
print(f'Token: {token.text}, Is punctuation: {token.is_punct}, Is stop word: {token.is_stop}')
Вывод покажет каждый токен, укажет, является ли он знаком препинания или стоп-словом (например, "и", "это", "на").
### Пример 2: Лемматизация
Лемматизация — это приведение слова к его базовой форме. Например, слова "делал", "делать" и "делаю" имеют одну и ту же лемму: "делать". Это важно для уменьшения количества вариаций слов в тексте.
text = "Он писал программу и переписывал её заново."
doc = nlp(text)
for token in doc:
print(f'Word: {token.text}, Lemma: {token.lemma_}')
Вы заметите, что spaCy правильно определяет лемму для каждого слова, что особенно полезно в задачах поиска или анализа текста.
### Пример 3: Определение частей речи
Чтобы понимать, какие роли играют слова в предложении, spaCy умеет определять части речи (POS-tagging):
text = "Она читает книгу о программировании."
doc = nlp(text)
for token in doc:
print(f'Word: {token.text}, POS: {token.pos_}, Detailed POS: {token.tag_}')
Теперь вы увидите не только части речи, но и более подробные метаданные, что полезно для лингвистического анализа.
### Пример 4: Выделение именованных сущностей
Именованные сущности (Named Entities) — это такие элементы текста, как имена людей, мест, организаций, даты и так далее. SpaCy автоматически распознает их:
text = "Илон Маск основал компанию SpaceX в 2002 году."
doc = nlp(text)
for ent in doc.ents:
print(f'Entity: {ent.text}, Type: {ent.label_}')
В этом примере spaCy выделит "Илон Маск" как имя человека, "SpaceX" как организацию, а "2002 год" как дату. Это невероятно полезно для задач, связанных с поиском информации и анализа данных.
### Подводя итоги
Библиотека spaCy делает обработку естественного языка простой, но при этом чрезвычайно мощной. С её помощью можно анализировать текст, извлекать полезную информацию и создавать сложные NLP-приложения. Несмотря на то, что мы здесь рассмотрели лишь базовый функционал, spaCy поддерживает и более сложные вещи, такие как обучение моделей, расширение словарей и глубокая работа с синтаксисом.
Если вы когда-либо думали о том, чтобы начать работать с текстами, теперь у вас в руках мощный инструмент, с которым этот путь станет гораздо проще.
👍4
Начните с простого, поэкспериментируйте со spaCy, и кто знает, возможно, следующий текстовый анализатор в вашем любимом приложении будет сделан именно вами! 🚀
### Изучение принципов DevOps и их использования с Python
DevOps — это мост между разработчиками и операторами, между людьми и процессами, между планами и результатами. Это подход, который помогает разработке ПО достичь идеального баланса скорости, качества и надёжности. А что, если мы скажем, что Python — один из лучших инструментов для эффективной интеграции DevOps-практик в вашу работу? Давайте разбираться.
---
#### DevOps на пальцах
Если описать DevOps коротко, это философия, где разработка (Development) и эксплуатация (Operations) работают рука об руку. Входящие в эту методологию процессы включают:
- автоматизацию инфраструктуры (например, через инфраструктуру как код),
- CI/CD пайплайны (непрерывная интеграция и доставка),
- мониторинг и логирование,
- тестирование и развертывание приложений.
И во всех этих этапах можно встретить Python.
---
#### Почему Python?
Python идеально вписывается в мир DevOps благодаря своему лаконичному синтаксису, мощной экосистеме библиотек и универсальности. В нём легко писать скрипты для автоматизации, он поддерживается всеми крупными инструментами DevOps, и его интеграция с инфраструктурой происходит без лишних сложностей.
Вот несколько причин выбрать Python:
1. Простота. Код легко читается, что особенно важно в команде.
2. Масштабируемость. В Python можно написать скрипт на 10 строк для автоматизации одной задачи, а можно — полноценное приложение для управления всей инфраструктурой.
3. Экосистема. Пакеты вроде
---
#### Примеры использования Python в DevOps
Чтобы не говорить общими словами, давайте посмотрим примеры.
1. SSH-автоматизация с помощью Paramiko
Когда нужно выполнить определённые команды на удалённом сервере, библиотека
Этот пример демонстрирует, как с помощью всего нескольких строк Python можно быстро подключиться по SSH и выполнить команду на удалённом сервере.
---
2. Работа с облаком через AWS SDK (Boto3)
Для управления облачными ресурсами AWS Python предоставляет мощную библиотеку
Например, создание S3-бакета:
Так можно автоматизировать управление облаками, минуя ручное копание в интерфейсах AWS.
---
3. Контейнеры и Docker API
Python может работать с Docker через библиотеку
Теперь никакого ручного запуска контейнеров: всё можно автоматизировать.
---
4. Инфраструктура как код: интеграция с Ansible
Python тесно интегрируется с Ansible, позволяя передавать параметры или даже запускать Playbook'и через скрипты.
DevOps — это мост между разработчиками и операторами, между людьми и процессами, между планами и результатами. Это подход, который помогает разработке ПО достичь идеального баланса скорости, качества и надёжности. А что, если мы скажем, что Python — один из лучших инструментов для эффективной интеграции DevOps-практик в вашу работу? Давайте разбираться.
---
#### DevOps на пальцах
Если описать DevOps коротко, это философия, где разработка (Development) и эксплуатация (Operations) работают рука об руку. Входящие в эту методологию процессы включают:
- автоматизацию инфраструктуры (например, через инфраструктуру как код),
- CI/CD пайплайны (непрерывная интеграция и доставка),
- мониторинг и логирование,
- тестирование и развертывание приложений.
И во всех этих этапах можно встретить Python.
---
#### Почему Python?
Python идеально вписывается в мир DevOps благодаря своему лаконичному синтаксису, мощной экосистеме библиотек и универсальности. В нём легко писать скрипты для автоматизации, он поддерживается всеми крупными инструментами DevOps, и его интеграция с инфраструктурой происходит без лишних сложностей.
Вот несколько причин выбрать Python:
1. Простота. Код легко читается, что особенно важно в команде.
2. Масштабируемость. В Python можно написать скрипт на 10 строк для автоматизации одной задачи, а можно — полноценное приложение для управления всей инфраструктурой.
3. Экосистема. Пакеты вроде
paramiko
, boto3
, ansible
, docker
и других позволяют взаимодействовать с серверами, облачными провайдерами, контейнерами и т.д. ---
#### Примеры использования Python в DevOps
Чтобы не говорить общими словами, давайте посмотрим примеры.
1. SSH-автоматизация с помощью Paramiko
Когда нужно выполнить определённые команды на удалённом сервере, библиотека
paramiko
спасает.import paramiko
def execute_remote_command(host, username, password, command):
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=host, username=username, password=password)
stdin, stdout, stderr = ssh_client.exec_command(command)
print(stdout.read().decode('utf-8'))
ssh_client.close()
execute_remote_command("192.168.1.100", "admin", "password123", "ls -la")
Этот пример демонстрирует, как с помощью всего нескольких строк Python можно быстро подключиться по SSH и выполнить команду на удалённом сервере.
---
2. Работа с облаком через AWS SDK (Boto3)
Для управления облачными ресурсами AWS Python предоставляет мощную библиотеку
boto3
.Например, создание S3-бакета:
import boto3
def create_s3_bucket(bucket_name, region="us-east-1"):
s3 = boto3.client("s3", region_name=region)
s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={"LocationConstraint": region})
print(f"Bucket '{bucket_name}' created successfully!")
create_s3_bucket("my-devops-bucket")
Так можно автоматизировать управление облаками, минуя ручное копание в интерфейсах AWS.
---
3. Контейнеры и Docker API
Python может работать с Docker через библиотеку
docker
. Например, запуск контейнера с Nginx за пару строк кода:import docker
def run_nginx_container():
client = docker.from_env()
container = client.containers.run("nginx", detach=True)
print(f"Container {container.id} is running!")
run_nginx_container()
Теперь никакого ручного запуска контейнеров: всё можно автоматизировать.
---
4. Инфраструктура как код: интеграция с Ansible
Python тесно интегрируется с Ansible, позволяя передавать параметры или даже запускать Playbook'и через скрипты.
Например, с использованием
Это даёт возможность гибко управлять инфраструктурой, комбинируя возможности Python и Ansible.
---
#### Python и автоматизация CI/CD
Сегодня практически все цепочки CI/CD интегрируются с Python. Например, инструменты, вроде Jenkins, GitLab CI или CircleCI, позволяют добавлять кастомные скрипты на Python для автоматизации различных этапов: проверок, тестов, сборки, анализа статичного кода и т.д.
Библиотеки наподобие
Вот пример элементарного скрипта проверки кода перед развертыванием:
---
#### Python в мониторинге и логировании
Непрерывный мониторинг — один из основ DevOps. С помощью Python можно писать скрипты (или даже полноценные системы) для сбора метрик. Например, библиотека
Пример простого эндпоинта метрик:
Теперь Prometheus может собирать данные по метрике
---
#### Подводя итоги
Python — это настоящий Швейцарский нож, который может покрыть почти все аспекты DevOps. Будь то автоматизация рутинных задач, управление облачными ресурсами, развертывание приложений или мониторинг, этот язык невероятно функционален.
DevOps — это про эффективность, гибкость и поиск идеального баланса. А Python — это инструмент, который делает эту цель достижимой. Так почему бы не начать изучать его уже сегодня?
ansible-runner
.import ansible_runner
def run_playbook(playbook_path):
result = ansible_runner.run(private_data_dir="/path/to/playbook/", playbook=playbook_path)
print(f"Status: {result.status}")
print(f"RC: {result.rc}")
for event in result.events:
print(event)
run_playbook("example-playbook.yaml")
Это даёт возможность гибко управлять инфраструктурой, комбинируя возможности Python и Ansible.
---
#### Python и автоматизация CI/CD
Сегодня практически все цепочки CI/CD интегрируются с Python. Например, инструменты, вроде Jenkins, GitLab CI или CircleCI, позволяют добавлять кастомные скрипты на Python для автоматизации различных этапов: проверок, тестов, сборки, анализа статичного кода и т.д.
Библиотеки наподобие
pytest
для тестирования или tox
для автоматизации проверки окружений интегрируются максимально просто.Вот пример элементарного скрипта проверки кода перед развертыванием:
import subprocess
def run_tests():
result = subprocess.run(["pytest", "tests/"], capture_output=True, text=True)
if result.returncode != 0:
print("Tests failed!")
print(result.stdout)
return False
print("All tests passed!")
return True
---
#### Python в мониторинге и логировании
Непрерывный мониторинг — один из основ DevOps. С помощью Python можно писать скрипты (или даже полноценные системы) для сбора метрик. Например, библиотека
prometheus_client
позволяет собирать кастомные метрики и предавать их в Prometheus.Пример простого эндпоинта метрик:
from prometheus_client import start_http_server, Gauge
import random
import time
example_metric = Gauge('example_metric', 'Example custom metric')
def update_metric():
while True:
value = random.randint(0, 100)
example_metric.set(value)
time.sleep(5)
start_http_server(8000)
update_metric()
Теперь Prometheus может собирать данные по метрике
example_metric
.---
#### Подводя итоги
Python — это настоящий Швейцарский нож, который может покрыть почти все аспекты DevOps. Будь то автоматизация рутинных задач, управление облачными ресурсами, развертывание приложений или мониторинг, этот язык невероятно функционален.
DevOps — это про эффективность, гибкость и поиск идеального баланса. А Python — это инструмент, который делает эту цель достижимой. Так почему бы не начать изучать его уже сегодня?
Как создавать и управлять потоками данных с помощью Apache Airflow
Если вы решили погрузиться в мир управления потоками данных, то рано или поздно услышите имя Apache Airflow. Этот инструмент становится настоящим спасением для автоматизации задач, которые происходят на пересечении мира данных и разработки. Сегодня я расскажу вам, что такое Airflow, как он работает и почему он станет вашим новым лучшим другом в управлении ежедневными процессами.
---
### Что такое Apache Airflow?
Airflow — это платформа для планирования, мониторинга и управления рабочими процессами (так называемыми DAG — Directed Acyclic Graph). Проще говоря, это инструмент, который позволяет легко автоматизировать любые цепочки задач: будь то ETL (Extract, Transform, Load), периодическое обновление данных, обучение моделей машинного обучения или любые другие задачи, которые требуют четкого управления очередностью выполнения и зависимости шагов.
Главное преимущество Airflow в том, что скрипт рабочего процесса вы пишете как обычный Python-код. Вам не нужно учить дополнительный DSL-язык или создавать графические схемы в интерфейсе — просто используйте Python.
---
### Как работает Airflow?
Сердцем Airflow является DAG (направленный ациклический граф). Представьте, что вы создаете маршрут, состоящий из нескольких шагов. Каждый шаг может зависеть от предыдущих. Например, если вы выгружаете данные из API, потом обрабатываете их и загружаете в базу данных, то на каждом этапе нужно, чтобы предыдущий успешно завершился.
Для понимания проще посмотреть на пример кода:
В этом коде мы создаем DAG с тремя заданиями:
---
### Чем полезен Apache Airflow?
#### 1. Автоматизация рутинных задач
Airflow забирает на себя всю рутину: выполнение задач по расписанию, переопределение зависимостей, обработку ошибок. Это настоящий must-have для тех, кто хочет тратить меньше времени на повторяющиеся процессы.
#### 2. Гибкость
Поскольку весь рабочий процесс описывается на Python, вы можете внедрить любую логику, использовать любые библиотеки и адаптировать Airflow под свои нужды.
#### 3. Мониторинг и удобство отладки
Airflow предоставляет удобный веб-интерфейс. Вы можете посмотреть статусы выполнения задач, перезапустить их, если что-то пошло не так, или изучить логи.
#### 4. Расширяемость
Да, вы можете создавать свои собственные операторы, плагины и интеграции. Airflow поддерживает огромное количество уже готовых операторов для работы с Google Cloud, AWS, Azure, базами данных и другими инструментами.
---
### Как установить Apache Airflow?
Установка Airflow может быть немного сложной, но давайте я проведу вас через этот процесс шаг за шагом.
Если вы решили погрузиться в мир управления потоками данных, то рано или поздно услышите имя Apache Airflow. Этот инструмент становится настоящим спасением для автоматизации задач, которые происходят на пересечении мира данных и разработки. Сегодня я расскажу вам, что такое Airflow, как он работает и почему он станет вашим новым лучшим другом в управлении ежедневными процессами.
---
### Что такое Apache Airflow?
Airflow — это платформа для планирования, мониторинга и управления рабочими процессами (так называемыми DAG — Directed Acyclic Graph). Проще говоря, это инструмент, который позволяет легко автоматизировать любые цепочки задач: будь то ETL (Extract, Transform, Load), периодическое обновление данных, обучение моделей машинного обучения или любые другие задачи, которые требуют четкого управления очередностью выполнения и зависимости шагов.
Главное преимущество Airflow в том, что скрипт рабочего процесса вы пишете как обычный Python-код. Вам не нужно учить дополнительный DSL-язык или создавать графические схемы в интерфейсе — просто используйте Python.
---
### Как работает Airflow?
Сердцем Airflow является DAG (направленный ациклический граф). Представьте, что вы создаете маршрут, состоящий из нескольких шагов. Каждый шаг может зависеть от предыдущих. Например, если вы выгружаете данные из API, потом обрабатываете их и загружаете в базу данных, то на каждом этапе нужно, чтобы предыдущий успешно завершился.
Для понимания проще посмотреть на пример кода:
from datetime import datetime
from airflow import DAG
from airflow.operators.python import PythonOperator
def fetch_data():
print("Fetching data...")
def process_data():
print("Processing data...")
def save_data():
print("Saving data to database...")
with DAG(
dag_id='data_pipeline',
start_date=datetime(2023, 10, 1),
schedule_interval='@daily',
catchup=False
) as dag:
task_fetch = PythonOperator(
task_id='fetch_data',
python_callable=fetch_data
)
task_process = PythonOperator(
task_id='process_data',
python_callable=process_data
)
task_save = PythonOperator(
task_id='save_data',
python_callable=save_data
)
task_fetch >> task_process >> task_save
В этом коде мы создаем DAG с тремя заданиями:
fetch_data
, process_data
и save_data
. Задачи выполняются последовательно благодаря использованию оператора >>
, который определяет зависимости.---
### Чем полезен Apache Airflow?
#### 1. Автоматизация рутинных задач
Airflow забирает на себя всю рутину: выполнение задач по расписанию, переопределение зависимостей, обработку ошибок. Это настоящий must-have для тех, кто хочет тратить меньше времени на повторяющиеся процессы.
#### 2. Гибкость
Поскольку весь рабочий процесс описывается на Python, вы можете внедрить любую логику, использовать любые библиотеки и адаптировать Airflow под свои нужды.
#### 3. Мониторинг и удобство отладки
Airflow предоставляет удобный веб-интерфейс. Вы можете посмотреть статусы выполнения задач, перезапустить их, если что-то пошло не так, или изучить логи.
#### 4. Расширяемость
Да, вы можете создавать свои собственные операторы, плагины и интеграции. Airflow поддерживает огромное количество уже готовых операторов для работы с Google Cloud, AWS, Azure, базами данных и другими инструментами.
---
### Как установить Apache Airflow?
Установка Airflow может быть немного сложной, но давайте я проведу вас через этот процесс шаг за шагом.