Как объединить разные временные ряды в 2D в Python - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть три разных данных временных рядов следующего формата, где первый столбец является меткой времени, а второй столбец является значением.

0.086206438,10
0.086425551,12
0.089227066,20
0.089262508,24
0.089744425,30
0.090036815,40
0.090054172,28
0.090377569,28
0.090514071,28
0.090762872,28
0.090912691,27

Для воспроизводимости я поделился данными трех временных рядовЯ использую здесь .

Из столбца 2 я хотел прочитать текущую строку и сравнить ее со значением предыдущей строки.Если оно больше, я продолжаю сравнивать.Если текущее значение меньше, чем значение предыдущего ряда, продолжить, я беру разницу.Позвольте мне прояснить это.Например, в приведенном выше примере записи, которую я предоставил, седьмая строка (28) меньше значения в шестой строке (40), поэтому она будет (40-28 = 12).

Вот мойПример кода.

import numpy as np
import pandas as pd
import csv
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import norm
from statsmodels.graphics.tsaplots import plot_acf, acf


protocols = {}


types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}

for protname, fname in types.items():
    arr = []  
    arr1 = []  
    with open(fname, mode='r', encoding='utf-8-sig') as f:
        reader = csv.reader(f, delimiter=",")
        for i in reader:
            arr.append(int(i[1])) 
            arr1.append(float(i[0])) 

    arr, arr1 = np.array(arr), np.array(arr1)
    diffs = np.diff(arr)
    diffs1 = np.diff(arr1)
    diffs1 = diffs1[diffs > 0] 
    diffs = diffs[diffs > 0] # To keep only the increased values
    protocols[protname] = {
        "rtime": np.array(arr1),
        "rdata": np.array(arr),
        "data": diffs,
        "timediff": diffs,
    }

## change in time 
for protname, values in protocols.items():
    d = values["rdata"]
    t = values["rtime"]
    d = np.diff(d, 1) #/ d[:-1]
    t = np.diff(t, 1)
    plt.plot(t, d, ".", label=protname, alpha=0.5)
    plt.xlabel("Changes in time")
    plt.ylabel("differences")
    plt.legend()
    plt.show()

Это дает мне следующие графики

enter image description here enter image description here enter image description here

Как можно изобразить разницу в зависимости от изменения во времени (столбец onw) на двумерном (2D) графике трех данных, которые я включил отдельно?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Если вы измените цикл

for protname, values in protocols.items():
    d = values["rdata"]
    t = values["rtime"]
    d = np.diff(d, 1) #/ d[:-1]
    t = np.diff(t, 1)
    plt.plot(t, d, ".", label=protname, alpha=0.5)
    plt.xlabel("Changes in time")
    plt.ylabel("differences")
    plt.legend()
    plt.show()

на

for protname, values in protocols.items():
    d = values["rdata"]
    t = values["rtime"]
    d = np.diff(d, 1) #/ d[:-1]
    t = np.diff(t, 1)
    plt.plot(t[d < 0], d[d < 0], ".", label=protname, alpha=0.5)
    plt.xlabel("Changes in time")
    plt.ylabel("differences")
    plt.legend()

plt.show()

Вы получите график, который выглядит как Filtered plot

Я считаю, что это то, что вы ищете - если я правильно вас понял.

0 голосов
/ 15 февраля 2019

Все три графика в одном: неубранный plt.show()

Отображение только отрицательных значений массива:

plt.plot(t[d<0], d[d<0], ...) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...