Есть ли способ найти значение Y, превышающее X% времени во временном ряду? - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь найти способы расчета решения (в js) для следующего сценария:

Скажем, мне дают стандартный ряд времени с приличным количеством отклонений (например, https://codepen.io/quirkules/pen/wvBYarM). Эти временные ряды будут меняться в зависимости от набора данных.

Пример данных:

var data = [
  {
    "date": "30/04/2012", // DD/MM/YYYY
    "close": 14
  },
  {
    "date": "1/05/2012",
    "close": 2
  },
  {
    "date": "2/05/2012",
    "close": 14
  },
  {
    "date": "3/05/2012",
    "close": 5
  },
  {
    "date": "4/05/2012",
    "close": 14
  }

Я хочу определить правильное значение Y, которое будет превышать X% времени. Например, если диапазон дат составлял 50 дней, и я хотел знать, какое значение будет превышено в 50% случаев, это означало бы, что это значение Y превышено для общего числа из 25 дней.

Примечание: в зависимости от характера набора данных, это может быть «самое близкое значение» к желаемому значению Y. Снова взяв предыдущий пример, ограничения графика могут означать, что мы можем найти только значение Y, которое превышено в 40% случаев при максимальных усилиях.

Я предполагаю, что это будет линейный проблема регрессионного типа, но я не использовал ее раньше. Я также не уверен, что это можно решить, используя чистый JS или другую библиотеку (например, tenorflow), но я был бы открыт для идей.

Любая помощь будет принята

1 Ответ

1 голос
/ 18 января 2020

Если данные не велики, старый добрый для l oop сделает это достаточно просто: https://codepen.io/Alexander9111/pen/rNaqwrg

document.querySelector("#search").addEventListener('click', function(e){
    var search_val = document.querySelector("#input").value;
    var times_over_val = 0;
    for (i = 0; i < data.length; i++){
        if (i >= search_val){
            times_over_val++;
        }
    }
    document.querySelector("#output").innerText = "The data was over the value of: " + search_val + ", " + Math.round(100 * (times_over_val/data.length),2) + "% of the time (" + times_over_val + " out of " + data.length + ")";
});

Примечание. Я изменил ваш HTML :

<div id="search-container">
    <input id="input" value=""/>
    <button id="search">Search</button>
    <span id="output">Enter a value in the input then click search</span>
</div>
<div id="container">
</div>

И одна строка вашего кода d3:

var svg = d3.select("#container").append("svg")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...