Визуализация данных в Python относится к графическому представлению необработанных данных для лучшей визуализации, понимания и выводов. Python предоставляет различные библиотеки, содержащие различные функции для визуализации данных, и может поддерживать различные типы графиков, например, Matplotlib, Seaborn, Bokeh, Plotly и другие.
Требуемый модуль:
pip install numpy matplotlib
Что такое динамическая визуализация в Python
Динамическая визуализация для любой системы означает графическое представление изменения состояния текущей системы во время презентации. В аспекте визуализации данных в Python динамическая визуализация — это динамический график, который либо меняется с течением времени, как в видео, либо может меняться по мере того, как пользователь меняет ввод, но в текущей презентации, как если бы он был живым.
Шаги для создания динамического графика в Python
Ниже приведены шаги для создания нашей первой динамической визуализации в Python.
Шаг 1. Создайте очередь фиксированной длины
Очередь — это линейная структура данных, в которой элементы хранятся по принципу «первым пришел — первым обслужен» (FIFO) . Это может быть реализовано различными способами в Python. Создание очереди фиксированной длины для динамического построения графиков в Python означает создание структуры данных, которая может хранить фиксированное количество элементов и отбрасывать самый старый элемент при заполнении контейнера. Это полезно, когда мы хотим построить точки данных, которые постоянно обновляются. Ограничив размер контейнера, мы можем предотвратить переполнение графика, что улучшит производительность и ясность графика.
Python3
# Deque is preferred over list in the cases where we need
# quicker append and pop operations from both the ends of container
from
collections
import
deque
# Create a deque with a maximum length of 3
data_points
=
deque(maxlen
=
3
)
# Add new data points to the deque
data_points.append(
40
)
data_points.append(
60
)
data_points.append(
30
)
# display the data points in the deque
(data_points)
# deque([40, 60, 30], maxlen=3)
# Add more data points to the deque
data_points.append(
13
)
data_points.append(
99
)
# The oldest data point is/are automatically
# removed from front of queue.
# deque([30, 13, 99], maxlen=3)
(data_points)
Выход
deque([40, 60, 30], maxlen=3) deque([30, 13, 99], maxlen=3)
Шаг 2. Создайте точки и сохраните их в очереди
Здесь мы динамически генерируем точки данных и добавляем их в структуру данных очереди, а не выполняем ручные операции, как показано в приведенном выше примере. Здесь мы будем использовать функции, доступные в случайном модуле Python, для создания точек данных.
Python3
from
collections
import
deque
import
random
# Create a deque with fixed length 5
data_points
=
deque(maxlen
=
5
)
# Generate and append data points to the deque
# we iterate 2 extra times to demonstrate how
# queue removes values from front
for
i
in
range
(
7
):
# generate random numbers between 0
# to 100 (both inclusive)
new_data_point
=
random.randint(
0
,
100
)
data_points.append(new_data_point)
(data_points)
Выход
Примечание. Выход будет отличаться.
deque([64], maxlen=5) deque([64, 57], maxlen=5) deque([64, 57, 15], maxlen=5) deque([64, 57, 15, 31], maxlen=5) deque([64, 57, 15, 31, 35], maxlen=5) deque([57, 15, 31, 35, 25], maxlen=5) deque([15, 31, 35, 25, 12], maxlen=5)
Шаг 3. Удаляем первую точку
При динамическом построении в Python, когда мы создаем новую точку данных и добавляем ее в очередь фиксированной длины, нам нужно удалить самую старую точку из очереди, чтобы сохранить фиксированную длину очереди. Здесь мы удаляем элемент с левой стороны по принципу FIFO.
Python3
from
collections
import
deque
import
random
# Create a deque with fixed length
data_points
=
deque(maxlen
=
5
)
# Append 5 data points to the deque at once using extend method.
data_points.extend([
1
,
2
,
3
,
4
,
5
])
# Print the deque before removing the first element
(
"Deque before removing the first element:"
, data_points)
# Remove the first element from the deque
data_points.popleft()
# Print the deque after removing the first element
(
"Deque after removing the first element:"
, data_points)
Выход
Deque before removing the first element: deque([1, 2, 3, 4, 5], maxlen=5) Deque after removing the first element: deque([2, 3, 4, 5], maxlen=5)
Шаг 4. Постройте очередь. Приостановите график, чтобы визуализировать
Сначала мы отображаем точки данных, которые хранятся в очереди, с помощью Matplotlib, а затем приостанавливаем график на определенное время, чтобы график можно было визуализировать, прежде чем он будет обновлен следующим набором точек данных. Это можно сделать с помощью функции plt.pause() в Matplotlib.
Здесь, в нашем примере блока кода, мы сгенерируем случайный набор значений y для постоянного увеличения значений оси x от 0, а затем посмотрим на график, а затем приостановим его. Объяснение кода следующее.
- data_points = deque(maxlen=50):Создайте объект очереди с максимальной длиной 50 для хранения точек данных.
- fig, ax = plt.subplots():создайте фигуру и объект осей для графика.
- line = ax.plot([]):Создайте пустой график с помощью метода plot() объекта осей и сохраните его в переменной строки.
- ax.set_xlim(0, 100) и ax.set_ylim(0, 100):установите пределы оси x и оси y на 0 и 100 соответственно.
- for I in range(50): повторите 50 точек данных, чтобы обновить график. Создайте новые точки данных для осей x и y. Добавьте новые точки данных в очередь. Обновите график новыми точками данных, используя метод set_data() объекта линии. Приостановите график на 0,01 секунды, используя plt.pause(0,01), чтобы дать графику время для обновления.
Python3
import
matplotlib.pyplot as plt
from
collections
import
deque
import
random
# Create a fixed-length deque of size 50 to store the data points
data_points
=
deque(maxlen
=
50
)
# Create an empty plot
fig, ax
=
plt.subplots()
line
=
ax.plot([])
# Set the x-axis and y-axis limits to 100
ax.set_xlim(
0
,
100
)
ax.set_ylim(
0
,
100
)
# Iterate through 50 data points and update the plot
for
i
in
range
(
50
):
# Generate and add data points to the deque
new_x
=
i
# generate a random number between 0 to 100 for y axis
new_y
=
random.randint(
0
,
100
)
data_points.append((new_x, new_y))
# Update the plot with the new data points
x_values
=
[x
for
x, y
in
data_points]
y_values
=
[y
for
x, y
in
data_points]
line.set_data(x_values, y_values)
# pause the plot for 0.01s before next point is shown
plt.pause(
0.01
)
# Show the plot
plt.show()
Выход :
График для приведенного выше блока кода ( обратите внимание, что вывод будет меняться, поскольку y генерируется случайным образом)
Шаг 5. Очистите график для следующего набора значений
При обновлении точек данных в режиме реального времени мы очищаем график перед построением следующего набора значений. Это можно сделать с помощью функции line.set_data([], []) в Matplotlib, чтобы мы поддерживали отображение фиксированного размера структуры данных очереди в режиме реального времени.
Примечание. При удалении из очереди, даже если элементы не извлекаются, они автоматически удаляются из начала очереди по принципу FIFO. Объяснение кода следующее.
- data_points = deque(maxlen=50): создайте объект очереди с максимальной длиной 50 для хранения точек данных
- fig, ax = plt.subplots(): Создайте фигуру и объект осей для графика.
- line, = ax.plot([]): создайте пустой график с помощью метода plot() объекта осей и сохраните его в переменной строки.
- set_xlim(0, 100) и ax.set_ylim(0, 100): установите пределы оси x и оси y на 0 и 100 соответственно.
- for i in range(100): повторите 100 точек данных, чтобы обновить график. Создайте новые точки данных для осей x и y. Добавьте новые точки данных в очередь. Обновите график новыми точками данных, используя метод set_data() объекта линии. Приостановите график на 0,01 секунды, используя plt. pause(0.01) для обновления графика. Очистите график для следующего набора точек данных, вызвав функцию line.set_data([], []).
Python3
import
matplotlib.pyplot as plt
from
collections
import
deque
import
random
# Create a fixed-length deque to store the data points
data_points
=
deque(maxlen
=
50
)
# Create an empty plot
fig, ax
=
plt.subplots()
line,
=
ax.plot([])
# Set the x-axis and y-axis limits
ax.set_xlim(
0
,
100
)
ax.set_ylim(
0
,
100
)
# Iterate through the data points and update the plot
for
i
in
range
(
100
):
# Generate and add data points to the deque
new_x
=
i
new_y
=
random.randint(
0
,
100
)
data_points.append((new_x, new_y))
# Update the plot with the new data points
x_values
=
[x
for
x, y
in
data_points]
y_values
=
[y
for
x, y
in
data_points]
line.set_data(x_values, y_values)
plt.pause(
0.01
)
# Clear the plot for the next set of values
line.set_data([], [])
# Show the plot
plt.show()
Выход:
График для приведенного выше кода ( Примечание : график может отличаться, поскольку y является случайным)
Динамический график рассеяния
Объяснение кода следующее.
- data_points = deque(maxlen=50): создайте объект очереди с максимальной длиной 50 для хранения точек данных.
- fig, ax = plt.subplots(): Создайте фигуру и объект осей для графика.
- set_xlim(0, 100)и ax.set_ylim(0, 100) : установите пределы оси x и оси y на 0 и 100 соответственно.
- scatter = ax.scatter([], []): создайте пустой точечный график, используя метод scatter() объекта осей, и сохраните его в переменной рассеяния. Метод scatter() принимает пустые списки в качестве аргументов для координат x и y, которые будут обновлены позже.
- for i in range(100):повторите 100 точек данных, чтобы обновить точечную диаграмму. Создайте новые точки данных для осей x и y. Добавьте новые точки данных в очередь. Обновите точечный график новыми точками данных, используя метод set_offsets() объекта рассеяния. Метод set_offsets() принимает список кортежей, представляющих координаты x и y точек данных. Приостановите график на 0,01 секунды, используя plt.pause(0,01), чтобы дать графику время для обновления.
Python3
import
matplotlib.pyplot as plt
from
collections
import
deque
import
random
# Create a fixed-length deque of length 50 to store the data points
data_points
=
deque(maxlen
=
50
)
# Create an empty plot
fig, ax
=
plt.subplots()
# Set the x-axis and y-axis limits to 100
ax.set_xlim(
0
,
100
)
ax.set_ylim(
0
,
100
)
# Create a scatter plot to visualize the data points
scatter
=
ax.scatter([], [])
# Iterate through the data points and update the scatter plot
for
i
in
range
(
100
):
# Generate and add data points to the deque
new_x
=
i
new_y
=
random.randint(
0
,
100
)
data_points.append((new_x, new_y))
# Update the scatter plot with the new data points
x_values
=
[x
for
x, y
in
data_points]
y_values
=
[y
for
x, y
in
data_points]
scatter.set_offsets(
list
(
zip
(x_values, y_values)))
plt.pause(
0.01
)
# Show the plot
plt.show()
Выход:
График для приведенного выше кода ( Примечание: график может отличаться, так как y является случайным)
Динамический точечный график и линейный график
Объяснение кода следующее.
- fig, ax = plt.subplots(): Создайте фигуру и объект осей для графика.
- line, = ax.plot([]): создайте пустой линейный график, используя метод plot() объекта осей, и сохраните его в переменной строки. Аргумент [] указывает, что данные изначально не отображаются на линейном графике.
- set_xlim(0, 100)и ax.set_ylim(0, 100) : установите пределы оси x и оси y на 0 и 100 соответственно.
- scatter = ax.scatter([], []): создайте пустой точечный график, используя метод scatter() объекта осей, и сохраните его в переменной рассеяния. Метод scatter() принимает пустые списки в качестве аргументов для координат x и y, которые будут обновлены позже.
- for i in range(100):: Повторить 100 точек данных, чтобы обновить точечный график и линейный график. Создайте новые точки данных для осей x и y. Добавьте новые точки данных в очередь. Обновите точечную диаграмму новыми точками данных, используя метод set_offsets() объекта рассеяния. Метод set_offsets() принимает список кортежей, представляющих координаты x и y точек данных. Обновите линейный график новыми точками данных, используя метод set_data() объекта линии. Метод set_data () принимает значения x и y в качестве аргументов. Приостановите график на 0,01 секунды, используя pause(0,01), чтобы дать графику время для обновления.
Python3
import
matplotlib.pyplot as plt
from
collections
import
deque
import
random
from
matplotlib.animation
import
FuncAnimation
# Create a fixed-length deque of length 50 to store the data points
data_points
=
deque(maxlen
=
50
)
# Create an empty plot
fig, ax
=
plt.subplots()
line,
=
ax.plot([])
# Set the x-axis and y-axis limits to 100
ax.set_xlim(
0
,
100
)
ax.set_ylim(
0
,
100
)
# Create a scatter plot to visualize the data points
scatter
=
ax.scatter([], [])
# Iterate through the data points and update the scatter plot
for
i
in
range
(
100
):
# Generate and add data points to the deque
new_x
=
i
new_y
=
random.randint(
0
,
100
)
data_points.append((new_x, new_y))
# Update the scatter plot with the new data points
x_values
=
[x
for
x, y
in
data_points]
y_values
=
[y
for
x, y
in
data_points]
scatter.set_offsets(
list
(
zip
(x_values, y_values)))
line.set_data(x_values, y_values)
plt.pause(
0.01
)
# Save the animation as an animated GIF
plt.show()
Выход:
Оба сюжета