Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions data/LYN_2023.csv
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# stationcode LYN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# latitude deg N 55.79065,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# longitude deg E 12.52509,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# altitude in m amsl 40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# timezone offset from UTC in hours 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# time stamp (Year Month Day Hour Minute) reference is in UTC and refers to the end of the period,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# missing data points in GHI DNI and DIF are noted with -999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# GHI is the global horizontal irradiance in W/m2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# DNI is the direct normal irradiance in W/m2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# DIF is the diffuse horizontal irradiance in W/m2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# GHIcalc is the calculated GHI from DNI and DIF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# Elev is the solar elevation in deg,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# Azim is the solar azimuth angle in deg N,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# Kc is the clearsky index calculated with CAMS mcclear with GHIcalc/GHI McClear,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# usable is the validity of a data point with 1 being valid and 0 being not usable,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# flag values from various tests: 1 means the data failed the test. 0 means the test was passed. -999 means the test domain was not met,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
# stationcode LYN
# latitude deg N 55.79065
# longitude deg E 12.52509
# altitude in m amsl 40
#
# time stamp (Year Month Day Hour Minute) is in UTC and refers to the end of the period
# missing data points in GHI DNI and DIF are noted as empty cells
# GHI is the global horizontal irradiance in W/m2
# DNI is the direct normal irradiance in W/m2
# DIF is the diffuse horizontal irradiance in W/m2
# GHIcalc is the calculated GHI from DNI and DIF
# Elev is the solar elevation in deg
# Azim is the solar azimuth angle in deg N
# Kc is the clearsky index calculated with CAMS mcclear with GHIcalc/GHI McClear
# usable is the validity of a data point with 1 being valid and 0 being not usable
# flag values from various tests: 1 means the data failed the test. 0 means the test was passed.
Year,Month,Day,Hour,Minute,GHI,DNI,DIF,GHIcalc,Elev,Azim,Kc,usable,flagPPLDIF,flagERLDIF,flagPPLDNI,flagERLDNI,flagPPLGHI,flagERLGHI,flag3highSZA,flag3lowSZA,flagKt,flagKKt,flagKn,flagKnKt,flagKhighSZA,flagKlowSZA,flagTracker,flagManual
2023,1,1,0,0,-0.1224,-0.06081,-0.16,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,1,-0.1176,-0.04698,-0.1671,,,,,,,,,,,,,,,,,,,,,
Expand Down
1 change: 1 addition & 0 deletions docs/source/documentation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ Code documentation
quality.bsrn_limits
quality.bsrn_limits_flag
iotools.read_t16
iotools.write_t16
processing.resample_to_freq
1 change: 1 addition & 0 deletions src/solarpy/iotools/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from solarpy.iotools.read_t16 import read_t16 # noqa: F401
from solarpy.iotools.write_t16 import write_t16 # noqa: F401
70 changes: 42 additions & 28 deletions src/solarpy/iotools/read_t16.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
import numpy as np
import pandas as pd

VARIABLE_MAP = {
"GHI": "ghi",
"DIF": "dhi",
"DNI": "dni",
"GHI_clear": "ghi_clear",
"DIF_clear": "dhi_clear",
"DNI_clear": "dni_clear",
"BHI_clear": "bhi_clear",
"GHI_extra": "ghi_extra",
"DNI_extra": "dni_extra",
}

def read_t16(filename, drop_dates=False, map_variables=False,
encoding='utf-8'):

def read_t16(filename, drop_dates=False, map_variables=False, encoding="utf-8"):
"""
Read a time series data file following the IEA PVPS T16 file format.

Expand All @@ -30,60 +41,63 @@ def read_t16(filename, drop_dates=False, map_variables=False,

"""
meta = {
'stationcode': None,
'latitude deg N': np.nan,
'longitude deg E': np.nan,
'altitude in m amsl': np.nan,
'timezone offset from UTC in hours': np.nan,
"stationcode": None,
"latitude deg N": np.nan,
"longitude deg E": np.nan,
"altitude in m amsl": np.nan,
}

with open(filename, 'r', encoding=encoding) as fbuf:
with open(filename, "r", encoding=encoding) as fbuf:
# Parse through initial metadata section (lines starting with #)
while True:
line = fbuf.readline().strip()

# lines with metadata
if line.startswith('#'):
line = line.lstrip('#')
if line.startswith("#"):
line = line.lstrip("#")
# line with column names
else:
names = line.split(',')
names = line.split(",")
break

for mk in meta.keys():
if mk in line:
meta[mk] = line.replace(mk, '').replace(',', '').strip()
meta[mk] = line.replace(mk, "").replace(",", "").strip()
# Fix issue in older files
meta[mk] = meta[mk].replace('longitude deg N', 'longitude deg E')
meta[mk] = meta[mk].replace("longitude deg N", "longitude deg E")

for k in ['latitude deg N', 'longitude deg E', 'altitude in m amsl',
'timezone offset from UTC in hours']:
meta[k] = float(meta[k])
if meta['stationcode'] == '':
meta['stationcode'] = None
for k in [
"latitude deg N",
"longitude deg E",
"altitude in m amsl",
]:
# convert to float or int
meta[k] = float(meta[k]) if "." in meta[k] else int(meta[k])
if meta["stationcode"] == "":
meta["stationcode"] = None

data = pd.read_csv(
fbuf,
sep=',',
sep=",",
names=names,
na_values=[-999, -9999, 'NAN'],
na_values=[-999, -9999, "NAN"],
# Both naming conventions of comment occur
dtype={'comments': str, 'Comments': str,
'Remarks': str},
dtype={"comments": str, "Comments": str, "Remarks": str},
)

datetime_columns = ['Year', 'Month', 'Day', 'Hour', 'Minute']
datetime_columns = ["Year", "Month", "Day", "Hour", "Minute"]

data.index = pd.to_datetime(
data[datetime_columns].rename(columns=str.lower)).dt.tz_localize('UTC')
data[datetime_columns].rename(columns=str.lower)
).dt.tz_localize("UTC")

if drop_dates:
data = data.drop(columns=datetime_columns)

if map_variables:
meta['latitude'] = meta.pop('latitude deg N')
meta['longitude'] = meta.pop('longitude deg E')
meta['altitude'] = meta.pop('altitude in m amsl')
data = data.rename(columns={'GHI': 'ghi', 'DIF': 'dhi', 'DNI': 'dni'})
meta["latitude"] = meta.pop("latitude deg N")
meta["longitude"] = meta.pop("longitude deg E")
meta["altitude"] = meta.pop("altitude in m amsl")
data = data.rename(columns=VARIABLE_MAP)

return data, meta
72 changes: 72 additions & 0 deletions src/solarpy/iotools/write_t16.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import pandas as pd


# %%
def write_t16(filename, data, meta, lines=None, missing=None, encoding="utf-8"):
"""Write a time series DataFrame to a file in the IEA PVPS T16 format.

Parameters
----------
filename : str or path-like
Path to the output file.
data : pandas.DataFrame
Time series data with a timezone-aware ``DatetimeIndex``; the index
is converted to UTC before extracting Year/Month/Day/Hour/Minute.
Column names are written as-is to the header row.
meta : dict
Station metadata. Recognised keys (either short or long form):

- ``"latitude"`` or ``"latitude deg N"``
- ``"longitude"`` or ``"longitude deg E"``
- ``"altitude"`` or ``"altitude in m amsl"``
- ``"stationcode"`` *(optional)*
lines : list of str or None, default ``None``
Additional lines written to the header after the location metadata,
each prefixed with ``"# "``. If ``None``, no extra lines are written.
missing : str or None, default ``None``
String written in place of missing (NaN) values. ``None`` leaves the
cell empty.
encoding : str, default ``"utf-8"``
File encoding passed to ``open()``.
"""
latitude = meta.get("latitude", meta.get("latitude deg N"))
longitude = meta.get("longitude", meta.get("longitude deg E"))
altitude = meta.get("altitude", meta.get("altitude in m amsl"))
stationcode = meta.get("stationcode", "")

utc_index = data.index.tz_convert("UTC")
datetime_cols = pd.DataFrame(
{
"Year": utc_index.year,
"Month": utc_index.month,
"Day": utc_index.day,
"Hour": utc_index.hour,
"Minute": utc_index.minute,
},
index=data.index,
)

# Add time columns and drop existing time columns if present
_datetime_col_names = ["Year", "Month", "Day", "Hour", "Minute"]
out = pd.concat(
[datetime_cols, data.drop(columns=_datetime_col_names, errors="ignore")], axis=1
)

missing_ref = "empty cells" if missing is None else missing

with open(filename, "w", encoding=encoding) as f:
f.write(f"# stationcode {stationcode}\n")
f.write(f"# latitude deg N {latitude}\n")
f.write(f"# longitude deg E {longitude}\n")
f.write(f"# altitude in m amsl {altitude}\n")
f.write("# \n")
f.write(
"# time stamp (Year Month Day Hour Minute) is in UTC and refers to the end of the period\n" # noqa: E501
)
f.write(
f"# missing data points in GHI DNI and DIF are noted as {missing_ref}\n"
)
for line in lines or []:
f.write(f"# {line}\n")
na_rep = "" if missing is None else missing
out.to_csv(f, index=False, na_rep=na_rep, lineterminator="\n")
137 changes: 137 additions & 0 deletions tests/data/LYN_2023_short.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# stationcode LYN
# latitude deg N 55.79065
# longitude deg E 12.52509
# altitude in m amsl 40
#
# time stamp (Year Month Day Hour Minute) is in UTC and refers to the end of the period
# missing data points in GHI DNI and DIF are noted as empty cells
# GHI is the global horizontal irradiance in W/m2
# DNI is the direct normal irradiance in W/m2
# DIF is the diffuse horizontal irradiance in W/m2
# GHIcalc is the calculated GHI from DNI and DIF
# Elev is the solar elevation in deg
# Azim is the solar azimuth angle in deg N
# Kc is the clearsky index calculated with CAMS mcclear with GHIcalc/GHI McClear
# usable is the validity of a data point with 1 being valid and 0 being not usable
# flag values from various tests: 1 means the data failed the test. 0 means the test was passed.
Year,Month,Day,Hour,Minute,GHI,DNI,DIF,GHIcalc,Elev,Azim,Kc,usable,flagPPLDIF,flagERLDIF,flagPPLDNI,flagERLDNI,flagPPLGHI,flagERLGHI,flag3highSZA,flag3lowSZA,flagKt,flagKKt,flagKn,flagKnKt,flagKhighSZA,flagKlowSZA,flagTracker,flagManual
2023,1,1,0,0,-0.1224,-0.06081,-0.16,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,1,-0.1176,-0.04698,-0.1671,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,2,-0.1302,-0.0529,-0.1765,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,3,-0.1258,-0.05213,-0.1822,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,4,-0.1279,-0.05613,-0.176,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,5,-0.1226,-0.05611,-0.1748,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,6,-0.1292,-0.0573,-0.1777,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,7,-0.1446,-0.0644,-0.194,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,8,-0.1505,-0.06834,-0.2038,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,9,-0.1489,-0.06418,-0.1925,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,10,-0.1351,-0.05588,-0.1899,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,11,-0.1496,-0.05769,-0.1907,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,12,-0.1297,-0.05676,-0.173,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,13,-0.1294,-0.06836,-0.1823,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,14,-0.1366,-0.0683,-0.1923,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,15,-0.1341,-0.05331,-0.1882,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,16,-0.1269,-0.05485,-0.1809,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,17,-0.1135,-0.0658,-0.1593,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,18,-0.1003,-0.06252,-0.1588,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,19,-0.09087,-0.05327,-0.1495,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,20,-0.09391,-0.05008,-0.1526,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,21,-0.1086,-0.05702,-0.1638,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,22,-0.09197,-0.05227,-0.1548,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,23,-0.1174,-0.06043,-0.1766,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,24,-0.1313,-0.06242,-0.1875,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,25,-0.1469,-0.05607,-0.1919,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,26,-0.135,-0.05053,-0.1876,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,27,-0.1307,-0.05136,-0.1888,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,28,-0.1411,-0.0468,-0.2007,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,29,-0.1539,-0.05035,-0.198,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,30,-0.1118,-0.03771,-0.1801,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,31,-0.09743,-0.03728,-0.1605,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,32,-0.1069,-0.03152,-0.1598,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,33,-0.08676,-0.03962,-0.151,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,34,-0.07335,-0.02951,-0.1396,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,35,-0.07482,-0.03063,-0.1287,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,36,-0.08169,-0.03333,-0.1444,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,37,-0.07467,-0.02331,-0.1323,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,38,-0.07664,-0.02949,-0.1383,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,39,-0.06863,-0.01919,-0.131,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,40,-0.06844,-0.0268,-0.1222,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,41,-0.04628,-0.01982,-0.1119,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,42,-0.0556,-0.02655,-0.1112,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,43,-0.05468,-0.03668,-0.1178,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,44,-0.0401,-0.03373,-0.09905,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,45,-0.03023,-0.02554,-0.09702,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,46,-0.0366,-0.02601,-0.09539,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,47,-0.01802,-0.02187,-0.08899,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,48,-0.02152,-0.01562,-0.07897,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,49,-0.01014,-0.01607,-0.07886,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,50,0.0006387,-0.0128,-0.06618,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,51,0.03859,-0.002978,-0.03596,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,52,0.03582,-0.009467,-0.03097,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,53,0.03582,-0.01091,-0.0286,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,54,0.05144,-0.006193,-0.01909,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,55,0.05168,-0.003984,-0.01833,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,56,0.08026,0.007534,-0.005011,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,57,0.1076,-0.006134,0.01878,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,58,0.1096,0.004615,0.02994,,,,,,,,,,,,,,,,,,,,,
2023,1,1,0,59,0.13,0.005641,0.03861,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,0,0.144,0.01108,0.0483,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,1,0.1256,0.002386,0.04298,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,2,0.1736,0.01215,0.06227,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,3,0.201,0.005937,0.07519,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,4,0.1356,-0.01773,0.0491,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,5,0.09327,-0.02712,0.02312,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,6,0.0713,-0.02649,0.00445,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,7,0.04974,-0.02791,-0.01067,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,8,0.0445,-0.02112,-0.01473,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,9,0.02696,-0.02923,-0.02549,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,10,0.01783,-0.0282,-0.02375,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,11,0.02338,-0.02456,-0.02457,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,12,0.03641,-0.02485,-0.0239,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,13,0.03851,-0.02465,-0.01098,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,14,0.01978,-0.03503,-0.01842,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,15,0.0003484,-0.04424,-0.02838,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,16,-0.02586,-0.04978,-0.04946,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,17,-0.02841,-0.04672,-0.04707,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,18,-0.03366,-0.03915,-0.04635,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,19,-0.02007,-0.03061,-0.05082,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,20,-0.01862,-0.03611,-0.05321,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,21,-0.01256,-0.04047,-0.0508,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,22,-0.02193,-0.04294,-0.04566,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,23,0.03791,-0.0369,-0.0214,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,24,0.033,-0.04075,-0.02048,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,25,-0.01715,-0.06154,-0.03886,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,26,-0.01467,-0.0556,-0.04074,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,27,0.0101,-0.04343,-0.03544,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,28,-0.02195,-0.0638,-0.04819,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,29,0.01115,-0.05773,-0.03255,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,30,0.02313,-0.06491,-0.02757,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,31,0.08371,-0.04925,0.01261,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,32,0.08491,-0.0629,0.02021,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,33,0.1518,-0.05031,0.05708,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,34,0.1679,-0.09516,0.06439,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,35,0.114,-0.1354,0.03958,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,36,0.03259,-0.1865,-0.001248,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,37,0.05268,-0.1483,0.009462,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,38,0.01192,-0.1555,0.000597,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,39,0.01281,-0.1629,-0.008376,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,40,0.105,-0.1159,0.03483,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,41,0.004161,-0.1673,-0.02156,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,42,-0.004529,-0.1523,-0.03088,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,43,0.007897,-0.1414,-0.01478,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,44,0.0126,-0.1185,-0.01549,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,45,0.01732,-0.1138,-0.01773,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,46,-0.03627,-0.1232,-0.03754,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,47,-0.03704,-0.1219,-0.04743,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,48,0.02899,-0.08818,-0.01389,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,49,0.02251,-0.08783,-0.01789,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,50,-0.01386,-0.1061,-0.03528,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,51,0.01094,-0.08465,-0.02511,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,52,0.03718,-0.09704,-0.01192,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,53,-0.007993,-0.1207,-0.03034,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,54,0.03265,-0.09221,-0.007236,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,55,0.04726,-0.1091,-0.003582,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,56,-0.002052,-0.1283,-0.02902,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,57,-0.0209,-0.1218,-0.03445,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,58,-0.01353,-0.09583,-0.04014,,,,,,,,,,,,,,,,,,,,,
2023,1,1,1,59,0.04343,-0.06507,-0.007833,,,,,,,,,,,,,,,,,,,,,
Loading
Loading