Skip to content
Snippets Groups Projects

Transfer ICOS data to level 1

Merged Martin Quanz requested to merge (removed):ICOS into master
1 unresolved thread
1 file
+ 24
31
Compare changes
  • Side-by-side
  • Inline
@@ -53,7 +53,7 @@ def aggregatePeriod(df):
return pd.Series(out)
def aggregateData(df, freq):
def aggregateData(df, freq="30T"):
df = df.sort_index(axis=1)
groups = (reindexTable(df)
.astype(float)
@@ -64,63 +64,56 @@ def aggregateData(df, freq):
return out
def _buildFname(device, date, frmt, freq):
ftemplate = "SoilNet_Data_{station}_{freq}_{box}_{date}.level2.csv"
def _buildFname(device, date, frmt):
ftemplate = "SoilNet_Data_{station}_30min_{box}_{date}.level2.csv"
return ftemplate.format(
station=device.station_key, box=device.logger_key,
date=datetime.strftime(date, frmt), freq=freq)
date=datetime.strftime(date, frmt))
def dailyPath(device, date, freq):
def dailyPath(device, date):
return Path(
device.derivedpath,
str(date.year),
_buildFname(device, date, "%Y%m%d", freq))
_buildFname(device, date, "%Y%m%d"))
def yearlyPath(device, date, freq):
def yearlyPath(device, date):
return Path(
device.derivedpath,
_buildFname(device, date, "%Y", freq))
_buildFname(device, date, "%Y"))
def writeData(data, device, freq_write, pathFunc, logger, freq):
for date, out in iterDataFreq(data, freq_write):
fname = pathFunc(device, date, freq)
def writeData(data, device, freq, pathFunc, logger):
for date, out in iterDataFreq(data, freq):
fname = pathFunc(device, date)
logger.debug("writing: %s", str(fname))
writeTable(fname, out, make_path=True)
def main(start_date, end_date, station=None, logger=None,
debug=False, ICOS=False, freq="30T"):
def main(station, device, start_date, end_date, debug):
with initLogger(__file__, debug) as log:
with initLogger(__file__, debug) as logger:
devices = getDevices(
station=station, logger=logger, tag="soilnet",
station=station, logger=device, tag="soilnet",
start_date=firstOfYear(start_date),
end_date=lastOfYear(end_date))
if ICOS:
devices = getDevices(
station=station, logger=logger, tag="soilnet_icos",
start_date=firstOfYear(start_date),
end_date=lastOfYear(end_date))
for device in devices:
msg = "soilnet aggregation failed for: {:}".format(
device)
with exceptionLogged(log, msg):
with exceptionLogged(logger, msg):
data = device.getL1Data()
if data.empty:
continue
log.info("aggregating: %s", device)
agg_data = aggregateData(data, freq)
logger.info("aggregating: %s", device)
agg_data = aggregateData(data)
writeData(agg_data[start_date:end_date], device,
freq_write="daily",
pathFunc=dailyPath, logger=log, freq=freq)
freq="daily",
pathFunc=dailyPath, logger=logger)
# could be hidden behind a flag
writeData(agg_data, device, freq_write="yearly",
pathFunc=yearlyPath, logger=log, freq=freq)
writeData(agg_data, device, freq="yearly",
pathFunc=yearlyPath, logger=logger)
if __name__ == '__main__':
@@ -129,6 +122,6 @@ if __name__ == '__main__':
parser = ChainParser("Aggregate soilnet data to 30 minutes", {"ndays": 1})
args = parser.parse_args()
main(start_date=args.start_date, end_date=args.end_date,
station=args.station, logger=args.logger, debug=args.debug,
ICOS=args.ICOS, freq=args.freq)
main(station=args.station, device=args.logger,
start_date=args.start_date, end_date=args.end_date,
debug=args.debug)
Loading