Как использовать пользовательский временной ряд с этим кодом для Gramian Fields в python? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь превратить кривую ЭКГ (напряжение-время) в поле Грамана, которое можно подавать в CNN. Тем не менее, я не знаком со многими модулями этого кода, включая

FFmpeg moviepy

https://github.com/zapaishchykova/imaging_time_series

Как правильно использовать этот код GitHub для создания поля Грамана для пользовательского временного ряда, который я создал (предположим, он длится 45 секунд)?

Я использую ноутбук Jupyter и попытался запустить терминал Ubuntu с кодом:

python make_frame.py

Это создает файл MPEG, но он использует линейный временной ряд. Я не знаю, откуда это.

Это файл make_frame.py



# Plot
import matplotlib
import matplotlib.pyplot as plt
import math

# GIF
from moviepy.editor import VideoClip
from moviepy.video.io.bindings import mplfig_to_npimage

from tools import create_time_serie, cos_sum, tabulate
from gramian_angular_field import transform

# Jupyter
# %matplotlib inline

# Option to write gif
write_gif = False

# Instanciate figure
fig = plt.figure(figsize=(9, 6))

size = 0.33
alignement = 0.1

# Classic plot
ax_carthesian = fig.add_axes([alignement, 0.4, size, size])
# Polar plot
ax_polar = fig.add_axes([alignement + size, 0.4, size, size], polar=True)
# Patchwork
ax_patchwork = fig.add_axes([alignement + 1.8*size, 0.4, size, size])

# Global iteration
iteration = 0

# PLOTS
global size_time_serie
size_time_serie = float(45)


def make_frame(time):
    # Timesteps
    global iteration

    # Data
    time_serie = create_time_serie(45, 0)
    gaf, phi, r, scaled_time_serie = transform(time_serie)

    # Set to 0 unkown data at time stamp iteration
    # t[iteration:] = 0
    time_serie[iteration:] = 0
    scaled_time_serie[iteration:] = 0
    phi[iteration:] = math.acos(0)
    # r[iteration:] = 0
    gaf[iteration:, iteration:] = 0

    # PLOTS
    font = {
        'family': 'serif',
        'color':  'darkblue',
        'weight': 'normal',
        'size': 16,
        }

    # Clear plot
    ax_carthesian.clear()
    ax_polar.clear()
    ax_patchwork.clear()

    # Original Time series
    ax_carthesian.plot(time_serie, scaled_time_serie)
    ax_carthesian.set_title("Scaled Time Serie", fontdict=font)
    ax_carthesian.set_xticklabels([])

    # Polar encoding
    ax_polar.plot(phi, r)
    ax_polar.set_title("Polar Encoding", fontdict=font)
    ax_polar.set_rticks([0, 1])
    ax_polar.set_rlabel_position(-22.5)
    ax_polar.grid(True)

    # Gramian Angular Field
    ax_patchwork.matshow(gaf)
    ax_patchwork.set_title("Gramian Angular Field", fontdict=font)
    ax_patchwork.set_yticklabels([])
    ax_patchwork.set_xticklabels([])

    iteration = iteration + 1

    return mplfig_to_npimage(fig)


if __name__ == "__main__":

    # GIF: Write and visualise
    animation = VideoClip(make_frame, duration=2)

    if write_gif:
        animation.write_gif("gramian_angular_field.gif", fps=20)

    animation.ipython_display(fps=20, loop=True, autoplay=True)

Я ожидаю, что где-нибудь появится возможность ввести свой собственный временной ряд, но я не вижу, куда он идет. Извиняюсь за новизну этого вопроса.

...