Как получить значения X растянутого графа? - PullRequest
1 голос
/ 28 сентября 2011

Я пытаюсь каким-то образом нормализовать ежемесячные данные.

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

Единственная проблема в том, что некоторые месяцы длиннее других. Поэтому я придумала способ, которым я хочу это сделать, но я немного сбит с толку относительно того, как именно это сделать ...

По сути, я смотрю на этот веб-сайт: http://paulbourke.net/miscellaneous/interpolation/ и пытаюсь преобразовать каждый набор координат в график с 31 значениями X и Y (я хотел бы использовать интерполятор Cosine, но я Я все еще пытаюсь понять, что с этим делать).

Теперь значения X имеют функцию. Я могу передать что-то вроде (1..28) и превратить его в 31 значение ... достаточно простой код, что-то вроде этого работает для меня:

def total = (1..30)
def days = 28

def resize = {x, y->
    result = []
    x.each{ result << (it * (y/x.size())}
    return result
}

resize(total,days)

Возвращает список из 31 Y-значений в диапазоне от 0 до 28.

У меня вопрос: как мне перевести список соответствующих значений Y в эти значения? У меня действительно тяжелые времена, когда я обдумываю эту идею и могу использовать небольшую помощь.

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

Я ищу что-то, что сохранит значения в определенных точках, но просто растянет график горизонтально.

Например, при значении x в (1/3) длины графа значение должно быть таким же, как и в (1/3) от длины исходного графа.

Может кто-нибудь помочь мне в этом? Это поставило меня в тупик.

Заранее спасибо!

1 Ответ

4 голосов
/ 29 сентября 2011

Не уверен, в чем проблема с этим, поэтому я составил некоторые данные

Я думаю, что ваш алгоритм правильный, и вам нужно только нормализовать ось X.

Я придумал этот код (и некоторые графики), чтобы продемонстрировать то, что я считаю ответом

Определите некоторые значения x и y:

def x = 1..30
def y = [1..15,15..1].flatten()

Затем создайте список значений xy в форме: [ [ x, y ], [ x, y ], ...

def xy = [x,y].transpose()

Если мы построим этот список, мы получим:

a plot of the points from 1 to 30

Затем определите функцию нормализации (в основном, такую ​​же, как ваша, но она не касается значения y)

def normalize( xylist, days ) {
  xylist.collect { x, y -> [ x * ( days / xylist.size() ), y ] }
}

Тогда мы можем нормализовать наш список до 28 дней

def normalxy = normalize( xy, 28 )

Теперь, если мы построим эти точки, мы получим

a plot of the points from 1 to 28

Как видите, оба графика имеют одинаковую форму, они просто разной ширины ...

Я пропустил суть?

...