Как переместить даты в JSON так, чтобы дни совпадали друг с другом? - PullRequest
0 голосов
/ 02 марта 2020

Формат JSON такой. Я выполняю расчеты по данным, например, на дату 1 января 2017 года. Например, 1 января 2017 года будет воскресенье. Но в 2018 году 1 января 2018 года будет понедельник. Теперь я знаю, что каждый год в эти дни на 1 шаг вперед. Но мои расчеты основаны на днях, например, мне нужно сравнивать значения понедельника с понедельником, а не с выходными, потому что коэффициент, который я вычислю, будет неверным, если сравнивать будний день с выходными.

import plotly.graph_objects as go

import numpy as np
import json

with open('test.json') as json_file:
    data = json.load(json_file)
X, Y = [], []
for item in data['Elements']:
    for sub_item in item['TimeSpans']:
        if (item['Date'].startswith("2017")):
            X.append(sub_item['TimeSpan']+" "+ item['Date'])        #2017
            Y.append(sub_item['Value'])

X1, Y1 = [], []
for item in data['Elements']:
    for sub_item in item['TimeSpans']:
        if (item['Date'].startswith("2018")):
            X1.append(sub_item['TimeSpan']+" "+ item['Date'])       #2018
            Y1.append(sub_item['Value'])
diff = []

for i in range(len(Y)):

    if(Y[i]==0):
        diff.append(1)
    if(Y1[i]==0):
        diff.append(1)
    else:
        var = Y[i] / Y1[i] 
        diff.append(var)
#print(diff[0])



XP=[]
YP=[]
for k in range(len(Y1)): #len(diff)
    if (Y1[k]==0):
        YP.append(Y1[k])
    if (diff[k]==0):
        YP.append(Y1[k])
    var2 =   Y1[k]/diff[k] 
    YP.append(var2)



for item in data['Elements']:
    for sub_item in item['TimeSpans']:
        if (item['Date'].startswith("2019")):
            XP.append(sub_item['TimeSpan']+" "+ item['Date'])       #2019

{
    "SpotKey": "79",
    "SpotName": "ELIX",
    "Denomination": "eur/mwh",
    "Elements": [
      {
        "Date": "2017-01-01T00:00:00",
        "Base": 36.8696,
        "Peak": 36.0125,
        "TimeSpans": [
          {
            "TimeSpan": "00:00-01:00",
            "Value": 46.43
          },
          {
            "TimeSpan": "01:00-02:00",
            "Value": 42.43
          }
        ]
      },
      {
        "Date": "2017-01-02T00:00:00",
        "Base": 53.7413,
        "Peak": 63.0317,
        "TimeSpans": [
          {
            "TimeSpan": "00:00-01:00",
            "Value": 41.18
          },
          {
            "TimeSpan": "01:00-02:00",
            "Value": 37.34
          }
        ]
      }
    ]
}

Итак, здесь я пытаюсь предсказать данные за 2019 год и визуализировать их с помощью графика. Как мне преодолеть эту дату с проблемой соответствия дня?

Date=[]
for item in data['Elements']:
    for sub_item in item['TimeSpans']:
        if (item['Date'].startswith("2017")):
            iso_day = datetime.datetime.strptime(item['Date'], '%Y-%m-%dT%H:%M:%S').isocalendar()       #Moving Date Logic
            iso_day[2] == 1
            Date.append(iso_day)

for loop in range(len(Date)):
    print(Date[loop])

1 Ответ

0 голосов
/ 02 марта 2020

Это общая проблема для фискальных лет. Он был определен в ISO 8601 с 1971 года как дата недели ISO соглашение (*). В этом соглашении день представлен как тройка (год, номер недели, номер дня сорняков). Первая неделя года (неделя 01) (эквивалентные определения):

  • первая неделя с большинством (4 или более) дней в январе.
  • единица для которого первый день - понедельник, ближайший к 1 января.
  • тот, в котором 4 января.

Хорошая новость заключается в том, что модуль Python datetime знает об этом:

date.isocalendar (): вернуть 3-х кортеж (год ISO, номер недели ISO, день недели ISO).

Если вы конвертируете даты с этим:

iso_day = datetime.datetime.strptime(item['Date'], '%Y-%m-%dT%H:%M:%S').isocalendar()

iso_day[0] будет подходящим годом, и вы должны контролировать, что первые дни iso_day[2] == 1 должны начинаться с понедельника и в конечном итоге игнорировать предыдущие дни.


Ссылки в Википедии:

...