From f7789bff0c5dc47a05bb6aae420aef24f6508c6d Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Mon, 9 May 2022 06:24:51 +0700 Subject: [PATCH 01/12] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20fix=20for=20empty?= =?UTF-8?q?/nan=20series?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyfunc.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyfunc.py b/pyfunc.py index 4f2fcfd..8ac157b 100644 --- a/pyfunc.py +++ b/pyfunc.py @@ -55,7 +55,10 @@ def n_dry(vector): return np.logical_or(vector.isna(), vector == 0).sum() def max_date(vector): - return vector.idxmax().strftime("%d %B %Y") + if vector.any(): + return vector.idxmax().strftime("%d %B %Y") + else: + return "No Data" def n_max(vector): return vector.max() From e8c30c7b1d2b5e6f23d9deb2385bc84811718291 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Mon, 9 May 2022 06:45:25 +0700 Subject: [PATCH 02/12] =?UTF-8?q?=F0=9F=97=91=EF=B8=8F=20remove=20global?= =?UTF-8?q?=20and=20organize=20variable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 78 +++++++++++++++++++++++++--------------------------------- 1 file changed, 34 insertions(+), 44 deletions(-) diff --git a/app.py b/app.py index 9f9d0f3..38c8947 100644 --- a/app.py +++ b/app.py @@ -23,11 +23,6 @@ "https://cdn.jsdelivr.net/gh/AnnMarieW/dash-bootstrap-templates@V1.0.4/dbc.min.css" ) -# GLOBAL DATASET -DATAFRAME = None -DF_FILENAME = None -DF_FILEDATE = None - # APP app = dash.Dash( APP_TITLE, @@ -37,7 +32,7 @@ meta_tags=[ {"name": "viewport", "content": "width=device-width, initial-scale=1"}, ], - suppress_callback_exceptions=True, + # suppress_callback_exceptions=True, ) server = app.server @@ -76,46 +71,42 @@ prevent_initial_call=True, ) def callback_upload(content, filename, filedate, _): - global DATAFRAME, DF_FILENAME, DF_FILEDATE - ctx = dash.callback_context if content is not None: - DF_FILENAME = filename - DF_FILEDATE = filedate - children, DATAFRAME = pyfunc.parse_upload_data(content, filename, filedate) + children, dataframe = pyfunc.parse_upload_data(content, filename, filedate) if ctx.triggered[0]["prop_id"] == "button-skip.n_clicks": - DATAFRAME = pd.read_csv( + dataframe = pd.read_csv( Path(r"./example_dataset.csv"), index_col=0, parse_dates=True ) filename = None filedate = None - button_viz_disabled = True - button_upload_disabled = False upload_disabled = False + button_upload_disabled = False + button_viz_disabled = True button_viz_outline = True - if DATAFRAME is not None: + if dataframe is not None: children = pylayout.create_table_layout( - DATAFRAME, + dataframe, "output-table", filename=filename, filedate=filedate, editable=True, renamable=True, ) - button_viz_disabled = False - button_upload_disabled = False upload_disabled = False + button_upload_disabled = False + button_viz_disabled = False button_viz_outline = False return [ children, - upload_disabled, # upload_disabled, - button_upload_disabled, # button_upload_disabled, - button_viz_disabled, # button_viz_disabled, + upload_disabled, + button_upload_disabled, + button_viz_disabled, button_viz_outline, ] @@ -127,7 +118,7 @@ def callback_upload(content, filename, filedate, _): Output("section-graph", "config"), Output("container-graphbar-options", "style"), Output("button-analyze", "disabled"), - Output('button-analyze', 'outline') + Output("button-analyze", "outline"), ], Input("button-visualize", "n_clicks"), State("output-table", "derived_virtual_data"), @@ -136,42 +127,43 @@ def callback_upload(content, filename, filedate, _): prevent_initial_call=True, ) def callback_visualize(_, table_data, table_columns, graphbar_opt): - global DATAFRAME - - DATAFRAME = pyfunc.transform_to_dataframe(table_data, table_columns) + dataframe = pyfunc.transform_to_dataframe(table_data, table_columns) - download_row_visible = {"visibility": "visible"} - static_plot_enabled = {"staticPlot": False} - row_graphbar_visibile = {"visibility": "hidden"} + row_download_table_style = {"visibility": "visible"} + row_graph_config = {"staticPlot": False} + row_graphbar_options_style = {"visibility": "hidden"} button_analyze_disabled = False button_analyze_outline = False - if DATAFRAME.size > (366 * 8): - fig = pyfigure.figure_scatter(DATAFRAME) + if dataframe.size > (366 * 8): + fig = pyfigure.figure_scatter(dataframe) else: - row_graphbar_visibile = {"visibility": "visible"} + row_graphbar_options_style = {"visibility": "visible"} if graphbar_opt in ["group", "stack"]: - fig = pyfigure.figure_bar(DATAFRAME, graphbar_opt) + fig = pyfigure.figure_bar(dataframe, graphbar_opt) else: - fig = pyfigure.figure_scatter(DATAFRAME) + fig = pyfigure.figure_scatter(dataframe) return [ fig, - download_row_visible, - static_plot_enabled, - row_graphbar_visibile, + row_download_table_style, + row_graph_config, + row_graphbar_options_style, button_analyze_disabled, - button_analyze_outline + button_analyze_outline, ] @app.callback( Output("download-csv", "data"), Input("button-download-csv", "n_clicks"), + State("output-table", "derived_virtual_data"), + State("output-table", "columns"), prevent_initial_call=True, ) -def callback_download(_): - return dcc.send_data_frame(DATAFRAME.to_csv, "derived_table.csv") +def callback_download_table(_, table_data, table_columns): + dataframe = pyfunc.transform_to_dataframe(table_data, table_columns) + return dcc.send_data_frame(dataframe.to_csv, "derived_table.csv") @app.callback( @@ -181,12 +173,10 @@ def callback_download(_): State("output-table", "columns"), prevent_initial_call=True, ) -def callback_analyze(n_clicks, table_data, table_columns): - global DATAFRAME - - DATAFRAME = pyfunc.transform_to_dataframe(table_data, table_columns) - summary_all = pyfunc.generate_summary_all(DATAFRAME, n_days=["16D", "MS", "YS"]) +def callback_analyze(_, table_data, table_columns): + dataframe = pyfunc.transform_to_dataframe(table_data, table_columns) + summary_all = pyfunc.generate_summary_all(dataframe, n_days=["16D", "MS", "YS"]) tables = [ pylayout.create_table_summary( summary, f"table-analyze-{counter}", deletable=False From e7a1e93b5e73e603dcd5701755ef0283440fced2 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Mon, 9 May 2022 06:46:14 +0700 Subject: [PATCH 03/12] =?UTF-8?q?=F0=9F=92=A2=20ignore=20playground=20and?= =?UTF-8?q?=20=F0=9F=91=B7=20debug=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + app_config.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3af2a9f..06848ef 100644 --- a/.gitignore +++ b/.gitignore @@ -151,3 +151,4 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ .vscode/settings.json +playground.ipynb diff --git a/app_config.yml b/app_config.yml index 2ca04c2..f16ca40 100644 --- a/app_config.yml +++ b/app_config.yml @@ -1,7 +1,7 @@ DASH_APP: APP_TITLE: Rainfall Data Explorer UPDATE_TITLE: Updating... - DEBUG: False + DEBUG: True DASH_THEME: THEME: SKETCHY From 08f4ae08bc4cb5cbc550185cdc45949618a2f033 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Mon, 9 May 2022 07:55:13 +0700 Subject: [PATCH 04/12] =?UTF-8?q?=E2=84=B9=EF=B8=8F=20add=20information?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 2 +- app_config.yml | 2 +- pyfunc.py | 2 +- pylayout.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index 38c8947..0012227 100644 --- a/app.py +++ b/app.py @@ -32,7 +32,7 @@ meta_tags=[ {"name": "viewport", "content": "width=device-width, initial-scale=1"}, ], - # suppress_callback_exceptions=True, + suppress_callback_exceptions=True, ) server = app.server diff --git a/app_config.yml b/app_config.yml index f16ca40..dbb046e 100644 --- a/app_config.yml +++ b/app_config.yml @@ -4,7 +4,7 @@ DASH_APP: DEBUG: True DASH_THEME: - THEME: SKETCHY + THEME: MORPH TEMPLATE: LOGO_SOURCE: https://raw.githubusercontent.com/hidrokit/static-assets/main/logo_0.4.0-v1.1/hidrokit-hidrokit/50x50square.png diff --git a/pyfunc.py b/pyfunc.py index 8ac157b..0071988 100644 --- a/pyfunc.py +++ b/pyfunc.py @@ -58,7 +58,7 @@ def max_date(vector): if vector.any(): return vector.idxmax().strftime("%d %B %Y") else: - return "No Data" + return "No Data/Rainfall" def n_max(vector): return vector.max() diff --git a/pylayout.py b/pylayout.py index 1e71fa1..dfd0104 100644 --- a/pylayout.py +++ b/pylayout.py @@ -261,7 +261,7 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = [ dbc.Col( [ - dbc.Label("Small Dataset Options:"), + dbc.Label("Small Dataset (<= 2,920 data points) Options:"), dbc.RadioItems( options=[ {"label": "Stack", "value": "stack"}, From c2a1f9dc450cbeb5374bc01657117fc4c810d41b Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Mon, 9 May 2022 21:25:28 +0700 Subject: [PATCH 05/12] =?UTF-8?q?=F0=9F=86=95=20graph=20for=20summary=20+?= =?UTF-8?q?=20refactoring=20a=20bit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 77 ++++++++++++---- pyfigure.py | 241 ++++++++++++++++++++++++++++++++++++++++++++++-- pyfunc.py | 26 ++++-- pylayout.py | 207 ++++++++++------------------------------- pylayoutfunc.py | 113 +++++++++++++++++++++++ pytemplate.py | 39 ++++---- 6 files changed, 492 insertions(+), 211 deletions(-) create mode 100644 pylayoutfunc.py diff --git a/app.py b/app.py index 0012227..2c97af7 100644 --- a/app.py +++ b/app.py @@ -2,10 +2,8 @@ import dash_bootstrap_components as dbc import pandas as pd import plotly.io as pio -import pyfigure -import pyfunc -import pylayout -from dash import dcc, Input, Output, State +import pyfigure, pyfunc, pylayout, pylayoutfunc +from dash import dcc, html, Input, Output, State from pathlib import Path from pyconfig import appConfig from pytemplate import hktemplate @@ -23,6 +21,9 @@ "https://cdn.jsdelivr.net/gh/AnnMarieW/dash-bootstrap-templates@V1.0.4/dbc.min.css" ) +# GLOBAL VARS +SUMMARY_ALL = None + # APP app = dash.Dash( APP_TITLE, @@ -48,6 +49,7 @@ pylayout.HTML_ROW_GRAPH_ONE, pylayout.HTML_ROW_BUTTON_ANALYZE, pylayout.HTML_ROW_TABLE_ANALYZE, + pylayout._HTML_TROUBLESHOOT, pylayout.HTML_MADEBY, pylayout.HTML_FOOTER, ], @@ -58,15 +60,15 @@ @app.callback( [ - Output("output-data-upload", "children"), - Output("upload-data", "disabled"), + Output("row-table-uploaded", "children"), + Output("dcc-upload", "disabled"), Output("button-upload", "disabled"), Output("button-visualize", "disabled"), Output("button-visualize", "outline"), ], - Input("upload-data", "contents"), - State("upload-data", "filename"), - State("upload-data", "last_modified"), + Input("dcc-upload", "contents"), + State("dcc-upload", "filename"), + State("dcc-upload", "last_modified"), Input("button-skip", "n_clicks"), prevent_initial_call=True, ) @@ -89,7 +91,7 @@ def callback_upload(content, filename, filedate, _): button_viz_outline = True if dataframe is not None: - children = pylayout.create_table_layout( + children = pylayoutfunc.create_table_layout( dataframe, "output-table", filename=filename, @@ -113,9 +115,9 @@ def callback_upload(content, filename, filedate, _): @app.callback( [ - Output("section-graph", "figure"), - Output("visibility-download-button", "style"), - Output("section-graph", "config"), + Output("graph-rainfall", "figure"), + Output("row-button-download-csv", "style"), + Output("graph-rainfall", "config"), Output("container-graphbar-options", "style"), Output("button-analyze", "disabled"), Output("button-analyze", "outline"), @@ -123,7 +125,7 @@ def callback_upload(content, filename, filedate, _): Input("button-visualize", "n_clicks"), State("output-table", "derived_virtual_data"), State("output-table", "columns"), - State("graph-bar-options", "value"), + State("radio-graphbar-options", "value"), prevent_initial_call=True, ) def callback_visualize(_, table_data, table_columns, graphbar_opt): @@ -167,24 +169,61 @@ def callback_download_table(_, table_data, table_columns): @app.callback( - Output("col-table-analyze", "children"), + Output("tab-analyze", "children"), Input("button-analyze", "n_clicks"), State("output-table", "derived_virtual_data"), State("output-table", "columns"), prevent_initial_call=True, ) def callback_analyze(_, table_data, table_columns): + global SUMMARY_ALL dataframe = pyfunc.transform_to_dataframe(table_data, table_columns) - summary_all = pyfunc.generate_summary_all(dataframe, n_days=["16D", "MS", "YS"]) + SUMMARY_ALL = pyfunc.generate_summary_all(dataframe, n_days=["16D", "MS", "YS"]) tables = [ - pylayout.create_table_summary( + pylayoutfunc.create_table_summary( summary, f"table-analyze-{counter}", deletable=False ) - for counter, summary in enumerate(summary_all) + for counter, summary in enumerate(SUMMARY_ALL) ] - children = pylayout.create_tabcard_layout(tables) + children = pylayoutfunc.create_tabcard_table_layout(tables) + + return [children, html.Div("HELLO")] + + +@app.callback( + Output("row-troubleshoot", "children"), + Input("button-troubleshoot", "n_clicks"), + # State("table-analyze-0", "derived_virtual_data"), + # State("table-analyze-0", "columns"), + prevent_initial_call=True, +) +def callback_troubleshoot(_): + from itertools import product + + label_periods = ["Biweekly", "Monthly", "Yearly"] + label_maxsum = ["Max + Sum"] + label_raindry = ["Dry + Rain"] + label_ufunc = label_maxsum + label_raindry + + graphs_maxsum = [ + pyfigure.figure_summary_maxsum( + summary, title=f"{period}: {title}", period=period + ) + for summary, title, period in zip(SUMMARY_ALL, label_maxsum * 3, label_periods) + ] + graphs_raindry = [ + pyfigure.figure_summary_raindry( + summary, title=f"{period}: {title}", period=period + ) + for summary, title, period in zip(SUMMARY_ALL, label_raindry * 3, label_periods) + ] + + all_graphs = graphs_maxsum + graphs_raindry + labels = [": ".join(i) for i in product(label_ufunc, label_periods)] + + children = pylayoutfunc.create_tabcard_graph_layout(all_graphs, labels) return children diff --git a/pyfigure.py b/pyfigure.py index 657ae13..e68b90b 100644 --- a/pyfigure.py +++ b/pyfigure.py @@ -1,6 +1,32 @@ -import plotly.graph_objects as go -import plotly.express as px +from dash import dcc +from plotly.subplots import make_subplots +from pyconfig import appConfig import numpy as np +import plotly.express as px +import plotly.graph_objects as go +import pytemplate +from collections import defaultdict + +THRESHOLD_SUMMARY = (367 * 8) // 2 +THRESHOLD_GRAPH_RAINFALL = 365 * 8 + + +def _generate_dict_watermark(n: int = 1, source=appConfig.TEMPLATE.WATERMARK_SOURCE): + n = "" if n == 1 else n + return dict( + source=source, + xref=f"x{n} domain", + yref=f"y{n} domain", + x=0.5, + y=0.5, + sizex=0.5, + sizey=0.5, + xanchor="center", + yanchor="middle", + name="watermark-hidrokit", + layer="below", + opacity=0.2, + ) def figure_test_scatter(): @@ -27,7 +53,7 @@ def figure_test_heatmap2(): return go.Figure(data, layout) -TEMPLATE_LABEL = dict( +LABEL_GRAPH_RAINFALL = dict( title="Rainfall Each Stations", yaxis={"title": "Rainfall (mm)"}, xaxis={"title": "Date"}, @@ -41,7 +67,7 @@ def figure_scatter(dataframe): go.Scatter(x=dataframe.index, y=dataframe[col], mode="lines", name=col) for col in dataframe.columns ] - layout = go.Layout(hovermode="closest", **TEMPLATE_LABEL) + layout = go.Layout(hovermode="closest", **LABEL_GRAPH_RAINFALL) fig = go.Figure(data, layout) @@ -50,12 +76,12 @@ def figure_scatter(dataframe): def figure_bar(dataframe, barmode="stack"): - if barmode == 'stack': + if barmode == "stack": col_df = dataframe.columns[::-1] bargap = 0 else: col_df = dataframe.columns - bargap = 0.5 + bargap = 0.2 data = [ go.Bar( @@ -65,7 +91,9 @@ def figure_bar(dataframe, barmode="stack"): ) for col in col_df ] - layout = go.Layout(hovermode="x unified", barmode=barmode, bargap=bargap, **TEMPLATE_LABEL) + layout = go.Layout( + hovermode="x unified", barmode=barmode, bargap=bargap, **LABEL_GRAPH_RAINFALL + ) fig = go.Figure(data, layout) @@ -92,3 +120,202 @@ def figure_empty(): ) return go.Figure(data, layout) + + +def figure_summary_maxsum( + summary, + ufunc_cols: list[str] = None, + rows: int = 2, + cols: int = 1, + subplot_titles: list[str] = None, + title: str = "Summary Rainfall", + period: str = None, +) -> dcc.Graph: + + ufunc_cols = ["max", "sum"] if ufunc_cols is None else ufunc_cols + subplot_titles = ufunc_cols if subplot_titles is None else subplot_titles + + if summary.size > THRESHOLD_SUMMARY: + return dcc.Graph(figure=figure_empty(), config={"staticPlot": True}) + + fig = make_subplots( + rows=rows, + cols=cols, + shared_xaxes=True, + vertical_spacing=0.05, + subplot_titles=subplot_titles, + ) + + fig.layout.images = [_generate_dict_watermark(n) for n in range(2, rows + 1)] + + data_dict = defaultdict(list) + + for station in summary.columns.levels[0]: + for ufcol, series in summary[station].items(): + if ufcol in ufunc_cols: + _bar = go.Bar( + x=np.arange(series.index.size), + y=series, + name=f"{station} ({ufcol})", + legendgroup=station, + legendgrouptitle_text=station, + ) + data_dict[ufcol].append(_bar) + + for counter, (ufcol, data) in enumerate(data_dict.items(), 1): + fig.add_traces(data, rows=counter, cols=cols) + + fig.update_layout( + title={"text": title, "pad": {"b": 20}}, + barmode="group", + hovermode="x", + height=800, + xaxis2={"title": "Date"}, + bargap=0.2, + dragmode="zoom", + legend={"title": "Stations"}, + ) + + ticktext = series.index.strftime("%d %b %Y") + + if period.lower() in ["monthly", "yearly"]: + if period.lower() == "monthly": + ticktext = series.index.strftime("%B %Y") + if period.lower() == "yearly": + ticktext = series.index.strftime("%Y") + + UPDATE_XAXES = { + "ticktext": ticktext, + "tickvals": np.arange(series.index.size), + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridwidth": 2, + } + + UPDATE_YAXES = { + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridwidth": 2, + "fixedrange": True, + "title": "Rainfall (mm)", + } + + def update_axis(fig, update, n, axis: str = "x"): + n = "" if n == 1 else n + fig.update(layout={f"{axis}axis{n}": update}) + + for n_row in range(1, rows + 1): + for axis, update in zip(["x", "y"], [UPDATE_XAXES, UPDATE_YAXES]): + update_axis(fig, update, n_row, axis) + + # ref: https://stackoverflow.com/questions/39863250 + from itertools import cycle, islice + + n_data = len(fig.data) + n_split = n_data // 2 + + if n_split < len(pytemplate.hktemplate.layout.colorway): + colors = list(pytemplate.hktemplate.layout.colorway[:n_split]) + else: + colorway_list = pytemplate.hktemplate.layout.colorway + colors = list(islice(cycle(colorway_list), n_split)) + + for data, color in zip(fig.data, colors * 2): + data.marker.color = color + + return dcc.Graph(figure=fig) + + +def figure_summary_raindry( + summary, + ufunc_cols: list[str] = None, + rows: int = None, + cols: int = 1, + subplot_titles: list[str] = None, + title: str = "Summary Rainfall", + period: str = None, +) -> dcc.Graph: + + rows = summary.columns.levels[0].size if rows is None else rows + + ufunc_cols = ["n_rain", "n_dry"] if ufunc_cols is None else ufunc_cols + subplot_titles = ( + summary.columns.levels[0] if subplot_titles is None else subplot_titles + ) + + if summary.size > THRESHOLD_SUMMARY: + return dcc.Graph(figure=figure_empty(), config={"staticPlot": True}) + + fig = make_subplots( + rows=rows, + cols=cols, + shared_xaxes=True, + vertical_spacing=0.03, + subplot_titles=subplot_titles, + ) + + fig.layout.images = [_generate_dict_watermark(n) for n in range(2, rows + 1)] + + data_dict = defaultdict(list) + + for station in summary.columns.levels[0]: + for ufcol, series in summary[station].items(): + if ufcol in ufunc_cols: + _bar = go.Bar( + x=np.arange(series.index.size), + y=series, + name=f"{station} ({ufcol})", + legendgroup=station, + legendgrouptitle_text=station, + ) + data_dict[station].append(_bar) + + for counter, (ufcol, data) in enumerate(data_dict.items(), 1): + fig.add_traces(data, rows=counter, cols=cols) + + fig.update_layout( + title={"text": title, "pad": {"b": 20}}, + barmode="stack", + hovermode="x", + height=max([800, 250 * rows]), + bargap=0, + dragmode="zoom", + legend={"title": "Stations"}, + ) + + ticktext = series.index.strftime("%d %b %Y") + + if period.lower() in ["monthly", "yearly"]: + if period.lower() == "monthly": + ticktext = series.index.strftime("%B %Y") + if period.lower() == "yearly": + ticktext = series.index.strftime("%Y") + + UPDATE_XAXES = { + "ticktext": ticktext, + "tickvals": np.arange(series.index.size), + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridwidth": 2, + } + + UPDATE_YAXES = { + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridwidth": 2, + "fixedrange": True, + "title": "Days", + } + + def update_axis(fig, update, n, axis: str = "x"): + n = "" if n == 1 else n + fig.update(layout={f"{axis}axis{n}": update}) + + fig.update(layout={f"xaxis{rows}": {"title": "Date"}}) + + for n_row in range(1, rows + 1): + for axis, update in zip(["x", "y"], [UPDATE_XAXES, UPDATE_YAXES]): + update_axis(fig, update, n_row, axis) + + color_list = pytemplate.hktemplate.layout.colorway[:2] + + for data, color in zip(fig.data, color_list * rows): + data.marker.color = color + + return dcc.Graph(figure=fig) diff --git a/pyfunc.py b/pyfunc.py index 0071988..65ca8b6 100644 --- a/pyfunc.py +++ b/pyfunc.py @@ -56,15 +56,15 @@ def n_dry(vector): def max_date(vector): if vector.any(): - return vector.idxmax().strftime("%d %B %Y") + return vector.idxmax().date() else: return "No Data/Rainfall" - def n_max(vector): + def max(vector): return vector.max() - ufunc = [days, n_max, sum, n_rain, n_dry, max_date] - ufunc_col = ["days", "n_max", "sum", "n_rain", "n_dry", "max_date"] + ufunc = [days, max, sum, n_rain, n_dry, max_date] + ufunc_col = ["days", "max", "sum", "n_rain", "n_dry", "max_date"] summary = hk98.summary_all( dataframe, ufunc=ufunc, ufunc_col=ufunc_col, n_days=n_days @@ -83,12 +83,24 @@ def generate_summary_all(dataframe, n_days: list = None): return summary_all -def transform_to_dataframe(table_data, table_columns): +def transform_to_dataframe( + table_data, table_columns, multiindex: bool = False, apply_numeric: bool = True +): dataframe = pd.DataFrame(table_data) - dataframe.columns = [i["name"] for i in table_columns] + if multiindex is True: + dataframe.columns = pd.MultiIndex.from_tuples( + [item["name"] for item in table_columns] + ) + else: + dataframe.columns = [item["name"] for item in table_columns] + dataframe["DATE"] = pd.to_datetime(dataframe.DATE) dataframe = dataframe.set_index("DATE").sort_index() - dataframe = dataframe.apply(pd.to_numeric, errors="coerce") + + if apply_numeric is True: + dataframe = dataframe.apply(pd.to_numeric, errors="coerce") + else: + dataframe = dataframe.infer_objects() return dataframe diff --git a/pylayout.py b/pylayout.py index dfd0104..87a99c2 100644 --- a/pylayout.py +++ b/pylayout.py @@ -1,95 +1,11 @@ -from dash import html, dcc, dash_table +from dash import html, dcc import dash_bootstrap_components as dbc from pyconfig import appConfig +import plotly.io as pio from pytemplate import hktemplate -from datetime import datetime import pyfigure - -def create_table_layout( - dataframe, - idtable, - filename=None, - filedate=None, - editable=False, - deletable=True, - renamable=False, -): - new_dataframe = dataframe.reset_index() - new_dataframe.DATE = new_dataframe.DATE.dt.date - table = dash_table.DataTable( - id=idtable, - columns=[ - {"name": i, "id": i, "deletable": deletable, "renamable": renamable} - for i in new_dataframe.columns - ], - data=new_dataframe.to_dict("records"), - page_size=20, - editable=editable, - cell_selectable=True, - filter_action="native", - sort_action="native", - style_table={"overflowX": "auto"}, - style_cell={"font-family": hktemplate.layout.font.family}, - style_header={"font-size": 20, "textAlign": "center", "font-weight": "bold"}, - ) - add_title = ( - f' ({filename}:{datetime.fromtimestamp(filedate).strftime("%Y-%m-%d")})' - if (filename is not None) and (filedate is not None) - else "" - ) - title_table = f"TABEL DATA" + add_title - return html.H2(title_table, className="text-center"), table - - -def create_table_summary( - summary, - idtable, - editable=False, - deletable=True, - renamable=False, -): - new_summary = summary.reset_index() - new_summary.DATE = new_summary.DATE.dt.date - - flatten_index = new_summary.columns.to_flat_index() - new_id = ["_".join(colx) if colx[1] != "" else colx[0] for colx in flatten_index] - new_summary.columns = new_id - - table = dash_table.DataTable( - id=idtable, - columns=[ - {"name": name, "id": id, "deletable": deletable, "renamable": renamable} - for name, id in zip(flatten_index, new_id) - ], - data=new_summary.to_dict("records"), - page_size=20, - editable=editable, - cell_selectable=True, - filter_action="native", - sort_action="native", - style_table={"overflowX": "auto"}, - style_cell={"font-family": hktemplate.layout.font.family}, - style_header={"font-size": 20, "textAlign": "center", "font-weight": "bold"}, - merge_duplicate_headers=True, - ) - return table - - -def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = None): - - disabled = [False] * len(tables) if disabled is None else disabled - tab_names = ["Biweekly", "Monthly", "Yearly"] if tab_names is None else tab_names - - tab = [] - for table, tab_name, active in zip(tables, tab_names, disabled): - _tab = dbc.Tab( - dbc.Card(dbc.CardBody([table]), class_name="my-3"), label=tab_name - ) - tab.append(_tab) - - return dbc.Tabs(tab) - +pio.templates.default = hktemplate HTML_TITLE = html.Div( [ @@ -99,7 +15,6 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = ), html.Span( [appConfig.GITHUB_REPO, "@", appConfig.VERSION], - # href=appConfig.GITHUB_LINK, className="text-muted", ), ], @@ -137,7 +52,7 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = DCC_UPLOAD = html.Div( dcc.Upload( - id="upload-data", + id="dcc-upload", children=html.Div( [ dbc.Button( @@ -180,30 +95,20 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = ), ], fluid=True, - class_name="", ), ) HTML_ROW_TABLE = html.Div( dbc.Container( [ - dbc.Row( - [ - dbc.Col( - html.Div( - dbc.Card( - dbc.CardBody( - id="output-data-upload", - children=dcc.Graph( - figure=pyfigure.figure_empty(), - config={"staticPlot": True}, - ), - ), - ) - ), - class_name="", + dbc.Card( + dbc.CardBody( + id="row-table-uploaded", + children=dcc.Graph( + figure=pyfigure.figure_empty(), + config={"staticPlot": True}, ), - ], + ), ), ], fluid=True, @@ -217,40 +122,35 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = dbc.Row( [ dbc.Col( - [ - dbc.Button( - "Visualize Data", - color="success", - outline=True, - class_name="fs-4 text-center fw-bold", - id="button-visualize", - disabled=True, - ), - ], + dbc.Button( + "Visualize Data", + color="success", + outline=True, + class_name="fs-4 fw-bold", + id="button-visualize", + disabled=True, + ), width="auto", ), dbc.Col( [ dbc.Button( - [ - "Download Table As CSV", - ], + "Download Table As CSV", color="primary", - className="me-1 fs-4", + className="fs-4", id="button-download-csv", ), dcc.Download(id="download-csv"), ], width="auto", style={"visibility": "hidden"}, - id="visibility-download-button", + id="row-button-download-csv", ), ], justify="center", - class_name="m-3", ) ], - class_name="mt-5", + class_name="my-4", ) ) @@ -269,7 +169,7 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = {"label": "Line", "value": "line"}, ], value="stack", - id="graph-bar-options", + id="radio-graphbar-options", inline=True, ), ], @@ -277,7 +177,6 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = ) ], justify="center", - class_name="", ) ], fluid=True, @@ -289,19 +188,12 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = HTML_ROW_GRAPH_ONE = html.Div( dbc.Container( [ - dbc.Row( - [ - dbc.Col( - dcc.Loading( - dcc.Graph( - id="section-graph", - figure=pyfigure.figure_empty(), - config={"staticPlot": True}, - ) - ) - ) - ], - justify="center", + dcc.Loading( + dcc.Graph( + id="graph-rainfall", + figure=pyfigure.figure_empty(), + config={"staticPlot": True}, + ) ) ], fluid=True, @@ -331,43 +223,42 @@ def create_tabcard_layout(tables: list, tab_names: list = None, disabled: list = ) ], justify="center", - class_name="m-4", + # class_name="m-4", ) ], fluid=True, id="row-download", + class_name="my-5", ) ) HTML_ROW_TABLE_ANALYZE = html.Div( + dbc.Container( + dcc.Loading( + children=dcc.Graph( + figure=pyfigure.figure_empty(), + config={"staticPlot": True}, + ), + id="tab-analyze", + ), + fluid=True, + ) +) + +_HTML_TROUBLESHOOT = html.Div( dbc.Container( [ - dbc.Row( - [ - dbc.Col( - dcc.Loading( - html.Div( - children=dcc.Graph( - figure=pyfigure.figure_empty(), - config={"staticPlot": True}, - ), - id="col-table-analyze", - ), - ), - ) - ], - justify="center", - ) + dbc.Row([html.Div("HEELLOOOO")]), + dbc.Button("Hello", id="button-troubleshoot"), + html.Div(id="row-troubleshoot"), ], fluid=True, ) ) -# HTML_ROW_TABLE_ANALYZE = html.Div(dbc.Container(["EMPTY"], id="col-table-analyze")) - HTML_MADEBY = html.Div( dcc.Markdown( - "made with [Dash+Plotly](https://plotly.com)".lower(), + "Made with [Dash+Plotly](https://plotly.com).", className="fs-4 text-center mt-5", ), ) diff --git a/pylayoutfunc.py b/pylayoutfunc.py new file mode 100644 index 0000000..ecf4105 --- /dev/null +++ b/pylayoutfunc.py @@ -0,0 +1,113 @@ +from dash import html, dash_table, dcc +import dash_bootstrap_components as dbc +from pytemplate import hktemplate +from datetime import datetime +from pyconfig import appConfig + + +def create_table_layout( + dataframe, + idtable, + filename=None, + filedate=None, + editable=False, + deletable=True, + renamable=False, +): + new_dataframe = dataframe.rename_axis("DATE").reset_index() + new_dataframe.DATE = new_dataframe.DATE.dt.date + table = dash_table.DataTable( + id=idtable, + columns=[ + {"name": i, "id": i, "deletable": deletable, "renamable": renamable} + for i in new_dataframe.columns + ], + data=new_dataframe.to_dict("records"), + page_size=20, + editable=editable, + cell_selectable=True, + filter_action="native", + sort_action="native", + style_table={"overflowX": "auto"}, + style_cell={"font-family": hktemplate.layout.font.family}, + style_header={"font-size": 20, "textAlign": "center", "font-weight": "bold"}, + ) + add_title = ( + f' ({filename}:{datetime.fromtimestamp(filedate).strftime("%Y-%m-%d")})' + if (filename is not None) and (filedate is not None) + else "" + ) + title_table = f"TABEL DATA" + add_title + return html.H2(title_table, className="text-center"), table + + +def create_table_summary( + summary, + idtable, + editable=False, + deletable=True, + renamable=False, +): + new_summary = summary.rename_axis("DATE").reset_index() + new_summary.DATE = new_summary.DATE.dt.date + + flatten_index = new_summary.columns.to_flat_index() + new_id = ["_".join(colx) if colx[1] != "" else colx[0] for colx in flatten_index] + new_summary.columns = new_id + + table = dash_table.DataTable( + id=idtable, + columns=[ + {"name": name, "id": id, "deletable": deletable, "renamable": renamable} + for name, id in zip(flatten_index, new_id) + ], + data=new_summary.to_dict("records"), + page_size=20, + editable=editable, + cell_selectable=True, + filter_action="none", + sort_action="native", + style_table={"overflowX": "auto"}, + style_cell={"font-family": hktemplate.layout.font.family}, + style_header={"font-size": 20, "textAlign": "center", "font-weight": "bold"}, + merge_duplicate_headers=True, + ) + return table + + +def create_tabcard_table_layout( + tables: list, tab_names: list = None, disabled: list = None +): + + disabled = [False] * len(tables) if disabled is None else disabled + tab_names = ["Biweekly", "Monthly", "Yearly"] if tab_names is None else tab_names + + tab = [] + for table, tab_name, active in zip(tables, tab_names, disabled): + _tab = dbc.Tab( + dbc.Card(dbc.CardBody([table]), class_name="my-3"), + label=tab_name, + disabled=active, + ) + tab.append(_tab) + + return dbc.Tabs(tab) + + +def create_tabcard_graph_layout( + graphs: list[dcc.Graph], tab_names: list = None, disabled: list = None +): + + disabled = [False] * len(graphs) if disabled is None else disabled + tab_names = ["Biweekly", "Monthly", "Yearly"] if tab_names is None else tab_names + + tab = [] + for graph, tab_name, active in zip(graphs, tab_names, disabled): + _tab = dbc.Tab( + dbc.Card(dbc.CardBody([graph]), class_name="my-3"), + label=tab_name, + disabled=active, + ) + tab.append(_tab) + + return dbc.Tabs(tab) diff --git a/pytemplate.py b/pytemplate.py index 6ca893f..aa158da 100644 --- a/pytemplate.py +++ b/pytemplate.py @@ -2,31 +2,21 @@ import plotly.io as pio from dash_bootstrap_templates import load_figure_template from pyconfig import appConfig +from plotly import colors load_figure_template(appConfig.DASH_THEME.THEME.lower()) hktemplate = pio.templates[pio.templates.default] -# SETUP +# VARS _TEMPLATE = appConfig.TEMPLATE _FONT_FAMILY = hktemplate.layout.font.family +_FONT_COLOR_TUPLE = colors.hex_to_rgb(hktemplate.layout.font.color) +_FONT_COLOR_RGB_ALPHA = "rgba({},{},{},0.4)".format(*_FONT_COLOR_TUPLE) -# LAYOUT -## LOGO -# _SOURCE_LOGO = _TEMPLATE.LOGO_SOURCE +## LAYOUT +# WATERMARK _SOURCE_WATERMARK = _TEMPLATE.WATERMARK_SOURCE hktemplate.layout.images = [ - # dict( - # source=_SOURCE_LOGO, - # xref="paper", - # yref="paper", - # x=1, - # y=1.015, - # sizex=0.11, - # sizey=0.11, - # xanchor="right", - # yanchor="bottom", - # name="logo-hidrokit", - # ), dict( source=_SOURCE_WATERMARK, xref="x domain", @@ -57,7 +47,8 @@ _LEGEND_FONT_SIZE = 15 hktemplate.layout.showlegend = True hktemplate.layout.legend.font.size = _LEGEND_FONT_SIZE -hktemplate.layout.legend.title.text = "placeholder" +hktemplate.layout.legend.groupclick = "toggleitem" +# hktemplate.layout.legend.title.text = "placeholder" def apply_legend_inside(): @@ -91,7 +82,7 @@ def apply_legend_inside(): hktemplate.layout.hoverlabel.font.family = _FONT_FAMILY # TITLE -hktemplate.layout.title.text = "PLACEHOLDER TITLE" +# hktemplate.layout.title.text = "PLACEHOLDER TITLE" hktemplate.layout.title.pad = dict(b=10, l=0, r=0, t=0) hktemplate.layout.title.x = 0 hktemplate.layout.title.xref = "paper" @@ -110,7 +101,9 @@ def apply_legend_inside(): hktemplate.layout.xaxis.linewidth = _XAXIS_LINEWIDTH hktemplate.layout.xaxis.linecolor = _XAXIS_GRIDCOLOR hktemplate.layout.xaxis.spikecolor = _XAXIS_GRIDCOLOR -hktemplate.layout.xaxis.title.text = "PLACEHOLDER XAXIS" +hktemplate.layout.xaxis.gridcolor = _FONT_COLOR_RGB_ALPHA +hktemplate.layout.xaxis.gridwidth = _XAXIS_LINEWIDTH +# hktemplate.layout.xaxis.title.text = "PLACEHOLDER XAXIS" hktemplate.layout.xaxis.title.font.size = _XAXIS_TITLE_FONT_SIZE hktemplate.layout.xaxis.title.standoff = _XAXIS_TITLE_STANDOFF @@ -167,10 +160,16 @@ def apply_rangeselector(): hktemplate.layout.yaxis.linecolor = _YAXIS_GRIDCOLOR hktemplate.layout.yaxis.spikecolor = _YAXIS_GRIDCOLOR hktemplate.layout.yaxis.rangemode = "tozero" -hktemplate.layout.yaxis.title.text = "PLACEHOLDER XAXIS" +hktemplate.layout.yaxis.gridcolor = _FONT_COLOR_RGB_ALPHA +hktemplate.layout.yaxis.gridwidth = _YAXIS_LINEWIDTH +# hktemplate.layout.yaxis.title.text = "PLACEHOLDER XAXIS" hktemplate.layout.yaxis.title.font.size = _YAXIS_TITLE_FONT_SIZE hktemplate.layout.yaxis.title.standoff = _YAXIS_TITLE_STANDOFF +# SUBPLOTS +# ANNOTATION +hktemplate.layout.annotationdefaults.font.color = hktemplate.layout.font.color + ## PLOT SPECIFIC # HEATMAP From 9ad5a01de5280a7b3bd270c0d344b7ef2a88b187 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Tue, 10 May 2022 11:50:25 +0700 Subject: [PATCH 06/12] =?UTF-8?q?=F0=9F=93=88=20add=20graph=20maximum=20ra?= =?UTF-8?q?infall=20occurrence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 4 +- pyconfig.py | 2 +- pyfigure.py | 235 +++++++++++++++++++++++++++++++++++++++++++++++----- pyfunc.py | 2 +- 4 files changed, 217 insertions(+), 26 deletions(-) diff --git a/app.py b/app.py index 2c97af7..6c206be 100644 --- a/app.py +++ b/app.py @@ -219,9 +219,11 @@ def callback_troubleshoot(_): ) for summary, title, period in zip(SUMMARY_ALL, label_raindry * 3, label_periods) ] + graph_maxdate = [pyfigure.figure_summary_maxdate(SUMMARY_ALL)] - all_graphs = graphs_maxsum + graphs_raindry + all_graphs = graphs_maxsum + graphs_raindry + graph_maxdate labels = [": ".join(i) for i in product(label_ufunc, label_periods)] + labels += ["Maximum Rainfall Occurrence"] children = pylayoutfunc.create_tabcard_graph_layout(all_graphs, labels) diff --git a/pyconfig.py b/pyconfig.py index f6c1fce..9b85d78 100644 --- a/pyconfig.py +++ b/pyconfig.py @@ -2,4 +2,4 @@ _CONFIG_PATH = "app_config.yml" appConfig = Box.from_yaml(filename=_CONFIG_PATH) -# appConfig.DASH_THEME.THEME = "SKETCHY" +appConfig.DASH_THEME.THEME = "COSMO" diff --git a/pyfigure.py b/pyfigure.py index e68b90b..528b011 100644 --- a/pyfigure.py +++ b/pyfigure.py @@ -5,10 +5,14 @@ import plotly.express as px import plotly.graph_objects as go import pytemplate +import pandas as pd from collections import defaultdict +from itertools import cycle, islice THRESHOLD_SUMMARY = (367 * 8) // 2 THRESHOLD_GRAPH_RAINFALL = 365 * 8 +THRESHOLD_XAXES = 12 * 2 * 5 +THRESHOLD_STATIONS = 8 def _generate_dict_watermark(n: int = 1, source=appConfig.TEMPLATE.WATERMARK_SOURCE): @@ -100,7 +104,7 @@ def figure_bar(dataframe, barmode="stack"): return fig -def figure_empty(): +def figure_empty(text: str = "", size: int = 40): data = [{"x": [], "y": []}] layout = go.Layout( title={"text": "", "x": 0.5}, @@ -117,6 +121,20 @@ def figure_empty(): "zeroline": False, }, margin=dict(t=55, l=55, r=55, b=55), + annotations=[ + dict( + name="text", + text=f"{text}", + opacity=0.3, + font_size=size, + xref="x domain", + yref="y domain", + x=0.5, + y=0.05, + showarrow=False, + ) + ], + height=450, ) return go.Figure(data, layout) @@ -136,7 +154,9 @@ def figure_summary_maxsum( subplot_titles = ufunc_cols if subplot_titles is None else subplot_titles if summary.size > THRESHOLD_SUMMARY: - return dcc.Graph(figure=figure_empty(), config={"staticPlot": True}) + return dcc.Graph( + figure=figure_empty("dataset above threshold"), config={"staticPlot": True} + ) fig = make_subplots( rows=rows, @@ -184,9 +204,16 @@ def figure_summary_maxsum( if period.lower() == "yearly": ticktext = series.index.strftime("%Y") + if series.index.size <= THRESHOLD_XAXES: + xticktext = ticktext + xtickvals = np.arange(series.index.size) + else: + xticktext = ticktext[::2] + xtickvals = np.arange(series.index.size)[::2] + UPDATE_XAXES = { - "ticktext": ticktext, - "tickvals": np.arange(series.index.size), + "ticktext": xticktext, + "tickvals": xtickvals, "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, "gridwidth": 2, } @@ -207,7 +234,6 @@ def update_axis(fig, update, n, axis: str = "x"): update_axis(fig, update, n_row, axis) # ref: https://stackoverflow.com/questions/39863250 - from itertools import cycle, islice n_data = len(fig.data) n_split = n_data // 2 @@ -225,7 +251,7 @@ def update_axis(fig, update, n, axis: str = "x"): def figure_summary_raindry( - summary, + summary: pd.DataFrame, ufunc_cols: list[str] = None, rows: int = None, cols: int = 1, @@ -241,32 +267,61 @@ def figure_summary_raindry( summary.columns.levels[0] if subplot_titles is None else subplot_titles ) - if summary.size > THRESHOLD_SUMMARY: - return dcc.Graph(figure=figure_empty(), config={"staticPlot": True}) + if (summary.size > THRESHOLD_SUMMARY) or (summary.index.size > THRESHOLD_XAXES): + return dcc.Graph( + figure=figure_empty("dataset above threshold"), config={"staticPlot": True} + ) + + vertical_spacing = 0.2 / rows fig = make_subplots( rows=rows, cols=cols, shared_xaxes=True, - vertical_spacing=0.03, + vertical_spacing=vertical_spacing, subplot_titles=subplot_titles, ) fig.layout.images = [_generate_dict_watermark(n) for n in range(2, rows + 1)] + for station in summary.columns.levels[0]: + summary[(station, "n_left")] = ( + summary[(station, "days")].max() + - summary[(station, "n_rain")] + - summary[(station, "n_dry")] + ) + data_dict = defaultdict(list) for station in summary.columns.levels[0]: for ufcol, series in summary[station].items(): - if ufcol in ufunc_cols: - _bar = go.Bar( - x=np.arange(series.index.size), - y=series, - name=f"{station} ({ufcol})", - legendgroup=station, - legendgrouptitle_text=station, - ) - data_dict[station].append(_bar) + if ufcol in ufunc_cols + ["n_left"]: + if ufcol in ufunc_cols: + _bar = go.Bar( + x=np.arange(series.index.size), + y=series, + name=f"{station} ({ufcol})", + legendgroup=station, + legendgrouptitle_text=station, + marker_line_width=0, + customdata=series.index, + hovertemplate=f"{station}
{ufcol}: %{{y}}", + ) + data_dict[station].append(_bar) + if ufcol == "n_left": + _bar = go.Bar( + x=np.arange(series.index.size), + y=series, + name=f"{station} (border)", + legendgroup=station, + legendgrouptitle_text=station, + showlegend=True, + hoverinfo="skip", + marker_line_width=0, + marker_opacity=1, + legendrank=500, + ) + data_dict[station].append(_bar) for counter, (ufcol, data) in enumerate(data_dict.items(), 1): fig.add_traces(data, rows=counter, cols=cols) @@ -275,7 +330,7 @@ def figure_summary_raindry( title={"text": title, "pad": {"b": 20}}, barmode="stack", hovermode="x", - height=max([800, 250 * rows]), + height=max([600, 250 * rows]), bargap=0, dragmode="zoom", legend={"title": "Stations"}, @@ -289,11 +344,20 @@ def figure_summary_raindry( if period.lower() == "yearly": ticktext = series.index.strftime("%Y") + if series.index.size <= THRESHOLD_XAXES: + xticktext = ticktext + xtickvals = np.arange(series.index.size) + else: + xticktext = ticktext[::2] + xtickvals = np.arange(series.index.size)[::2] + UPDATE_XAXES = { - "ticktext": ticktext, - "tickvals": np.arange(series.index.size), - "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "ticktext": xticktext, + "tickvals": xtickvals, + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.1"), "gridwidth": 2, + # "nticks": 2, + "ticklabelstep": 2, } UPDATE_YAXES = { @@ -301,6 +365,7 @@ def figure_summary_raindry( "gridwidth": 2, "fixedrange": True, "title": "Days", + "range": [0, summary[(station, "days")].max()], } def update_axis(fig, update, n, axis: str = "x"): @@ -313,9 +378,133 @@ def update_axis(fig, update, n, axis: str = "x"): for axis, update in zip(["x", "y"], [UPDATE_XAXES, UPDATE_YAXES]): update_axis(fig, update, n_row, axis) - color_list = pytemplate.hktemplate.layout.colorway[:2] + color_list = list(pytemplate.hktemplate.layout.colorway[:2]) + ["DarkGray"] for data, color in zip(fig.data, color_list * rows): data.marker.color = color return dcc.Graph(figure=fig) + + +def figure_summary_maxdate( + summary_all: pd.DataFrame, + ufunc_col: list[str] = None, + rows: int = 3, + cols: int = 1, + subplot_titles: list[str] = None, + title: str = "Maximum Rainfall Occurrence", + periods: list[str] = None, + bubble_sizes: list[int] = None, +): + + if summary_all[0].size > THRESHOLD_SUMMARY: + return dcc.Graph( + figure=figure_empty("dataset above threshold"), config={"staticPlot": True} + ) + + ufunc_col = ["max_date"] if ufunc_col is None else ufunc_col + subplot_titles = ( + ["Biweekly", "Monthly", "Yearly"] if subplot_titles is None else subplot_titles + ) + periods = ["biweekly", "monthly", "yearly"] if periods is None else periods + + fig = make_subplots( + rows=rows, + cols=cols, + shared_xaxes=True, + vertical_spacing=0.05, + subplot_titles=subplot_titles, + ) + + fig.layout.images = [_generate_dict_watermark(n) for n in range(2, rows + 1)] + + # Create new DF + + all_stat = [] + for summary, period in zip(summary_all, periods): + for station in summary.columns.levels[0]: + _max = summary[station].dropna(subset=ufunc_col) + _max["max_date"] = pd.to_datetime(_max["max_date"]) + _max = _max.set_index("max_date")[["max"]] + _max.columns = pd.MultiIndex.from_tuples([(period, station)]) + all_stat.append(_max) + + all_df = pd.concat(all_stat, axis=1) + + bubble_sizes = [8, 9, 10] if bubble_sizes is None else bubble_sizes + + data_dict = defaultdict(list) + for period, bubble_size in zip(all_df.columns.levels[0], bubble_sizes): + sizeref = 2.0 * all_df[period].max().max() / (bubble_size**2) + for station, series in all_df[period].items(): + yvals = series.where(~series.notna(), station) + _scatter = go.Scatter( + x=series.index, + y=yvals, + mode="markers", + marker_size=series.fillna(0), + marker_sizeref=sizeref, + legendgroup=station, + legendgrouptitle_text=station, + name=f"{period}", + hovertemplate="%{y}
%{customdata[0]}
%{customdata[1]} mm", + customdata=np.stack( + [ + series.index.strftime("%d %B %Y"), + series.to_numpy(), + ], + axis=-1, + ), + ) + data_dict[period].append(_scatter) + + for counter, (period, data) in enumerate(data_dict.items(), 1): + fig.add_traces(data, rows=counter, cols=cols) + + fig.update_layout( + title_text=title, + title_pad_b=20, + height=1000, + dragmode="zoom", + legend_title="Stations", + legend_itemsizing="constant", + hovermode="closest", + ) + + def update_axis(fig, update, n, axis: str = "x"): + n = "" if n == 1 else n + fig.update(layout={f"{axis}axis{n}": update}) + + # XAXES + + fig.update(layout={f"xaxis{rows}": {"title": "Date"}}) + + # GENERAL UPDATE + UPDATE_XAXES = { + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.1"), + "gridwidth": 2, + } + UPDATE_YAXES = { + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.1"), + "gridwidth": 2, + "fixedrange": True, + "title": "Station", + } + + for n_row in range(1, rows + 1): + for axis, update in zip(["x", "y"], [UPDATE_XAXES, UPDATE_YAXES]): + update_axis(fig, update, n_row, axis) + + n_data = len(fig.data) + n_split = n_data // 3 + + if n_split < len(pytemplate.hktemplate.layout.colorway): + colors = list(pytemplate.hktemplate.layout.colorway[:n_split]) + else: + colorway_list = pytemplate.hktemplate.layout.colorway + colors = list(islice(cycle(colorway_list), n_split)) + + for data, color in zip(fig.data, colors * 3): + data.marker.color = color + + return dcc.Graph(figure=fig) diff --git a/pyfunc.py b/pyfunc.py index 65ca8b6..e1eb153 100644 --- a/pyfunc.py +++ b/pyfunc.py @@ -58,7 +58,7 @@ def max_date(vector): if vector.any(): return vector.idxmax().date() else: - return "No Data/Rainfall" + return np.nan def max(vector): return vector.max() From 2e79d3ce533a96e1c645cc0198a89f6f1887270a Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Tue, 10 May 2022 15:20:49 +0700 Subject: [PATCH 07/12] =?UTF-8?q?=F0=9F=93=9A=20new=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example_1Y7S.csv | 366 ++++++ example_2Y4S.csv | 731 ++++++++++++ example_9Y1S.csv | 2923 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 4020 insertions(+) create mode 100644 example_1Y7S.csv create mode 100644 example_2Y4S.csv create mode 100644 example_9Y1S.csv diff --git a/example_1Y7S.csv b/example_1Y7S.csv new file mode 100644 index 0000000..d70ac99 --- /dev/null +++ b/example_1Y7S.csv @@ -0,0 +1,366 @@ +DATE,STA_A,STA_D,STA_F,STA_G,STA_L,STA_M,STA_P +2009-01-01,0.0,21.5,0.0,21,0,0.0,0 +2009-01-02,0.0,18.9,0.0,0,0,0.0,0 +2009-01-03,0.0,24.0,0.0,0,0,0.0,0 +2009-01-04,0.0,0.0,0.0,0,0,0.0,0 +2009-01-05,0.0,19.0,0.0,0,0,0.0,0 +2009-01-06,0.0,35.0,0.0,0,0,0.0,0 +2009-01-07,0.0,26.2,0.0,0,0,0.0,0 +2009-01-08,0.0,28.0,0.0,10,14,0.0,9 +2009-01-09,7.8,21.8,3.5,0,3,35.8,2 +2009-01-10,10.0,14.7,8.5,0,0,1.0,3 +2009-01-11,0.0,20.8,4.5,10,4,2.5,2 +2009-01-12,6.5,32.4,5.0,0,0,2.3,2 +2009-01-13,16.4,29.1,3.5,12,0,2.7,12 +2009-01-14,30.0,0.0,6.5,0,16,9.0,12 +2009-01-15,16.4,19.0,0.0,0,0,13.0,1 +2009-01-16,2.0,18.0,4.6,40,3,1.0,3 +2009-01-17,0.0,20.0,3.5,7,5,1.0,3 +2009-01-18,7.0,22.6,0.0,30,0,5.2,0 +2009-01-19,0.0,38.0,0.0,0,0,0.0,3 +2009-01-20,1.4,25.0,0.0,0,4,0.9,10 +2009-01-21,16.69,0.0,0.0,0,0,55.0,0 +2009-01-22,0.0,27.2,0.0,0,0,1.0,8 +2009-01-23,0.0,30.8,0.0,0,0,0.5,5 +2009-01-24,0.0,31.5,0.0,14,30,0.0,19 +2009-01-25,28.9,25.7,2.5,0,22,18.5,13 +2009-01-26,53.2,20.2,2.6,30,1,3.0,12 +2009-01-27,0.0,24.8,0.0,30,0,0.5,0 +2009-01-28,0.2,32.0,0.0,0,0,0.0,0 +2009-01-29,0.0,33.0,0.0,28,12,0.0,38 +2009-01-30,25.8,36.7,4.6,27,5,26.0,7 +2009-01-31,14.3,30.5,6.5,50,0,10.0,1 +2009-02-01,1.1,0.0,6.5,17,6,0.0,7 +2009-02-02,13.0,0.0,6.5,18,2,19.5,12 +2009-02-03,3.3,0.0,4.5,14,36,3.0,20 +2009-02-04,9.2,25.8,10.5,45,8,15.0,3 +2009-02-05,0.0,20.2,9.0,0,1,1.0,2 +2009-02-06,13.2,30.5,5.5,0,6,1.3,5 +2009-02-07,10.0,0.0,0.0,0,0,5.0,0 +2009-02-08,0.1,11.5,6.5,0,0,0.0,2 +2009-02-09,1.2,40.9,0.0,14,0,2.5,0 +2009-02-10,0.5,21.4,3.5,0,13,0.5,3 +2009-02-11,0.7,16.0,2.5,0,8,3.0,5 +2009-02-12,0.0,32.4,6.5,0,4,3.0,0 +2009-02-13,0.1,8.6,0.0,0,3,0.0,56 +2009-02-14,8.5,11.2,0.0,0,0,39.5,0 +2009-02-15,4.5,0.0,0.0,0,0,0.0,2 +2009-02-16,4.7,0.0,0.0,75,2,6.5,1 +2009-02-17,0.0,0.0,0.0,8,7,1.0,1 +2009-02-18,0.0,0.0,3.5,0,2,0.5,3 +2009-02-19,0.2,0.0,0.0,0,0,1.2,1 +2009-02-20,2.9,5.2,0.0,62,27,46.0,33 +2009-02-21,24.8,48.5,6.5,0,15,41.4,33 +2009-02-22,29.4,36.6,9.5,23,6,59.5,15 +2009-02-23,29.4,42.0,16.5,0,13,18.0,25 +2009-02-24,22.6,0.0,14.5,0,14,24.5,10 +2009-02-25,4.8,0.0,15.5,35,0,9.5,0 +2009-02-26,1.0,0.0,13.5,0,0,0.0,0 +2009-02-27,0.0,14.0,0.0,0,3,0.0,23 +2009-02-28,17.7,10.0,6.5,0,0,12.8,7 +2009-03-01,0.0,26.0,2.5,0,0,2.1,0 +2009-03-02,0.0,20.8,0.0,0,0,0.0,0 +2009-03-03,0.0,0.0,0.0,0,1,0.0,3 +2009-03-04,1.2,18.2,10.5,20,17,2.8,29 +2009-03-05,16.4,6.4,4.5,18,57,40.0,29 +2009-03-06,77.0,0.0,0.0,0,0,46.9,11 +2009-03-07,0.0,0.0,0.0,28,0,0.0,1 +2009-03-08,13.5,0.0,0.0,22,8,1.0,29 +2009-03-09,19.5,23.7,0.0,0,18,24.0,0 +2009-03-10,40.8,32.6,0.0,0,34,19.8,1 +2009-03-11,36.4,0.0,0.0,0,3,1.0,4 +2009-03-12,18.8,0.0,0.0,0,36,12.5,20 +2009-03-13,2.4,31.0,0.0,0,0,26.5,0 +2009-03-14,0.0,21.9,0.0,0,43,0.0,9 +2009-03-15,52.6,24.6,0.0,0,0,62.5,0 +2009-03-16,3.8,30.2,0.0,0,0,0.0,0 +2009-03-17,0.0,0.0,0.0,0,0,0.0,0 +2009-03-18,0.0,0.0,0.0,0,0,0.0,0 +2009-03-19,0.0,12.8,0.0,0,0,0.0,2 +2009-03-20,0.0,0.0,0.0,0,0,0.0,0 +2009-03-21,0.0,8.5,0.0,47,38,0.0,28 +2009-03-22,25.4,0.0,14.5,0,22,22.5,0 +2009-03-23,58.5,0.0,0.0,25,7,4.5,11 +2009-03-24,0.6,10.4,12.5,0,4,26.5,0 +2009-03-25,0.0,5.2,0.0,38,6,0.0,1 +2009-03-26,43.2,0.0,10.5,10,2,15.0,18 +2009-03-27,12.4,15.5,0.0,0,1,11.0,3 +2009-03-28,0.0,40.6,0.0,60,26,2.5,19 +2009-03-29,20.3,42.5,7.5,0,6,1.0,12 +2009-03-30,0.7,45.8,6.5,8,4,17.5,0 +2009-03-31,27.8,0.0,25.5,0,3,0.0,5 +2009-04-01,0.0,40.6,0.0,0,7,1.8,1 +2009-04-02,0.0,35.9,0.0,30,0,0.5,0 +2009-04-03,0.0,26.4,0.0,0,0,6.4,1 +2009-04-04,3.2,0.0,5.5,3,0,36.0,0 +2009-04-05,16.0,0.0,6.5,35,24,3.1,29 +2009-04-06,2.1,0.0,16.5,27,18,27.0,20 +2009-04-07,11.0,0.0,0.0,5,0,3.5,1 +2009-04-08,13.4,22.8,0.0,0,0,2.0,1 +2009-04-09,0.0,20.6,0.0,0,0,0.0,0 +2009-04-10,0.0,0.0,0.0,0,0,0.0,0 +2009-04-11,0.0,0.0,0.0,0,0,0.0,0 +2009-04-12,8.9,0.0,0.0,0,0,0.0,0 +2009-04-13,2.7,0.0,0.0,0,3,5.3,3 +2009-04-14,1.5,0.0,0.0,0,0,35.5,3 +2009-04-15,6.3,17.0,18.5,0,1,0.0,0 +2009-04-16,0.1,30.2,2.5,0,0,0.0,0 +2009-04-17,0.0,10.6,0.0,0,0,4.5,0 +2009-04-18,0.0,7.4,0.0,0,0,0.0,0 +2009-04-19,0.0,0.0,12.5,0,53,0.0,11 +2009-04-20,4.6,0.0,0.0,0,0,15.0,0 +2009-04-21,0.0,15.4,0.0,0,20,0.0,2 +2009-04-22,0.9,26.9,3.5,30,7,10.5,12 +2009-04-23,8.8,0.0,5.5,12,45,20.5,34 +2009-04-24,18.2,0.0,0.0,0,0,3.5,0 +2009-04-25,0.0,0.0,0.0,3,0,0.0,9 +2009-04-26,0.0,30.8,0.0,0,62,1.3,29 +2009-04-27,8.5,42.6,12.5,7,49,22.0,2 +2009-04-28,4.4,46.2,0.0,0,1,0.5,0 +2009-04-29,4.1,0.0,0.0,0,0,0.0,0 +2009-04-30,0.0,0.0,0.0,0,0,0.0,0 +2009-05-01,0.6,0.0,7.5,0,0,2.9,0 +2009-05-02,0.0,72.4,10.5,0,0,0.0,0 +2009-05-03,0.0,0.0,0.0,0,0,0.0,0 +2009-05-04,23.2,0.0,0.0,0,0,0.0,0 +2009-05-05,0.1,56.8,0.0,19,0,0.0,0 +2009-05-06,11.6,0.0,15.5,0,4,0.0,0 +2009-05-07,0.2,0.0,6.5,0,0,1.4,0 +2009-05-08,0.0,38.5,0.0,0,1,0.0,1 +2009-05-09,0.0,47.2,0.0,40,0,0.0,0 +2009-05-10,0.0,0.0,10.5,0,17,7.5,0 +2009-05-11,14.7,0.0,5.5,47,28,0.0,13 +2009-05-12,22.8,0.0,0.0,0,0,26.5,0 +2009-05-13,0.0,49.2,6.5,0,8,0.0,0 +2009-05-14,2.4,0.0,0.0,0,0,3.6,2 +2009-05-15,0.0,0.0,7.5,0,6,1.2,0 +2009-05-16,2.1,0.0,0.0,0,0,3.8,0 +2009-05-17,0.0,0.0,0.0,30,6,0.0,55 +2009-05-18,8.3,0.0,10.5,0,29,79.0,49 +2009-05-19,85.2,68.5,12.5,0,0,76.0,0 +2009-05-20,1.0,57.8,0.0,0,11,0.0,51 +2009-05-21,4.8,0.0,3.5,0,0,0.0,4 +2009-05-22,0.6,45.5,2.5,0,20,0.0,0 +2009-05-23,0.9,0.0,0.0,0,0,0.0,0 +2009-05-24,0.1,0.0,0.0,0,4,0.0,3 +2009-05-25,10.0,0.0,0.0,0,0,1.0,0 +2009-05-26,0.0,0.0,0.0,0,0,0.0,0 +2009-05-27,0.0,52.8,0.0,0,0,0.0,0 +2009-05-28,0.0,79.8,5.5,20,0,0.0,0 +2009-05-29,1.6,32.4,10.1,0,24,4.0,13 +2009-05-30,0.0,0.0,15.5,5,0,0.0,0 +2009-05-31,0.2,62.7,7.5,10,0,0.0,0 +2009-06-01,0.0,0.0,5.5,0,3,0.0,0 +2009-06-02,0.0,0.0,20.5,40,25,0.0,4 +2009-06-03,20.5,0.0,0.0,0,0,0.0,1 +2009-06-04,0.1,21.4,15.5,0,9,2.0,16 +2009-06-05,4.0,0.0,0.0,0,1,20.5,5 +2009-06-06,5.8,0.0,0.0,0,0,6.0,0 +2009-06-07,3.8,0.0,8.5,0,0,0.0,0 +2009-06-08,0.0,0.0,2.5,0,9,0.0,50 +2009-06-09,6.2,0.0,0.0,0,0,10.5,0 +2009-06-10,0.0,10.8,0.0,0,0,0.0,0 +2009-06-11,0.0,18.9,0.0,0,0,0.0,0 +2009-06-12,0.0,22.8,0.0,0,0,0.0,0 +2009-06-13,0.0,0.0,8.5,0,0,11.9,0 +2009-06-14,0.0,0.0,0.0,0,0,0.0,0 +2009-06-15,0.0,0.0,8.5,0,5,0.0,0 +2009-06-16,0.1,0.0,0.0,0,0,0.0,0 +2009-06-17,6.3,0.0,0.0,0,0,0.0,0 +2009-06-18,0.0,0.0,0.0,0,0,0.0,3 +2009-06-19,0.0,0.0,0.0,0,0,2.3,0 +2009-06-20,0.0,0.0,0.0,0,0,0.0,0 +2009-06-21,0.0,24.5,0.0,0,0,0.0,0 +2009-06-22,0.0,0.0,0.0,0,0,0.0,0 +2009-06-23,0.0,0.0,0.0,0,55,0.0,29 +2009-06-24,0.0,0.0,0.0,0,0,5.0,0 +2009-06-25,0.0,0.0,0.0,0,0,0.0,0 +2009-06-26,0.0,0.0,0.0,0,0,0.0,0 +2009-06-27,0.0,0.0,0.0,0,0,0.0,0 +2009-06-28,0.0,0.0,0.0,0,0,0.0,0 +2009-06-29,0.0,8.6,2.5,0,2,0.0,0 +2009-06-30,0.0,0.0,0.0,0,0,0.0,0 +2009-07-01,0.0,0.0,0.0,0,0,0.0,0 +2009-07-02,0.0,5.6,8.5,0,0,0.0,0 +2009-07-03,0.0,0.0,0.0,0,4,0.0,6 +2009-07-04,0.0,0.0,0.0,0,0,4.5,0 +2009-07-05,0.0,0.0,0.0,0,0,0.0,0 +2009-07-06,0.0,0.0,0.0,0,0,0.0,0 +2009-07-07,0.0,0.0,0.0,0,0,0.0,0 +2009-07-08,0.0,0.0,0.0,0,0,0.0,0 +2009-07-09,0.0,0.0,0.0,0,0,0.0,0 +2009-07-10,0.0,0.0,0.0,0,0,0.0,0 +2009-07-11,0.0,0.0,0.0,0,0,0.0,0 +2009-07-12,0.0,0.0,0.0,0,0,0.0,0 +2009-07-13,0.0,0.0,0.0,0,0,0.0,0 +2009-07-14,0.0,0.0,0.0,0,0,0.0,0 +2009-07-15,0.0,0.0,0.0,0,0,0.0,0 +2009-07-16,0.0,0.0,0.0,0,0,0.0,0 +2009-07-17,0.0,0.0,0.0,0,0,0.0,0 +2009-07-18,0.0,0.0,0.0,0,0,0.0,0 +2009-07-19,0.0,0.0,0.0,0,0,0.0,0 +2009-07-20,0.0,0.0,0.0,0,0,0.0,0 +2009-07-21,0.0,0.0,0.0,0,0,0.0,0 +2009-07-22,0.0,0.0,0.0,0,0,0.0,0 +2009-07-23,0.0,0.0,0.0,0,0,0.0,0 +2009-07-24,0.0,0.0,8.5,0,0,2.6,0 +2009-07-25,0.0,0.0,0.0,0,0,2.5,0 +2009-07-26,0.5,0.0,0.0,0,0,0.0,0 +2009-07-27,0.0,0.0,0.0,0,0,0.0,0 +2009-07-28,0.0,0.0,0.0,0,0,0.0,0 +2009-07-29,0.0,0.0,0.0,0,0,0.0,0 +2009-07-30,0.0,0.0,0.0,0,0,0.0,0 +2009-07-31,0.0,0.0,0.0,0,0,0.0,0 +2009-08-01,0.0,0.0,0.0,0,0,0.0,0 +2009-08-02,0.0,0.0,0.0,0,0,0.0,0 +2009-08-03,0.0,0.0,0.0,0,0,0.0,0 +2009-08-04,0.0,0.0,0.0,0,0,0.0,0 +2009-08-05,0.0,0.0,0.0,0,0,0.0,0 +2009-08-06,0.0,0.0,0.0,0,0,0.0,0 +2009-08-07,0.0,0.0,0.0,0,0,0.0,0 +2009-08-08,0.0,0.0,0.0,0,0,0.0,0 +2009-08-09,0.0,0.0,0.0,0,0,0.0,0 +2009-08-10,0.0,0.0,0.0,0,0,0.0,0 +2009-08-11,0.0,0.0,0.0,0,0,0.0,0 +2009-08-12,0.0,0.0,0.0,0,0,0.0,0 +2009-08-13,0.0,0.0,0.0,0,0,0.0,0 +2009-08-14,0.0,0.0,5.5,0,0,0.0,0 +2009-08-15,0.2,0.0,0.0,33,0,0.0,0 +2009-08-16,3.2,0.0,0.0,0,0,0.0,0 +2009-08-17,0.0,0.0,16.5,0,0,0.0,0 +2009-08-18,0.0,0.0,0.0,0,0,0.0,0 +2009-08-19,0.0,0.0,0.0,0,0,0.0,0 +2009-08-20,0.0,0.0,0.0,0,0,0.0,0 +2009-08-21,0.0,0.0,0.0,0,0,0.0,0 +2009-08-22,0.0,0.0,0.0,0,0,0.0,0 +2009-08-23,0.0,0.0,0.0,0,0,0.0,0 +2009-08-24,0.0,0.0,0.0,0,0,0.0,0 +2009-08-25,0.0,0.0,0.0,0,0,0.0,0 +2009-08-26,0.0,0.0,0.0,0,0,0.0,0 +2009-08-27,0.0,0.0,0.0,0,11,0.0,5 +2009-08-28,0.0,0.0,0.0,0,0,4.0,0 +2009-08-29,0.0,0.0,0.0,0,0,0.0,0 +2009-08-30,0.0,0.0,0.0,0,0,0.0,0 +2009-08-31,0.0,0.0,0.0,0,0,0.0,0 +2009-09-01,0.0,0.0,0.0,0,0,0.0,0 +2009-09-02,0.0,0.0,0.0,0,0,0.0,0 +2009-09-03,0.0,0.0,0.0,0,0,0.0,0 +2009-09-04,0.0,0.0,0.0,0,0,0.0,0 +2009-09-05,0.0,0.0,0.0,0,0,0.0,0 +2009-09-06,0.0,0.0,0.0,0,0,0.0,0 +2009-09-07,0.0,0.0,0.0,0,0,0.0,0 +2009-09-08,0.0,0.0,0.0,0,0,0.0,0 +2009-09-09,8.1,0.0,0.0,0,0,0.0,0 +2009-09-10,0.0,0.0,0.0,0,0,0.0,0 +2009-09-11,0.0,0.0,0.0,0,0,0.0,0 +2009-09-12,0.0,0.0,0.0,0,0,0.0,0 +2009-09-13,0.0,0.0,0.0,0,0,0.0,0 +2009-09-14,0.0,0.0,0.0,0,13,0.0,0 +2009-09-15,0.0,0.0,6.0,7,0,0.0,7 +2009-09-16,14.3,0.0,0.0,0,0,0.0,1 +2009-09-17,1.7,0.0,0.0,0,0,6.5,0 +2009-09-18,0.0,0.0,0.0,0,0,0.0,0 +2009-09-19,0.0,0.0,0.0,0,0,0.0,0 +2009-09-20,0.0,0.0,0.0,0,0,0.0,0 +2009-09-21,0.0,0.0,0.0,0,0,0.0,0 +2009-09-22,0.0,0.0,0.0,0,0,0.0,0 +2009-09-23,0.0,0.0,9.5,0,0,0.0,0 +2009-09-24,0.0,0.0,0.0,32,0,0.0,0 +2009-09-25,0.0,0.0,0.0,6,0,0.0,0 +2009-09-26,29.5,0.0,0.0,0,0,0.0,0 +2009-09-27,0.0,0.0,0.0,0,0,0.0,0 +2009-09-28,0.0,0.0,0.0,0,0,0.0,0 +2009-09-29,0.0,0.0,0.0,0,0,0.0,0 +2009-09-30,0.0,0.0,0.0,0,0,0.0,0 +2009-10-01,0.0,0.0,0.0,0,0,0.0,2 +2009-10-02,0.0,0.0,0.0,0,0,5.0,0 +2009-10-03,0.0,85.5,0.0,0,0,0.0,0 +2009-10-04,0.0,90.2,25.5,20,0,0.0,0 +2009-10-05,4.3,62.0,16.5,19,0,0.0,7 +2009-10-06,6.1,0.0,10.5,5,52,76.0,74 +2009-10-07,10.2,0.0,7.5,17,3,22.5,19 +2009-10-08,6.6,0.0,0.0,0,0,67.0,0 +2009-10-09,2.2,0.0,0.0,0,0,0.0,0 +2009-10-10,0.0,0.0,0.0,15,0,0.0,0 +2009-10-11,0.1,0.0,0.0,0,0,0.0,0 +2009-10-12,0.0,0.0,0.0,17,17,0.0,2 +2009-10-13,2.6,0.0,21.5,13,67,17.0,26 +2009-10-14,7.8,0.0,6.5,25,78,45.5,7 +2009-10-15,30.8,78.8,4.5,0,0,0.0,0 +2009-10-16,0.0,65.7,0.0,0,0,0.0,0 +2009-10-17,0.0,0.0,0.0,0,0,0.0,0 +2009-10-18,0.0,0.0,0.0,0,0,0.0,0 +2009-10-19,0.0,0.0,0.0,0,0,0.0,0 +2009-10-20,0.0,0.0,0.0,0,0,0.0,0 +2009-10-21,0.0,80.5,0.0,0,0,0.0,0 +2009-10-22,0.0,82.6,0.0,30,0,2.0,2 +2009-10-23,0.0,0.0,4.5,0,0,0.0,0 +2009-10-24,0.0,0.0,0.0,0,0,2.0,0 +2009-10-25,0.0,0.0,0.0,0,0,0.0,0 +2009-10-26,0.0,0.0,0.0,14,0,0.0,1 +2009-10-27,0.2,0.0,0.0,0,2,0.0,0 +2009-10-28,0.0,0.0,0.0,14,0,3.2,0 +2009-10-29,0.6,0.0,0.0,0,0,0.0,0 +2009-10-30,0.0,0.0,0.0,0,0,0.0,0 +2009-10-31,0.0,0.0,0.0,0,0,0.0,0 +2009-11-01,0.0,37.8,0.0,0,0,0.0,0 +2009-11-02,0.0,80.6,0.0,0,0,0.0,0 +2009-11-03,0.0,0.0,0.0,5,0,0.0,0 +2009-11-04,0.0,0.0,0.0,0,0,0.0,0 +2009-11-05,0.0,0.0,0.0,0,0,0.0,0 +2009-11-06,0.0,35.4,0.0,5,0,0.0,0 +2009-11-07,0.0,0.0,0.0,0,0,0.0,0 +2009-11-08,0.0,0.0,5.5,0,0,0.0,0 +2009-11-09,14.2,20.5,0.0,0,0,12.0,0 +2009-11-10,0.0,17.2,0.0,10,41,34.0,5 +2009-11-11,0.0,0.0,17.5,36,35,20.5,48 +2009-11-12,0.0,0.0,2.5,40,2,0.0,7 +2009-11-13,0.0,0.0,3.5,0,4,23.5,6 +2009-11-14,5.6,16.4,10.5,0,0,0.0,0 +2009-11-15,0.0,0.0,0.0,0,0,0.0,0 +2009-11-16,14.1,0.0,0.0,0,5,0.0,2 +2009-11-17,11.5,16.8,3.5,85,7,11.5,4 +2009-11-18,24.3,0.0,21.5,38,17,28.0,25 +2009-11-19,21.8,0.0,0.5,30,42,23.0,31 +2009-11-20,28.6,40.8,11.5,79,38,35.0,41 +2009-11-21,12.3,36.2,8.5,11,4,2.5,9 +2009-11-22,27.8,32.5,10.5,0,10,7.5,19 +2009-11-23,10.2,37.5,8.5,0,13,0.0,3 +2009-11-24,0.0,34.0,8.3,0,0,0.0,0 +2009-11-25,12.0,0.0,0.0,8,2,0.0,0 +2009-11-26,0.0,0.0,0.0,5,10,33.0,0 +2009-11-27,4.3,15.4,0.0,10,1,0.0,8 +2009-11-28,1.3,13.8,0.0,10,21,0.0,0 +2009-11-29,2.4,16.8,5.5,0,11,50.0,12 +2009-11-30,3.1,0.0,8.5,0,7,15.5,1 +2009-12-01,8.3,0.0,0.0,25,0,15.5,1 +2009-12-02,3.2,0.0,9.5,0,0,4.5,3 +2009-12-03,9.1,3.0,6.5,0,0,5.0,0 +2009-12-04,8.7,0.0,0.0,0,0,0.0,0 +2009-12-05,2.0,0.0,6.5,0,9,1.0,36 +2009-12-06,1.3,0.0,5.5,0,5,14.0,1 +2009-12-07,5.1,30.6,3.5,0,9,0.0,0 +2009-12-08,5.0,35.5,0.0,0,0,0.0,15 +2009-12-09,7.8,0.0,4.5,0,4,0.0,3 +2009-12-10,10.4,0.0,6.5,0,0,18.5,1 +2009-12-11,3.0,0.0,3.5,0,0,0.0,0 +2009-12-12,11.2,0.0,0.0,0,14,0.0,0 +2009-12-13,4.1,0.0,0.0,13,7,0.0,0 +2009-12-14,1.3,41.9,0.0,0,0,0.0,0 +2009-12-15,0.0,0.0,0.0,0,9,0.0,2 +2009-12-16,0.0,0.0,0.0,0,0,0.0,0 +2009-12-17,0.0,0.0,17.5,0,0,9.2,2 +2009-12-18,0.4,0.0,0.0,0,0,0.0,0 +2009-12-19,0.2,0.0,0.0,0,0,0.0,0 +2009-12-20,0.0,47.0,0.0,0,0,0.0,21 +2009-12-21,0.0,0.0,0.0,0,0,5.0,0 +2009-12-22,0.0,0.0,0.0,0,0,0.0,2 +2009-12-23,0.0,0.0,0.0,0,0,0.0,0 +2009-12-24,0.1,0.0,2.5,0,83,0.0,29 +2009-12-25,1.5,0.0,5.5,25,28,1.5,54 +2009-12-26,19.8,0.0,3.5,0,20,40.0,42 +2009-12-27,5.3,42.5,0.0,8,55,7.5,20 +2009-12-28,13.7,49.5,10.5,0,3,9.5,14 +2009-12-29,5.6,52.8,0.0,0,6,3.5,5 +2009-12-30,23.3,58.0,0.0,21,5,8.7,2 +2009-12-31,15.4,35.8,0.0,24,1,0.5,0 diff --git a/example_2Y4S.csv b/example_2Y4S.csv new file mode 100644 index 0000000..c164d8e --- /dev/null +++ b/example_2Y4S.csv @@ -0,0 +1,731 @@ +DATE,STA_A,STA_H,STA_I,STA_M +2018-01-01,6.0,31.5,35,0.0 +2018-01-02,52.0,37.9,27,10.0 +2018-01-03,8.0,29.4,2,16.0 +2018-01-04,38.5,12.8,12,11.0 +2018-01-05,46.0,0.0,9,5.5 +2018-01-06,12.0,0.0,11,1.5 +2018-01-07,2.5,0.0,0,0.0 +2018-01-08,0.0,0.0,0,0.0 +2018-01-09,1.0,0.0,0,0.0 +2018-01-10,14.5,0.0,4,39.0 +2018-01-11,6.5,0.0,10,0.0 +2018-01-12,3.5,0.0,1,0.0 +2018-01-13,0.0,0.0,0,1.5 +2018-01-14,3.0,0.0,3,0.0 +2018-01-15,4.5,0.0,7,0.0 +2018-01-16,2.0,0.0,0,0.0 +2018-01-17,0.0,0.0,0,0.0 +2018-01-18,0.0,0.0,0,0.0 +2018-01-19,1.5,0.0,5,0.0 +2018-01-20,2.5,0.0,0,0.0 +2018-01-21,1.0,0.0,0,9.0 +2018-01-22,38.5,0.0,8,0.0 +2018-01-23,0.0,3.8,0,0.0 +2018-01-24,0.0,0.0,0,1.0 +2018-01-25,0.0,7.6,0,0.0 +2018-01-26,6.0,0.0,2,3.5 +2018-01-27,18.5,0.0,14,0.0 +2018-01-28,3.0,0.0,0,0.0 +2018-01-29,7.5,0.0,11,0.0 +2018-01-30,5.0,0.0,25,1.5 +2018-01-31,2.0,0.0,13,0.0 +2018-02-01,0.0,0.0,9,0.0 +2018-02-02,0.0,0.0,0,4.0 +2018-02-03,23.0,0.0,14,1.5 +2018-02-04,2.5,0.0,7,0.0 +2018-02-05,3.5,0.0,11,9.3 +2018-02-06,7.0,0.0,15,3.5 +2018-02-07,14.0,0.0,21,0.0 +2018-02-08,4.0,0.0,20,0.0 +2018-02-09,6.0,0.0,0,0.0 +2018-02-10,0.0,0.0,0,0.0 +2018-02-11,0.0,0.0,0,0.0 +2018-02-12,0.0,0.0,6,4.5 +2018-02-13,2.0,0.0,1,0.0 +2018-02-14,9.5,0.0,4,0.0 +2018-02-15,1.0,0.0,3,4.5 +2018-02-16,5.0,0.0,0,0.0 +2018-02-17,0.0,0.0,15,0.0 +2018-02-18,3.0,0.0,0,5.5 +2018-02-19,0.0,0.0,0,46.5 +2018-02-20,8.0,0.0,10,15.0 +2018-02-21,2.5,0.0,9,9.5 +2018-02-22,11.0,0.0,17,13.5 +2018-02-23,18.5,0.0,49,0.0 +2018-02-24,6.5,0.0,0,8.0 +2018-02-25,9.0,0.0,4,7.5 +2018-02-26,34.5,0.0,35,39.0 +2018-02-27,13.0,0.0,29,22.0 +2018-02-28,29.0,0.0,31,3.0 +2018-03-01,2.0,0.0,25,6.0 +2018-03-02,7.5,0.0,37,4.0 +2018-03-03,6.0,0.0,19,9.0 +2018-03-04,9.0,0.0,14,21.0 +2018-03-05,13.5,0.0,7,12.5 +2018-03-06,11.0,0.0,13,0.0 +2018-03-07,21.0,0.0,25,1.0 +2018-03-08,31.0,0.0,35,40.5 +2018-03-09,29.5,0.0,51,4.0 +2018-03-10,1.0,0.0,11,10.3 +2018-03-11,2.5,0.0,0,17.0 +2018-03-12,25.0,0.0,7,31.5 +2018-03-13,4.0,0.0,0,0.0 +2018-03-14,0.0,0.0,0,2.2 +2018-03-15,0.0,0.0,0,25.0 +2018-03-16,0.0,0.0,39,23.0 +2018-03-17,18.0,0.0,0,45.3 +2018-03-18,6.0,0.0,0,37.0 +2018-03-19,4.5,0.0,0,14.0 +2018-03-20,28.0,0.0,36,33.0 +2018-03-21,59.0,0.0,53,0.0 +2018-03-22,1.0,0.0,0,0.0 +2018-03-23,4.0,0.0,2,2.0 +2018-03-24,21.0,0.0,11,5.0 +2018-03-25,6.5,0.0,0,0.0 +2018-03-26,2.0,0.0,0,0.0 +2018-03-27,0.0,0.0,0,1.0 +2018-03-28,44.0,0.0,13,7.5 +2018-03-29,0.0,0.0,2,17.5 +2018-03-30,1.0,0.0,0,0.0 +2018-03-31,0.0,0.0,0,0.0 +2018-04-01,1.5,10.5,0,0.0 +2018-04-02,0.0,0.0,0,6.0 +2018-04-03,0.0,0.0,0,27.5 +2018-04-04,3.0,0.0,7,2.0 +2018-04-05,4.0,2.5,0,7.0 +2018-04-06,11.5,0.0,0,0.0 +2018-04-07,0.0,7.0,0,40.0 +2018-04-08,18.0,9.5,16,0.0 +2018-04-09,10.5,5.0,0,2.5 +2018-04-10,1.5,0.0,3,0.0 +2018-04-11,3.5,0.0,0,0.0 +2018-04-12,0.0,0.0,0,6.5 +2018-04-13,1.0,0.0,0,23.0 +2018-04-14,0.5,9.0,0,0.0 +2018-04-15,17.5,7.5,0,0.0 +2018-04-16,0.0,1.0,7,0.0 +2018-04-17,1.0,0.0,0,0.0 +2018-04-18,8.0,0.0,0,1.5 +2018-04-19,2.0,8.0,2,17.0 +2018-04-20,12.0,1.5,0,2.0 +2018-04-21,6.0,0.0,21,4.5 +2018-04-22,8.5,0.0,35,2.5 +2018-04-23,32.0,0.0,47,2.5 +2018-04-24,4.5,2.5,12,0.0 +2018-04-25,0.0,0.0,0,9.5 +2018-04-26,2.5,0.0,0,8.5 +2018-04-27,9.5,0.0,0,0.0 +2018-04-28,5.0,6.5,0,0.0 +2018-04-29,7.5,0.0,0,0.0 +2018-04-30,0.0,0.0,0,0.0 +2018-05-01,0.0,0.0,0,0.0 +2018-05-02,0.0,0.0,0,0.0 +2018-05-03,0.0,0.0,0,0.0 +2018-05-04,0.0,0.0,0,0.0 +2018-05-05,0.5,4.5,3,0.0 +2018-05-06,0.0,0.0,0,0.0 +2018-05-07,0.0,3.0,0,0.0 +2018-05-08,0.0,7.0,0,15.0 +2018-05-09,3.0,2.5,23,0.0 +2018-05-10,0.0,0.0,0,0.0 +2018-05-11,0.0,3.5,0,0.0 +2018-05-12,0.0,0.0,0,0.0 +2018-05-13,0.0,3.0,2,0.0 +2018-05-14,0.0,0.0,0,0.0 +2018-05-15,0.0,0.0,0,7.0 +2018-05-16,1.0,0.0,0,18.0 +2018-05-17,0.0,0.0,0,0.0 +2018-05-18,2.0,9.5,0,26.0 +2018-05-19,4.0,4.0,0,2.0 +2018-05-20,8.0,0.0,7,0.0 +2018-05-21,6.5,0.0,3,1.0 +2018-05-22,3.0,0.0,18,1.5 +2018-05-23,5.0,1.5,1,3.0 +2018-05-24,9.5,0.0,0,6.0 +2018-05-25,11.0,0.0,0,3.0 +2018-05-26,2.5,3.5,2,0.0 +2018-05-27,7.5,4.0,0,0.0 +2018-05-28,0.0,0.0,0,0.0 +2018-05-29,0.0,0.0,0,0.0 +2018-05-30,0.0,0.0,0,0.0 +2018-05-31,0.0,0.0,0,0.0 +2018-06-01,0.0,0.0,0,0.0 +2018-06-02,0.0,0.0,0,0.0 +2018-06-03,0.0,0.0,0,0.0 +2018-06-04,0.0,0.0,0,0.0 +2018-06-05,0.0,2.5,0,0.0 +2018-06-06,0.0,0.0,0,0.0 +2018-06-07,0.0,0.0,0,0.0 +2018-06-08,0.0,0.0,0,0.0 +2018-06-09,0.0,1.5,0,0.0 +2018-06-10,0.0,14.0,0,0.0 +2018-06-11,0.0,17.0,0,0.0 +2018-06-12,0.0,0.0,0,0.0 +2018-06-13,0.0,3.5,0,0.0 +2018-06-14,0.0,1.0,0,0.0 +2018-06-15,0.0,0.0,0,0.0 +2018-06-16,0.0,0.0,11,0.0 +2018-06-17,0.0,0.0,0,0.0 +2018-06-18,0.0,2.5,0,0.0 +2018-06-19,0.0,0.0,0,0.0 +2018-06-20,0.0,8.0,0,0.0 +2018-06-21,0.0,0.0,0,0.0 +2018-06-22,0.0,1.5,0,0.0 +2018-06-23,5.0,2.5,4,0.0 +2018-06-24,7.5,0.0,0,0.0 +2018-06-25,4.0,0.0,0,0.0 +2018-06-26,10.5,0.0,0,13.0 +2018-06-27,15.0,0.0,32,0.0 +2018-06-28,0.0,3.0,0,0.0 +2018-06-29,0.0,0.0,0,0.0 +2018-06-30,0.0,0.0,0,0.0 +2018-07-01,0.0,0.0,0,0.0 +2018-07-02,0.0,0.0,0,0.0 +2018-07-03,0.0,1.0,0,0.0 +2018-07-04,0.0,9.0,0,0.0 +2018-07-05,0.0,2.0,0,0.0 +2018-07-06,0.0,0.0,0,0.0 +2018-07-07,0.0,0.0,0,0.0 +2018-07-08,0.0,2.0,0,0.0 +2018-07-09,0.0,3.5,0,0.0 +2018-07-10,0.0,0.0,0,0.0 +2018-07-11,0.0,0.0,0,0.0 +2018-07-12,0.0,6.0,0,0.0 +2018-07-13,0.0,9.0,0,0.0 +2018-07-14,0.0,0.0,0,0.0 +2018-07-15,0.0,0.0,0,0.0 +2018-07-16,0.0,0.0,0,0.0 +2018-07-17,0.0,0.0,0,0.0 +2018-07-18,0.0,3.0,0,0.0 +2018-07-19,0.0,0.0,0,0.0 +2018-07-20,0.0,0.0,0,0.0 +2018-07-21,0.0,0.0,0,0.0 +2018-07-22,0.0,0.0,0,0.0 +2018-07-23,0.0,11.5,0,0.0 +2018-07-24,0.0,3.0,0,0.0 +2018-07-25,0.0,0.0,0,0.0 +2018-07-26,0.0,1.5,0,0.0 +2018-07-27,0.0,0.0,0,0.0 +2018-07-28,0.0,0.0,0,0.0 +2018-07-29,0.0,6.5,0,0.0 +2018-07-30,0.0,0.0,0,0.0 +2018-07-31,0.0,0.0,0,0.0 +2018-08-01,0.0,1.5,0,0.0 +2018-08-02,0.0,0.0,25,0.0 +2018-08-03,0.0,0.0,0,0.0 +2018-08-04,0.0,0.0,0,0.0 +2018-08-05,0.0,0.0,0,0.0 +2018-08-06,0.0,6.5,0,0.0 +2018-08-07,0.0,0.0,0,0.0 +2018-08-08,0.0,0.0,0,0.0 +2018-08-09,0.0,0.0,0,0.0 +2018-08-10,3.0,0.0,2,0.0 +2018-08-11,0.0,2.5,13,0.0 +2018-08-12,0.0,0.0,0,0.0 +2018-08-13,0.0,0.0,0,0.0 +2018-08-14,0.0,0.0,0,0.0 +2018-08-15,0.0,0.0,0,0.0 +2018-08-16,0.0,0.0,0,0.0 +2018-08-17,0.0,0.0,0,0.0 +2018-08-18,0.0,0.0,0,0.0 +2018-08-19,0.0,0.0,0,0.0 +2018-08-20,0.0,0.0,0,0.0 +2018-08-21,0.0,0.0,0,0.0 +2018-08-22,0.0,0.0,0,0.0 +2018-08-23,0.0,0.0,0,0.0 +2018-08-24,0.0,0.0,0,0.0 +2018-08-25,0.0,0.0,0,0.0 +2018-08-26,0.0,0.0,0,0.0 +2018-08-27,0.0,11.5,0,0.0 +2018-08-28,0.0,14.0,0,0.0 +2018-08-29,0.0,3.0,0,0.0 +2018-08-30,7.5,6.0,0,1.5 +2018-08-31,0.0,10.5,0,0.0 +2018-09-01,3.0,3.0,2,0.0 +2018-09-02,6.0,6.0,11,0.0 +2018-09-03,4.5,0.0,0,0.0 +2018-09-04,0.0,0.0,0,0.0 +2018-09-05,0.0,0.0,0,0.0 +2018-09-06,0.0,0.0,0,0.0 +2018-09-07,0.0,4.0,0,0.0 +2018-09-08,3.5,0.0,0,0.0 +2018-09-09,0.0,0.0,0,0.0 +2018-09-10,0.0,0.0,0,0.0 +2018-09-11,0.0,0.0,0,0.0 +2018-09-12,0.0,0.0,0,0.0 +2018-09-13,0.0,0.0,0,0.0 +2018-09-14,0.0,5.0,0,0.0 +2018-09-15,0.0,0.0,0,0.0 +2018-09-16,0.0,0.0,0,0.0 +2018-09-17,0.0,0.0,0,0.0 +2018-09-18,0.0,0.0,0,0.0 +2018-09-19,0.0,0.0,0,0.0 +2018-09-20,0.0,0.0,0,0.0 +2018-09-21,1.0,0.0,0,0.0 +2018-09-22,0.0,18.5,0,0.0 +2018-09-23,0.0,0.0,0,0.0 +2018-09-24,0.0,0.0,0,0.0 +2018-09-25,0.0,0.0,0,0.0 +2018-09-26,0.0,0.0,0,0.0 +2018-09-27,0.0,0.0,0,0.0 +2018-09-28,0.0,0.0,0,0.0 +2018-09-29,0.0,0.0,0,0.0 +2018-09-30,0.0,0.0,0,0.0 +2018-10-01,0.0,0.0,0,0.0 +2018-10-02,0.0,0.0,0,0.0 +2018-10-03,0.0,0.0,0,4.0 +2018-10-04,0.0,0.0,0,0.0 +2018-10-05,0.0,0.0,0,0.0 +2018-10-06,0.0,0.0,0,0.0 +2018-10-07,0.0,0.0,0,0.0 +2018-10-08,0.0,0.0,0,0.0 +2018-10-09,0.0,0.0,0,0.0 +2018-10-10,0.0,0.0,0,0.0 +2018-10-11,0.0,0.0,0,0.0 +2018-10-12,0.0,0.0,0,0.0 +2018-10-13,0.0,0.0,0,0.0 +2018-10-14,0.0,0.0,4,0.0 +2018-10-15,0.0,0.0,0,0.0 +2018-10-16,0.0,0.0,0,0.0 +2018-10-17,0.0,0.0,0,1.0 +2018-10-18,0.0,0.0,0,2.5 +2018-10-19,0.0,0.0,0,0.0 +2018-10-20,0.0,2.0,0,0.0 +2018-10-21,0.0,8.5,0,0.0 +2018-10-22,0.0,6.0,0,0.0 +2018-10-23,1.0,3.0,0,19.5 +2018-10-24,13.0,0.0,21,0.0 +2018-10-25,1.5,9.5,9,1.5 +2018-10-26,2.0,12.0,14,0.0 +2018-10-27,15.0,3.5,29,0.0 +2018-10-28,11.0,0.0,0,2.0 +2018-10-29,18.0,4.0,31,0.0 +2018-10-30,27.5,2.5,42,7.5 +2018-10-31,16.5,4.5,27,46.0 +2018-11-01,24.0,0.0,3,0.0 +2018-11-02,9.0,0.0,58,0.0 +2018-11-03,2.5,0.0,6,0.0 +2018-11-04,7.0,0.0,4,0.0 +2018-11-05,0.0,3.0,0,5.5 +2018-11-06,3.5,0.0,9,36.0 +2018-11-07,1.0,0.0,2,0.5 +2018-11-08,30.0,0.0,0,3.0 +2018-11-09,6.0,3.0,26,0.0 +2018-11-10,21.5,0.0,0,0.0 +2018-11-11,46.0,0.0,10,0.0 +2018-11-12,5.0,10.0,10,8.5 +2018-11-13,0.0,2.0,0,0.0 +2018-11-14,0.0,30.0,1,4.5 +2018-11-15,23.5,29.0,0,11.0 +2018-11-16,0.0,24.0,7,5.0 +2018-11-17,0.0,14.0,49,0.0 +2018-11-18,0.0,6.0,30,0.0 +2018-11-19,0.0,3.0,0,0.0 +2018-11-20,0.0,0.0,5,91.0 +2018-11-21,19.0,0.0,40,8.0 +2018-11-22,12.0,0.0,3,3.0 +2018-11-23,24.0,9.0,30,0.0 +2018-11-24,44.5,0.0,3,16.0 +2018-11-25,23.0,1.0,20,76.0 +2018-11-26,15.5,0.0,32,0.0 +2018-11-27,26.0,10.0,28,0.0 +2018-11-28,21.0,1.5,11,0.0 +2018-11-29,41.0,22.0,0,2.5 +2018-11-30,34.0,0.0,7,0.0 +2018-12-01,9.0,0.0,0,47.0 +2018-12-02,26.0,0.0,1,32.5 +2018-12-03,17.5,15.0,0,0.0 +2018-12-04,36.5,41.0,8,0.0 +2018-12-05,31.0,11.0,0,3.0 +2018-12-06,7.0,27.0,0,1.0 +2018-12-07,11.0,3.0,0,9.0 +2018-12-08,4.0,12.0,0,14.5 +2018-12-09,0.0,7.5,0,0.0 +2018-12-10,3.0,70.0,0,6.0 +2018-12-11,5.5,1.0,1,6.5 +2018-12-12,8.5,34.0,10,0.0 +2018-12-13,16.0,2.0,8,0.0 +2018-12-14,67.0,4.0,17,0.0 +2018-12-15,28.5,10.5,9,0.0 +2018-12-16,46.0,15.0,0,0.0 +2018-12-17,24.0,23.0,0,0.0 +2018-12-18,19.5,13.0,8,0.0 +2018-12-19,9.0,1.0,0,11.5 +2018-12-20,0.0,1.0,0,0.0 +2018-12-21,0.0,6.0,18,15.0 +2018-12-22,0.0,6.0,0,2.0 +2018-12-23,0.5,1.5,0,45.0 +2018-12-24,2.0,0.0,1,3.0 +2018-12-25,0.0,0.0,3,0.0 +2018-12-26,4.0,0.0,20,12.5 +2018-12-27,2.5,0.0,0,0.0 +2018-12-28,6.0,0.0,10,8.0 +2018-12-29,7.5,37.0,0,0.0 +2018-12-30,0.0,12.0,0,0.0 +2018-12-31,0.0,18.5,15,0.0 +2019-01-01,0.0,0.0,0,0.0 +2019-01-02,7.0,3.5,2,0.0 +2019-01-03,9.0,19.0,0,0.0 +2019-01-04,0.0,21.5,0,0.0 +2019-01-05,0.0,8.0,0,21.5 +2019-01-06,0.0,0.0,0,0.0 +2019-01-07,0.0,0.0,0,2.0 +2019-01-08,3.5,0.0,1,20.0 +2019-01-09,0.0,0.0,11,2.5 +2019-01-10,0.0,0.0,3,2.7 +2019-01-11,17.5,0.0,1,15.0 +2019-01-12,7.0,0.0,2,7.0 +2019-01-13,14.0,0.0,5,60.5 +2019-01-14,32.0,0.0,46,0.0 +2019-01-15,0.0,6.0,1,0.0 +2019-01-16,6.0,9.5,0,0.0 +2019-01-17,0.0,2.0,0,4.5 +2019-01-18,8.5,11.5,0,2.0 +2019-01-19,1.0,15.0,1,0.0 +2019-01-20,0.0,9.0,0,4.0 +2019-01-21,3.5,0.0,0,1.0 +2019-01-22,8.0,0.0,0,2.0 +2019-01-23,7.0,0.0,1,0.0 +2019-01-24,0.0,0.0,0,0.0 +2019-01-25,2.0,0.0,1,0.0 +2019-01-26,0.0,6.5,0,5.0 +2019-01-27,0.0,2.5,3,0.0 +2019-01-28,11.0,3.0,5,0.0 +2019-01-29,0.0,7.5,0,0.0 +2019-01-30,24.0,12.0,1,0.0 +2019-01-31,5.0,0.0,0,0.0 +2019-02-01,3.0,6.0,0,25.0 +2019-02-02,5.0,0.0,3,19.0 +2019-02-03,6.5,9.0,0,5.0 +2019-02-04,17.0,32.0,0,16.0 +2019-02-05,0.0,15.0,0,1.5 +2019-02-06,0.0,0.0,0,9.0 +2019-02-07,19.0,0.0,2,4.5 +2019-02-08,14.5,0.0,39,13.5 +2019-02-09,26.0,0.0,5,79.5 +2019-02-10,11.0,0.0,51,33.8 +2019-02-11,9.0,0.0,36,31.0 +2019-02-12,18.0,0.0,29,1.0 +2019-02-13,22.0,0.0,17,0.5 +2019-02-14,0.0,0.0,0,20.5 +2019-02-15,41.0,9.0,23,0.0 +2019-02-16,4.0,0.0,0,22.0 +2019-02-17,29.0,0.0,7,8.0 +2019-02-18,27.0,3.0,26,3.5 +2019-02-19,2.5,5.0,19,0.0 +2019-02-20,21.0,5.5,17,95.5 +2019-02-21,6.0,3.0,15,5.5 +2019-02-22,8.0,1.5,8,5.0 +2019-02-23,23.0,0.0,33,28.5 +2019-02-24,19.0,0.0,41,1.0 +2019-02-25,12.0,16.0,1,0.0 +2019-02-26,32.0,0.0,0,0.0 +2019-02-27,1.5,0.0,0,0.0 +2019-02-28,0.0,0.0,0,2.0 +2019-03-01,2.5,2.5,0,4.5 +2019-03-02,28.5,0.0,31,43.5 +2019-03-03,12.5,3.0,5,1.0 +2019-03-04,8.0,0.0,0,16.0 +2019-03-05,0.0,1.5,0,21.0 +2019-03-06,13.0,16.5,3,40.0 +2019-03-07,20.0,19.0,28,0.0 +2019-03-08,0.0,4.0,0,0.0 +2019-03-09,3.0,0.0,0,14.0 +2019-03-10,11.0,0.0,1,0.0 +2019-03-11,0.0,0.0,0,9.0 +2019-03-12,2.5,0.0,0,0.0 +2019-03-13,2.0,0.0,0,0.0 +2019-03-14,0.5,0.0,0,0.0 +2019-03-15,0.0,0.0,0,3.0 +2019-03-16,6.0,1.0,17,0.0 +2019-03-17,9.0,0.0,3,1.0 +2019-03-18,3.0,0.0,0,0.0 +2019-03-19,4.0,0.0,0,17.5 +2019-03-20,29.0,0.0,6,2.5 +2019-03-21,3.5,22.5,1,16.5 +2019-03-22,1.5,13.0,0,1.0 +2019-03-23,4.5,19.0,2,0.0 +2019-03-24,1.0,17.5,0,0.0 +2019-03-25,0.0,0.0,0,0.0 +2019-03-26,2.0,0.0,0,20.0 +2019-03-27,4.0,0.0,1,10.0 +2019-03-28,23.0,3.0,3,1.5 +2019-03-29,14.0,28.5,1,44.0 +2019-03-30,7.0,22.0,0,0.0 +2019-03-31,1.0,25.5,0,2.5 +2019-04-01,1.0,0.0,0,10.5 +2019-04-02,4.0,0.0,0,14.0 +2019-04-03,51.0,0.0,14,7.0 +2019-04-04,6.0,0.0,1,2.0 +2019-04-05,19.0,0.0,9,1.0 +2019-04-06,25.0,0.0,0,17.5 +2019-04-07,1.0,0.0,0,61.0 +2019-04-08,22.0,2.5,4,8.5 +2019-04-09,10.5,0.0,25,18.0 +2019-04-10,0.0,0.0,0,0.0 +2019-04-11,0.0,0.0,0,0.0 +2019-04-12,0.0,0.0,0,7.5 +2019-04-13,3.0,0.0,0,3.0 +2019-04-14,24.0,9.0,22,2.0 +2019-04-15,9.0,2.5,20,16.0 +2019-04-16,5.0,18.0,2,33.0 +2019-04-17,34.0,21.5,16,0.0 +2019-04-18,19.0,6.0,27,3.5 +2019-04-19,7.0,0.0,21,11.0 +2019-04-20,17.0,0.0,47,1.0 +2019-04-21,0.0,1.0,0,0.0 +2019-04-22,0.0,0.0,0,0.0 +2019-04-23,0.0,0.0,0,24.5 +2019-04-24,11.0,5.5,0,0.0 +2019-04-25,0.0,12.0,12,8.5 +2019-04-26,14.0,8.5,4,3.5 +2019-04-27,43.0,0.0,6,1.0 +2019-04-28,2.0,0.0,10,4.5 +2019-04-29,16.0,0.0,27,0.0 +2019-04-30,3.5,0.0,21,2.0 +2019-05-01,27.0,0.0,39,25.0 +2019-05-02,1.0,0.0,0,5.5 +2019-05-03,5.0,0.0,0,4.0 +2019-05-04,1.5,0.0,0,0.0 +2019-05-05,0.0,0.0,0,12.5 +2019-05-06,3.0,0.0,0,0.0 +2019-05-07,0.0,0.0,0,0.0 +2019-05-08,0.0,0.0,2,0.0 +2019-05-09,9.0,0.0,0,7.5 +2019-05-10,1.0,0.0,15,0.0 +2019-05-11,0.0,0.0,1,0.0 +2019-05-12,0.0,0.0,1,0.0 +2019-05-13,0.0,0.0,3,0.0 +2019-05-14,0.0,0.0,0,0.0 +2019-05-15,0.0,0.0,0,0.0 +2019-05-16,17.5,0.0,11,0.0 +2019-05-17,2.0,0.0,7,0.0 +2019-05-18,0.0,0.0,0,0.0 +2019-05-19,0.0,0.0,0,0.0 +2019-05-20,0.0,0.0,0,0.0 +2019-05-21,2.5,0.0,0,0.0 +2019-05-22,0.0,0.0,0,0.0 +2019-05-23,0.0,0.0,0,0.0 +2019-05-24,0.0,0.0,0,0.0 +2019-05-25,0.0,0.0,0,0.0 +2019-05-26,0.0,0.0,0,0.0 +2019-05-27,0.0,0.0,0,0.0 +2019-05-28,0.0,0.0,0,0.0 +2019-05-29,0.0,0.0,0,0.0 +2019-05-30,0.0,0.0,0,0.0 +2019-05-31,0.0,0.0,0,0.0 +2019-06-01,0.0,0.0,0,0.0 +2019-06-02,0.0,0.0,0,0.0 +2019-06-03,0.0,3.5,2,0.0 +2019-06-04,0.0,0.0,0,0.0 +2019-06-05,0.0,0.0,0,0.0 +2019-06-06,0.0,0.0,0,0.0 +2019-06-07,0.0,0.0,0,0.0 +2019-06-08,0.0,0.0,0,0.0 +2019-06-09,0.0,1.5,0,0.0 +2019-06-10,0.0,0.0,0,0.0 +2019-06-11,0.0,0.0,0,0.0 +2019-06-12,0.0,0.0,0,0.0 +2019-06-13,0.0,0.0,0,0.0 +2019-06-14,0.0,0.0,0,0.0 +2019-06-15,0.0,0.0,0,0.0 +2019-06-16,0.0,0.0,0,0.0 +2019-06-17,0.0,0.0,3,0.0 +2019-06-18,0.0,0.0,0,0.0 +2019-06-19,0.0,0.0,0,0.0 +2019-06-20,0.0,0.0,0,0.0 +2019-06-21,0.0,0.0,0,0.0 +2019-06-22,0.0,0.0,0,0.0 +2019-06-23,0.0,0.0,0,0.0 +2019-06-24,0.0,0.0,0,0.0 +2019-06-25,0.0,0.0,0,0.0 +2019-06-26,0.0,0.0,0,0.0 +2019-06-27,0.0,0.0,0,0.0 +2019-06-28,0.0,0.0,0,0.0 +2019-06-29,0.0,0.0,0,0.0 +2019-06-30,0.0,0.0,0,0.0 +2019-07-01,0.0,0.0,0,0.0 +2019-07-02,0.0,0.0,0,0.0 +2019-07-03,0.0,0.0,0,0.0 +2019-07-04,0.0,0.0,0,0.0 +2019-07-05,0.0,0.0,2,0.0 +2019-07-06,0.0,0.0,0,0.0 +2019-07-07,0.0,0.0,0,0.0 +2019-07-08,0.0,0.0,0,0.0 +2019-07-09,0.0,0.0,0,0.0 +2019-07-10,0.0,0.0,0,0.0 +2019-07-11,0.0,0.0,0,0.0 +2019-07-12,0.0,0.0,0,0.0 +2019-07-13,0.0,0.0,0,0.0 +2019-07-14,0.0,0.0,0,0.0 +2019-07-15,0.0,0.0,0,0.0 +2019-07-16,0.0,0.0,0,0.0 +2019-07-17,0.0,0.0,0,0.0 +2019-07-18,0.0,0.0,0,0.0 +2019-07-19,0.0,0.0,0,0.0 +2019-07-20,0.0,0.0,0,0.0 +2019-07-21,0.0,0.0,0,0.0 +2019-07-22,0.0,0.0,0,0.0 +2019-07-23,0.0,0.0,0,0.0 +2019-07-24,0.0,0.0,0,0.0 +2019-07-25,0.0,0.0,0,0.0 +2019-07-26,0.0,0.0,0,0.0 +2019-07-27,0.0,0.0,0,0.0 +2019-07-28,0.0,0.0,0,0.0 +2019-07-29,0.0,0.0,0,0.0 +2019-07-30,0.0,0.0,0,0.0 +2019-07-31,0.0,0.0,0,0.0 +2019-08-01,0.0,0.0,0,0.0 +2019-08-02,0.0,0.0,0,0.0 +2019-08-03,0.0,0.0,0,0.0 +2019-08-04,0.0,0.0,0,0.0 +2019-08-05,0.0,0.0,0,0.0 +2019-08-06,0.0,0.0,0,0.0 +2019-08-07,0.0,0.0,0,0.0 +2019-08-08,0.0,0.0,0,0.0 +2019-08-09,0.0,0.0,0,0.0 +2019-08-10,0.0,0.0,0,0.0 +2019-08-11,0.0,0.0,0,0.0 +2019-08-12,0.0,0.0,0,0.0 +2019-08-13,0.0,0.0,0,0.0 +2019-08-14,0.0,0.0,0,0.0 +2019-08-15,0.0,0.0,0,0.0 +2019-08-16,0.0,0.0,0,0.0 +2019-08-17,0.0,0.0,0,0.0 +2019-08-18,0.0,0.0,0,0.0 +2019-08-19,0.0,0.0,0,0.0 +2019-08-20,0.0,0.0,0,0.0 +2019-08-21,0.0,0.0,0,0.0 +2019-08-22,0.0,0.0,0,0.0 +2019-08-23,0.0,0.0,0,0.0 +2019-08-24,0.0,0.0,0,0.0 +2019-08-25,0.0,0.0,0,0.0 +2019-08-26,0.0,0.0,0,0.0 +2019-08-27,0.0,0.0,0,0.0 +2019-08-28,0.0,0.0,0,0.0 +2019-08-29,0.0,0.0,0,0.0 +2019-08-30,0.0,0.0,0,0.0 +2019-08-31,0.0,0.0,0,0.0 +2019-09-01,0.0,0.0,0,0.0 +2019-09-02,0.0,0.0,0,0.0 +2019-09-03,0.0,0.0,0,0.0 +2019-09-04,0.0,1.0,0,0.0 +2019-09-05,2.0,0.0,0,0.0 +2019-09-06,0.0,0.0,0,0.0 +2019-09-07,0.0,0.0,0,0.0 +2019-09-08,0.0,0.0,0,0.0 +2019-09-09,0.0,0.0,0,0.0 +2019-09-10,0.0,0.0,0,0.0 +2019-09-11,0.0,0.0,0,0.0 +2019-09-12,0.0,0.0,0,0.0 +2019-09-13,0.0,0.0,0,0.0 +2019-09-14,0.0,0.0,0,0.0 +2019-09-15,0.0,0.0,0,0.0 +2019-09-16,0.0,0.0,0,0.0 +2019-09-17,0.0,0.0,0,0.0 +2019-09-18,0.0,0.0,0,0.0 +2019-09-19,0.0,0.0,0,0.0 +2019-09-20,0.0,0.0,0,0.0 +2019-09-21,0.0,0.0,0,0.0 +2019-09-22,0.0,0.0,0,0.0 +2019-09-23,0.0,0.0,0,0.0 +2019-09-24,0.0,0.0,0,0.0 +2019-09-25,0.0,0.0,0,0.0 +2019-09-26,0.0,0.0,0,0.0 +2019-09-27,0.0,0.0,0,0.0 +2019-09-28,0.0,0.0,0,0.0 +2019-09-29,0.0,0.0,0,0.0 +2019-09-30,0.0,0.0,0,0.0 +2019-10-01,0.0,0.0,0,0.0 +2019-10-02,0.0,0.0,0,0.0 +2019-10-03,0.0,0.0,0,0.0 +2019-10-04,0.0,0.0,0,0.0 +2019-10-05,0.0,0.0,0,0.0 +2019-10-06,0.0,0.0,0,0.0 +2019-10-07,0.0,0.0,0,0.0 +2019-10-08,0.0,0.0,0,0.0 +2019-10-09,1.0,0.0,2,0.0 +2019-10-10,0.0,0.0,0,0.0 +2019-10-11,0.0,0.0,0,0.0 +2019-10-12,0.0,0.0,0,3.5 +2019-10-13,0.0,0.0,0,0.0 +2019-10-14,0.0,0.0,0,0.0 +2019-10-15,0.0,0.0,0,0.0 +2019-10-16,15.0,0.0,0,0.0 +2019-10-17,0.0,0.0,0,0.0 +2019-10-18,0.0,0.0,0,0.0 +2019-10-19,0.0,0.0,0,0.0 +2019-10-20,0.0,0.0,0,0.0 +2019-10-21,0.0,0.0,0,0.0 +2019-10-22,0.0,0.0,0,0.0 +2019-10-23,0.0,0.0,0,0.0 +2019-10-24,0.0,0.0,0,0.0 +2019-10-25,0.0,0.0,0,0.0 +2019-10-26,0.0,0.0,0,0.0 +2019-10-27,0.0,0.0,22,0.0 +2019-10-28,0.0,0.0,0,0.0 +2019-10-29,0.0,0.0,10,6.0 +2019-10-30,16.0,0.0,0,0.0 +2019-10-31,0.0,0.0,0,0.0 +2019-11-01,2.0,0.0,1,35.5 +2019-11-02,0.0,0.0,34,0.0 +2019-11-03,9.0,0.0,0,3.5 +2019-11-04,39.0,0.0,47,4.0 +2019-11-05,1.0,0.0,0,14.5 +2019-11-06,15.0,0.0,0,0.0 +2019-11-07,9.5,0.0,1,0.0 +2019-11-08,0.0,3.5,0,19.0 +2019-11-09,1.5,0.0,1,0.0 +2019-11-10,33.0,0.0,3,0.0 +2019-11-11,0.0,0.0,0,0.0 +2019-11-12,0.5,0.0,0,0.0 +2019-11-13,0.0,0.0,0,0.0 +2019-11-14,1.0,0.0,0,0.0 +2019-11-15,0.0,0.0,0,0.0 +2019-11-16,0.0,0.0,0,0.0 +2019-11-17,0.0,0.0,0,0.0 +2019-11-18,0.0,0.0,0,0.0 +2019-11-19,0.0,0.0,0,0.0 +2019-11-20,0.0,0.0,0,0.0 +2019-11-21,7.5,0.0,3,1.5 +2019-11-22,0.0,0.0,0,0.0 +2019-11-23,1.0,0.0,3,0.0 +2019-11-24,0.5,0.0,1,1.0 +2019-11-25,0.0,0.0,0,18.0 +2019-11-26,0.0,0.0,6,0.0 +2019-11-27,0.0,0.0,1,0.0 +2019-11-28,0.0,0.0,0,0.0 +2019-11-29,0.0,2.5,0,0.0 +2019-11-30,0.0,0.0,0,0.0 +2019-12-01,1.5,11.0,0,10.5 +2019-12-02,0.0,0.0,0,0.0 +2019-12-03,1.0,4.0,0,0.0 +2019-12-04,2.0,17.0,8,2.5 +2019-12-05,0.5,19.0,1,2.0 +2019-12-06,0.0,83.0,0,1.5 +2019-12-07,8.0,4.0,55,1.5 +2019-12-08,4.0,0.0,0,0.0 +2019-12-09,0.0,0.0,0,0.0 +2019-12-10,0.0,3.0,0,0.0 +2019-12-11,0.0,0.0,0,0.0 +2019-12-12,1.0,0.0,0,0.0 +2019-12-13,0.0,13.0,0,0.0 +2019-12-14,4.5,37.0,7,6.5 +2019-12-15,10.0,0.0,4,1.0 +2019-12-16,12.0,77.0,0,42.0 +2019-12-17,5.0,40.0,3,20.5 +2019-12-18,41.0,6.0,47,6.0 +2019-12-19,20.0,5.0,2,11.5 +2019-12-20,14.0,0.0,1,0.0 +2019-12-21,0.0,0.0,0,0.0 +2019-12-22,0.0,5.0,0,0.0 +2019-12-23,6.0,0.0,3,0.0 +2019-12-24,0.0,13.0,0,0.0 +2019-12-25,16.0,10.0,0,1.0 +2019-12-26,29.0,23.0,2,5.5 +2019-12-27,7.0,6.0,11,2.0 +2019-12-28,43.0,8.0,27,2.5 +2019-12-29,3.0,14.0,1,0.0 +2019-12-30,0.0,0.0,0,0.0 +2019-12-31,4.5,25.0,0,9.0 diff --git a/example_9Y1S.csv b/example_9Y1S.csv new file mode 100644 index 0000000..fe053a6 --- /dev/null +++ b/example_9Y1S.csv @@ -0,0 +1,2923 @@ +DATE,STA_P +2012-01-01,1.0 +2012-01-02,22.0 +2012-01-03,0.5 +2012-01-04,11.5 +2012-01-05,21.0 +2012-01-06,5.5 +2012-01-07,2.0 +2012-01-08,2.5 +2012-01-09,0.0 +2012-01-10,0.5 +2012-01-11,2.5 +2012-01-12,0.0 +2012-01-13,6.5 +2012-01-14,1.0 +2012-01-15,2.0 +2012-01-16,5.0 +2012-01-17,42.5 +2012-01-18,1.5 +2012-01-19,6.5 +2012-01-20,4.5 +2012-01-21,1.0 +2012-01-22,0.5 +2012-01-23,0.0 +2012-01-24,0.5 +2012-01-25,0.0 +2012-01-26,1.5 +2012-01-27,0.5 +2012-01-28,0.0 +2012-01-29,0.5 +2012-01-30,4.5 +2012-01-31,1.5 +2012-02-01,0.0 +2012-02-02,13.0 +2012-02-03,2.5 +2012-02-04,3.0 +2012-02-05,0.5 +2012-02-06,4.0 +2012-02-07,0.0 +2012-02-08,5.5 +2012-02-09,41.5 +2012-02-10,0.0 +2012-02-11,6.0 +2012-02-12,5.5 +2012-02-13,15.0 +2012-02-14,0.5 +2012-02-15,0.0 +2012-02-16,0.0 +2012-02-17,33.5 +2012-02-18,10.5 +2012-02-19,0.0 +2012-02-20,0.0 +2012-02-21,21.0 +2012-02-22,2.5 +2012-02-23,0.0 +2012-02-24,0.5 +2012-02-25,0.0 +2012-02-26,63.5 +2012-02-27,48.5 +2012-02-28,0.5 +2012-02-29,10.0 +2012-03-01,11.5 +2012-03-02,1.5 +2012-03-03,15.0 +2012-03-04,0.5 +2012-03-05,51.0 +2012-03-06,3.5 +2012-03-07,1.0 +2012-03-08,22.0 +2012-03-09,2.0 +2012-03-10,2.5 +2012-03-11,0.5 +2012-03-12,0.0 +2012-03-13,0.0 +2012-03-14,0.0 +2012-03-15,0.0 +2012-03-16,0.0 +2012-03-17,0.0 +2012-03-18,1.5 +2012-03-19,0.0 +2012-03-20,0.0 +2012-03-21,1.5 +2012-03-22,0.0 +2012-03-23,0.0 +2012-03-24,0.0 +2012-03-25,18.5 +2012-03-26,9.0 +2012-03-27,2.5 +2012-03-28,39.0 +2012-03-29,13.5 +2012-03-30,7.0 +2012-03-31,1.5 +2012-04-01,0.0 +2012-04-02,6.0 +2012-04-03,11.0 +2012-04-04,5.5 +2012-04-05,0.0 +2012-04-06,49.5 +2012-04-07,8.0 +2012-04-08,0.0 +2012-04-09,33.5 +2012-04-10,5.5 +2012-04-11,0.0 +2012-04-12,26.0 +2012-04-13,0.0 +2012-04-14,0.0 +2012-04-15,0.0 +2012-04-16,0.0 +2012-04-17,0.0 +2012-04-18,0.0 +2012-04-19,5.0 +2012-04-20,0.0 +2012-04-21,0.5 +2012-04-22,0.0 +2012-04-23,0.0 +2012-04-24,0.0 +2012-04-25,0.0 +2012-04-26,0.0 +2012-04-27,0.5 +2012-04-28,0.0 +2012-04-29,15.0 +2012-04-30,0.0 +2012-05-01,11.0 +2012-05-02,0.0 +2012-05-03,0.0 +2012-05-04,0.0 +2012-05-05,0.0 +2012-05-06,0.0 +2012-05-07,0.0 +2012-05-08,4.0 +2012-05-09,5.0 +2012-05-10,0.0 +2012-05-11,0.0 +2012-05-12,0.0 +2012-05-13,0.0 +2012-05-14,2.0 +2012-05-15,40.0 +2012-05-16,6.0 +2012-05-17,6.5 +2012-05-18,0.0 +2012-05-19,11.0 +2012-05-20,0.0 +2012-05-21,10.0 +2012-05-22,0.0 +2012-05-23,0.0 +2012-05-24,0.0 +2012-05-25,0.0 +2012-05-26,0.0 +2012-05-27,0.0 +2012-05-28,0.0 +2012-05-29,0.0 +2012-05-30,3.0 +2012-05-31,0.0 +2012-06-01,20.5 +2012-06-02,6.0 +2012-06-03,0.5 +2012-06-04,0.0 +2012-06-05,0.0 +2012-06-06,0.0 +2012-06-07,8.5 +2012-06-08,0.0 +2012-06-09,1.0 +2012-06-10,3.5 +2012-06-11,0.0 +2012-06-12,0.0 +2012-06-13,0.0 +2012-06-14,0.0 +2012-06-15,0.0 +2012-06-16,0.0 +2012-06-17,0.0 +2012-06-18,0.0 +2012-06-19,0.0 +2012-06-20,0.0 +2012-06-21,0.0 +2012-06-22,0.0 +2012-06-23,0.0 +2012-06-24,0.0 +2012-06-25,0.0 +2012-06-26,0.0 +2012-06-27,0.0 +2012-06-28,0.0 +2012-06-29,0.0 +2012-06-30,0.0 +2012-07-01,0.0 +2012-07-02,0.0 +2012-07-03,0.0 +2012-07-04,0.0 +2012-07-05,0.0 +2012-07-06,0.0 +2012-07-07,0.0 +2012-07-08,0.0 +2012-07-09,0.0 +2012-07-10,0.0 +2012-07-11,0.0 +2012-07-12,0.0 +2012-07-13,0.0 +2012-07-14,0.0 +2012-07-15,0.0 +2012-07-16,0.0 +2012-07-17,0.0 +2012-07-18,0.0 +2012-07-19,0.0 +2012-07-20,0.0 +2012-07-21,0.0 +2012-07-22,0.0 +2012-07-23,0.0 +2012-07-24,0.0 +2012-07-25,0.0 +2012-07-26,0.0 +2012-07-27,0.0 +2012-07-28,0.0 +2012-07-29,0.0 +2012-07-30,0.0 +2012-07-31,0.0 +2012-08-01,0.0 +2012-08-02,0.0 +2012-08-03,0.0 +2012-08-04,0.0 +2012-08-05,0.0 +2012-08-06,0.0 +2012-08-07,0.0 +2012-08-08,0.0 +2012-08-09,0.0 +2012-08-10,0.0 +2012-08-11,0.0 +2012-08-12,0.0 +2012-08-13,0.0 +2012-08-14,0.0 +2012-08-15,0.0 +2012-08-16,0.0 +2012-08-17,0.0 +2012-08-18,0.0 +2012-08-19,0.0 +2012-08-20,0.0 +2012-08-21,0.0 +2012-08-22,0.0 +2012-08-23,0.0 +2012-08-24,0.0 +2012-08-25,0.0 +2012-08-26,0.0 +2012-08-27,0.0 +2012-08-28,0.0 +2012-08-29,0.0 +2012-08-30,0.0 +2012-08-31,0.0 +2012-09-01,0.0 +2012-09-02,0.0 +2012-09-03,0.0 +2012-09-04,0.0 +2012-09-05,0.0 +2012-09-06,0.0 +2012-09-07,0.5 +2012-09-08,0.0 +2012-09-09,0.0 +2012-09-10,0.0 +2012-09-11,0.0 +2012-09-12,0.0 +2012-09-13,0.0 +2012-09-14,0.0 +2012-09-15,0.0 +2012-09-16,0.0 +2012-09-17,0.0 +2012-09-18,0.0 +2012-09-19,0.0 +2012-09-20,0.0 +2012-09-21,0.0 +2012-09-22,0.0 +2012-09-23,0.0 +2012-09-24,0.0 +2012-09-25,0.0 +2012-09-26,0.0 +2012-09-27,0.0 +2012-09-28,24.5 +2012-09-29,0.0 +2012-09-30,0.0 +2012-10-01,0.0 +2012-10-02,0.0 +2012-10-03,0.0 +2012-10-04,0.0 +2012-10-05,0.0 +2012-10-06,5.0 +2012-10-07,0.0 +2012-10-08,0.0 +2012-10-09,0.0 +2012-10-10,0.0 +2012-10-11,0.0 +2012-10-12,0.0 +2012-10-13,0.0 +2012-10-14,0.0 +2012-10-15,0.0 +2012-10-16,20.0 +2012-10-17,0.0 +2012-10-18,0.5 +2012-10-19,2.0 +2012-10-20,6.0 +2012-10-21,0.0 +2012-10-22,0.0 +2012-10-23,0.0 +2012-10-24,0.0 +2012-10-25,0.0 +2012-10-26,0.0 +2012-10-27,14.0 +2012-10-28,0.5 +2012-10-29,0.0 +2012-10-30,0.5 +2012-10-31,0.5 +2012-11-01,8.0 +2012-11-02,0.5 +2012-11-03,0.0 +2012-11-04,0.0 +2012-11-05,0.0 +2012-11-06,8.0 +2012-11-07,0.0 +2012-11-08,0.0 +2012-11-09,14.0 +2012-11-10,0.0 +2012-11-11,0.5 +2012-11-12,0.0 +2012-11-13,0.0 +2012-11-14,0.0 +2012-11-15,0.0 +2012-11-16,16.0 +2012-11-17,0.0 +2012-11-18,37.0 +2012-11-19,63.0 +2012-11-20,29.0 +2012-11-21,19.0 +2012-11-22,0.0 +2012-11-23,27.0 +2012-11-24,5.0 +2012-11-25,14.5 +2012-11-26,1.0 +2012-11-27,0.5 +2012-11-28,0.0 +2012-11-29,0.0 +2012-11-30,0.0 +2012-12-01,43.5 +2012-12-02,10.5 +2012-12-03,1.0 +2012-12-04,24.0 +2012-12-05,29.0 +2012-12-06,4.0 +2012-12-07,39.5 +2012-12-08,0.0 +2012-12-09,18.5 +2012-12-10,0.0 +2012-12-11,39.5 +2012-12-12,11.5 +2012-12-13,1.0 +2012-12-14,34.5 +2012-12-15,15.5 +2012-12-16,3.5 +2012-12-17,10.5 +2012-12-18,33.0 +2012-12-19,11.5 +2012-12-20,24.0 +2012-12-21,10.0 +2012-12-22,3.0 +2012-12-23,36.5 +2012-12-24,101.5 +2012-12-25,11.5 +2012-12-26,23.0 +2012-12-27,17.5 +2012-12-28,35.5 +2012-12-29,2.5 +2012-12-30,0.5 +2012-12-31,2.0 +2013-01-01,11.5 +2013-01-02,104.5 +2013-01-03,1.5 +2013-01-04,21.5 +2013-01-05,3.0 +2013-01-06,0.0 +2013-01-07,2.5 +2013-01-08,26.0 +2013-01-09,27.0 +2013-01-10,3.5 +2013-01-11,0.0 +2013-01-12,0.0 +2013-01-13,0.0 +2013-01-14,6.5 +2013-01-15,8.5 +2013-01-16,29.0 +2013-01-17,4.0 +2013-01-18,17.5 +2013-01-19,26.5 +2013-01-20,9.0 +2013-01-21,0.5 +2013-01-22,0.0 +2013-01-23,5.5 +2013-01-24,2.5 +2013-01-25,0.0 +2013-01-26,1.0 +2013-01-27,9.5 +2013-01-28,7.0 +2013-01-29,62.0 +2013-01-30,52.0 +2013-01-31,4.0 +2013-02-01,3.0 +2013-02-02,0.0 +2013-02-03,0.0 +2013-02-04,3.0 +2013-02-05,57.5 +2013-02-06,34.5 +2013-02-07,6.5 +2013-02-08,9.0 +2013-02-09,0.0 +2013-02-10,5.5 +2013-02-11,50.0 +2013-02-12,1.0 +2013-02-13,18.0 +2013-02-14,22.5 +2013-02-15,24.5 +2013-02-16,24.5 +2013-02-17,8.5 +2013-02-18,0.0 +2013-02-19,0.0 +2013-02-20,3.5 +2013-02-21,0.0 +2013-02-22,1.5 +2013-02-23,7.0 +2013-02-24,0.0 +2013-02-25,0.0 +2013-02-26,0.0 +2013-02-27,0.5 +2013-02-28,0.0 +2013-03-01,0.0 +2013-03-02,1.5 +2013-03-03,0.0 +2013-03-04,20.0 +2013-03-05,4.0 +2013-03-06,0.0 +2013-03-07,18.0 +2013-03-08,23.0 +2013-03-09,14.5 +2013-03-10,5.0 +2013-03-11,30.5 +2013-03-12,6.5 +2013-03-13,14.0 +2013-03-14,5.5 +2013-03-15,8.5 +2013-03-16,4.0 +2013-03-17,23.5 +2013-03-18,36.0 +2013-03-19,23.0 +2013-03-20,12.5 +2013-03-21,0.0 +2013-03-22,0.5 +2013-03-23,0.0 +2013-03-24,43.5 +2013-03-25,0.0 +2013-03-26,7.5 +2013-03-27,37.0 +2013-03-28,0.0 +2013-03-29,1.0 +2013-03-30,35.0 +2013-03-31,30.0 +2013-04-01,28.0 +2013-04-02,12.5 +2013-04-03,11.0 +2013-04-04,63.0 +2013-04-05,34.5 +2013-04-06,21.0 +2013-04-07,33.5 +2013-04-08,24.5 +2013-04-09,1.5 +2013-04-10,0.0 +2013-04-11,0.0 +2013-04-12,16.5 +2013-04-13,14.0 +2013-04-14,0.0 +2013-04-15,14.0 +2013-04-16,48.0 +2013-04-17,44.0 +2013-04-18,19.0 +2013-04-19,63.0 +2013-04-20,77.0 +2013-04-21,0.0 +2013-04-22,40.0 +2013-04-23,3.0 +2013-04-24,8.0 +2013-04-25,2.0 +2013-04-26,1.5 +2013-04-27,0.0 +2013-04-28,0.0 +2013-04-29,0.0 +2013-04-30,0.0 +2013-05-01,0.0 +2013-05-02,0.0 +2013-05-03,0.0 +2013-05-04,0.0 +2013-05-05,0.0 +2013-05-06,0.0 +2013-05-07,15.5 +2013-05-08,10.5 +2013-05-09,6.0 +2013-05-10,25.5 +2013-05-11,10.5 +2013-05-12,0.0 +2013-05-13,0.0 +2013-05-14,0.0 +2013-05-15,1.5 +2013-05-16,0.0 +2013-05-17,0.0 +2013-05-18,0.5 +2013-05-19,7.0 +2013-05-20,1.0 +2013-05-21,32.0 +2013-05-22,0.5 +2013-05-23,0.5 +2013-05-24,27.0 +2013-05-25,58.5 +2013-05-26,0.0 +2013-05-27,20.0 +2013-05-28,0.5 +2013-05-29,0.5 +2013-05-30,6.0 +2013-05-31,0.5 +2013-06-01,0.0 +2013-06-02,0.0 +2013-06-03,0.5 +2013-06-04,0.0 +2013-06-05,0.0 +2013-06-06,0.0 +2013-06-07,3.5 +2013-06-08,0.0 +2013-06-09,44.0 +2013-06-10,0.0 +2013-06-11,0.0 +2013-06-12,33.5 +2013-06-13,44.0 +2013-06-14,10.0 +2013-06-15,0.0 +2013-06-16,1.0 +2013-06-17,28.5 +2013-06-18,9.5 +2013-06-19,0.0 +2013-06-20,0.0 +2013-06-21,0.0 +2013-06-22,1.0 +2013-06-23,0.0 +2013-06-24,0.0 +2013-06-25,0.0 +2013-06-26,0.0 +2013-06-27,2.5 +2013-06-28,14.5 +2013-06-29,0.0 +2013-06-30,1.0 +2013-07-01,0.5 +2013-07-02,0.0 +2013-07-03,0.0 +2013-07-04,40.0 +2013-07-05,12.5 +2013-07-06,0.5 +2013-07-07,0.0 +2013-07-08,0.0 +2013-07-09,0.0 +2013-07-10,1.5 +2013-07-11,0.0 +2013-07-12,1.0 +2013-07-13,7.0 +2013-07-14,11.0 +2013-07-15,0.0 +2013-07-16,1.0 +2013-07-17,0.0 +2013-07-18,0.0 +2013-07-19,0.0 +2013-07-20,0.0 +2013-07-21,0.0 +2013-07-22,60.0 +2013-07-23,4.0 +2013-07-24,2.5 +2013-07-25,2.0 +2013-07-26,45.5 +2013-07-27,0.0 +2013-07-28,0.0 +2013-07-29,0.0 +2013-07-30,0.0 +2013-07-31,0.0 +2013-08-01,0.0 +2013-08-02,2.5 +2013-08-03,0.0 +2013-08-04,0.0 +2013-08-05,0.0 +2013-08-06,0.0 +2013-08-07,0.0 +2013-08-08,0.0 +2013-08-09,0.5 +2013-08-10,0.5 +2013-08-11,0.0 +2013-08-12,0.0 +2013-08-13,0.0 +2013-08-14,0.0 +2013-08-15,0.0 +2013-08-16,0.0 +2013-08-17,0.0 +2013-08-18,0.0 +2013-08-19,0.0 +2013-08-20,0.0 +2013-08-21,0.0 +2013-08-22,0.0 +2013-08-23,0.0 +2013-08-24,0.0 +2013-08-25,0.0 +2013-08-26,0.0 +2013-08-27,0.0 +2013-08-28,0.0 +2013-08-29,0.0 +2013-08-30,0.0 +2013-08-31,0.0 +2013-09-01,0.0 +2013-09-02,0.0 +2013-09-03,0.0 +2013-09-04,0.0 +2013-09-05,0.0 +2013-09-06,0.0 +2013-09-07,0.0 +2013-09-08,0.0 +2013-09-09,0.0 +2013-09-10,0.0 +2013-09-11,0.0 +2013-09-12,0.0 +2013-09-13,0.0 +2013-09-14,0.0 +2013-09-15,0.0 +2013-09-16,0.0 +2013-09-17,0.0 +2013-09-18,0.0 +2013-09-19,0.5 +2013-09-20,0.0 +2013-09-21,0.0 +2013-09-22,0.0 +2013-09-23,0.0 +2013-09-24,0.0 +2013-09-25,0.0 +2013-09-26,0.0 +2013-09-27,0.0 +2013-09-28,0.0 +2013-09-29,0.0 +2013-09-30,6.5 +2013-10-01,0.5 +2013-10-02,0.0 +2013-10-03,0.0 +2013-10-04,0.0 +2013-10-05,0.0 +2013-10-06,0.0 +2013-10-07,0.0 +2013-10-08,0.0 +2013-10-09,0.0 +2013-10-10,0.0 +2013-10-11,0.0 +2013-10-12,0.0 +2013-10-13,0.0 +2013-10-14,3.5 +2013-10-15,0.0 +2013-10-16,0.0 +2013-10-17,0.0 +2013-10-18,0.0 +2013-10-19,0.0 +2013-10-20,0.0 +2013-10-21,0.0 +2013-10-22,0.0 +2013-10-23,0.0 +2013-10-24,0.0 +2013-10-25,0.0 +2013-10-26,0.0 +2013-10-27,2.0 +2013-10-28,0.0 +2013-10-29,0.0 +2013-10-30,5.5 +2013-10-31,4.5 +2013-11-01,0.0 +2013-11-02,0.0 +2013-11-03,1.0 +2013-11-04,0.0 +2013-11-05,0.0 +2013-11-06,0.0 +2013-11-07,0.0 +2013-11-08,0.0 +2013-11-09,14.5 +2013-11-10,0.0 +2013-11-11,0.0 +2013-11-12,10.5 +2013-11-13,4.0 +2013-11-14,55.5 +2013-11-15,30.5 +2013-11-16,23.5 +2013-11-17,11.0 +2013-11-18,5.5 +2013-11-19,0.0 +2013-11-20,0.0 +2013-11-21,0.0 +2013-11-22,0.0 +2013-11-23,0.0 +2013-11-24,0.0 +2013-11-25,0.5 +2013-11-26,3.5 +2013-11-27,10.0 +2013-11-28,3.5 +2013-11-29,2.0 +2013-11-30,18.5 +2013-12-01,0.0 +2013-12-02,26.0 +2013-12-03,5.5 +2013-12-04,2.5 +2013-12-05,5.5 +2013-12-06,1.0 +2013-12-07,12.5 +2013-12-08,37.5 +2013-12-09,2.5 +2013-12-10,35.5 +2013-12-11,29.0 +2013-12-12,11.0 +2013-12-13,0.0 +2013-12-14,0.0 +2013-12-15,12.0 +2013-12-16,22.0 +2013-12-17,0.0 +2013-12-18,0.0 +2013-12-19,0.0 +2013-12-20,4.0 +2013-12-21,33.0 +2013-12-22,26.0 +2013-12-23,0.0 +2013-12-24,0.0 +2013-12-25,42.0 +2013-12-26,11.0 +2013-12-27,0.0 +2013-12-28,0.0 +2013-12-29,0.0 +2013-12-30,15.0 +2013-12-31,20.0 +2014-01-01,0.0 +2014-01-02,0.0 +2014-01-03,0.0 +2014-01-04,3.5 +2014-01-05,10.5 +2014-01-06,9.0 +2014-01-07,11.0 +2014-01-08,6.5 +2014-01-09,10.0 +2014-01-10,11.0 +2014-01-11,10.5 +2014-01-12,17.0 +2014-01-13,16.0 +2014-01-14,2.5 +2014-01-15,7.0 +2014-01-16,4.0 +2014-01-17,5.0 +2014-01-18,22.0 +2014-01-19,11.5 +2014-01-20,10.0 +2014-01-21,5.0 +2014-01-22,0.0 +2014-01-23,3.0 +2014-01-24,2.0 +2014-01-25,2.5 +2014-01-26,5.0 +2014-01-27,4.0 +2014-01-28,2.5 +2014-01-29,2.0 +2014-01-30,0.0 +2014-01-31,0.0 +2014-02-01,0.0 +2014-02-02,7.5 +2014-02-03,10.0 +2014-02-04,0.0 +2014-02-05,0.0 +2014-02-06,23.5 +2014-02-07,0.0 +2014-02-08,0.0 +2014-02-09,0.0 +2014-02-10,0.0 +2014-02-11,0.0 +2014-02-12,0.0 +2014-02-13,0.0 +2014-02-14,0.0 +2014-02-15,7.0 +2014-02-16,25.5 +2014-02-17,14.0 +2014-02-18,8.0 +2014-02-19,7.5 +2014-02-20,16.0 +2014-02-21,8.5 +2014-02-22,11.0 +2014-02-23,14.5 +2014-02-24,6.0 +2014-02-25,7.0 +2014-02-26,13.0 +2014-02-27,11.0 +2014-02-28,6.5 +2014-03-01,7.0 +2014-03-02,9.5 +2014-03-03,10.0 +2014-03-04,6.0 +2014-03-05,14.0 +2014-03-06,15.5 +2014-03-07,7.0 +2014-03-08,13.0 +2014-03-09,15.0 +2014-03-10,14.0 +2014-03-11,7.0 +2014-03-12,10.5 +2014-03-13,19.0 +2014-03-14,0.0 +2014-03-15,12.0 +2014-03-16,6.0 +2014-03-17,40.0 +2014-03-18,21.0 +2014-03-19,8.0 +2014-03-20,0.0 +2014-03-21,0.0 +2014-03-22,0.0 +2014-03-23,18.0 +2014-03-24,17.0 +2014-03-25,5.5 +2014-03-26,8.0 +2014-03-27,6.5 +2014-03-28,11.0 +2014-03-29,14.0 +2014-03-30,4.5 +2014-03-31,0.0 +2014-04-01,0.0 +2014-04-02,0.0 +2014-04-03,0.0 +2014-04-04,0.0 +2014-04-05,4.5 +2014-04-06,17.5 +2014-04-07,43.5 +2014-04-08,0.0 +2014-04-09,5.5 +2014-04-10,7.5 +2014-04-11,3.5 +2014-04-12,69.5 +2014-04-13,0.0 +2014-04-14,17.5 +2014-04-15,13.0 +2014-04-16,1.0 +2014-04-17,78.5 +2014-04-18,0.0 +2014-04-19,7.0 +2014-04-20,24.5 +2014-04-21,3.5 +2014-04-22,5.5 +2014-04-23,6.5 +2014-04-24,2.0 +2014-04-25,3.5 +2014-04-26,39.5 +2014-04-27,0.0 +2014-04-28,12.0 +2014-04-29,0.0 +2014-04-30,0.0 +2014-05-01,0.0 +2014-05-02,0.0 +2014-05-03,0.0 +2014-05-04,0.0 +2014-05-05,0.0 +2014-05-06,0.0 +2014-05-07,1.0 +2014-05-08,2.5 +2014-05-09,0.0 +2014-05-10,0.0 +2014-05-11,0.0 +2014-05-12,0.0 +2014-05-13,4.5 +2014-05-14,0.0 +2014-05-15,0.0 +2014-05-16,0.0 +2014-05-17,0.0 +2014-05-18,8.5 +2014-05-19,0.0 +2014-05-20,0.0 +2014-05-21,7.5 +2014-05-22,0.0 +2014-05-23,0.0 +2014-05-24,0.0 +2014-05-25,0.0 +2014-05-26,6.5 +2014-05-27,0.0 +2014-05-28,0.0 +2014-05-29,0.0 +2014-05-30,0.0 +2014-05-31,14.5 +2014-06-01,0.0 +2014-06-02,0.0 +2014-06-03,0.0 +2014-06-04,0.0 +2014-06-05,0.0 +2014-06-06,0.0 +2014-06-07,0.0 +2014-06-08,0.0 +2014-06-09,0.0 +2014-06-10,0.0 +2014-06-11,15.5 +2014-06-12,13.5 +2014-06-13,0.0 +2014-06-14,17.5 +2014-06-15,0.0 +2014-06-16,0.0 +2014-06-17,14.5 +2014-06-18,6.5 +2014-06-19,125.5 +2014-06-20,3.5 +2014-06-21,0.0 +2014-06-22,0.0 +2014-06-23,16.5 +2014-06-24,1.5 +2014-06-25,0.0 +2014-06-26,0.0 +2014-06-27,13.0 +2014-06-28,0.0 +2014-06-29,0.0 +2014-06-30,0.0 +2014-07-01,0.0 +2014-07-02,0.0 +2014-07-03,0.0 +2014-07-04,0.0 +2014-07-05,0.0 +2014-07-06,0.0 +2014-07-07,0.0 +2014-07-08,0.0 +2014-07-09,0.0 +2014-07-10,0.0 +2014-07-11,0.0 +2014-07-12,0.0 +2014-07-13,0.0 +2014-07-14,0.0 +2014-07-15,0.0 +2014-07-16,0.0 +2014-07-17,0.0 +2014-07-18,0.0 +2014-07-19,0.0 +2014-07-20,0.0 +2014-07-21,0.0 +2014-07-22,0.0 +2014-07-23,0.0 +2014-07-24,0.0 +2014-07-25,0.0 +2014-07-26,0.0 +2014-07-27,0.0 +2014-07-28,0.0 +2014-07-29,0.0 +2014-07-30,0.0 +2014-07-31,0.0 +2014-08-01,0.0 +2014-08-02,0.0 +2014-08-03,0.0 +2014-08-04,0.0 +2014-08-05,0.0 +2014-08-06,0.0 +2014-08-07,0.0 +2014-08-08,0.0 +2014-08-09,0.0 +2014-08-10,0.0 +2014-08-11,0.0 +2014-08-12,0.0 +2014-08-13,0.0 +2014-08-14,0.0 +2014-08-15,0.0 +2014-08-16,0.0 +2014-08-17,0.0 +2014-08-18,0.0 +2014-08-19,0.0 +2014-08-20,0.0 +2014-08-21,0.0 +2014-08-22,0.0 +2014-08-23,0.0 +2014-08-24,0.0 +2014-08-25,0.0 +2014-08-26,0.0 +2014-08-27,0.0 +2014-08-28,0.0 +2014-08-29,0.0 +2014-08-30,0.0 +2014-08-31,0.0 +2014-09-01,0.0 +2014-09-02,0.0 +2014-09-03,0.0 +2014-09-04,0.0 +2014-09-05,0.0 +2014-09-06,0.0 +2014-09-07,0.0 +2014-09-08,0.0 +2014-09-09,0.0 +2014-09-10,0.0 +2014-09-11,0.0 +2014-09-12,0.0 +2014-09-13,0.0 +2014-09-14,0.0 +2014-09-15,0.0 +2014-09-16,0.0 +2014-09-17,0.0 +2014-09-18,0.0 +2014-09-19,0.0 +2014-09-20,0.0 +2014-09-21,0.0 +2014-09-22,0.0 +2014-09-23,0.0 +2014-09-24,0.0 +2014-09-25,0.0 +2014-09-26,0.0 +2014-09-27,0.0 +2014-09-28,0.0 +2014-09-29,0.0 +2014-09-30,0.0 +2014-10-01,0.0 +2014-10-02,0.0 +2014-10-03,0.0 +2014-10-04,0.0 +2014-10-05,0.0 +2014-10-06,0.0 +2014-10-07,0.0 +2014-10-08,0.0 +2014-10-09,0.0 +2014-10-10,0.0 +2014-10-11,0.0 +2014-10-12,0.0 +2014-10-13,1.0 +2014-10-14,15.0 +2014-10-15,0.0 +2014-10-16,0.0 +2014-10-17,0.0 +2014-10-18,0.0 +2014-10-19,0.0 +2014-10-20,0.0 +2014-10-21,0.0 +2014-10-22,0.0 +2014-10-23,0.0 +2014-10-24,0.0 +2014-10-25,0.0 +2014-10-26,0.0 +2014-10-27,0.0 +2014-10-28,0.0 +2014-10-29,42.5 +2014-10-30,0.0 +2014-10-31,0.0 +2014-11-01,0.0 +2014-11-02,0.0 +2014-11-03,0.0 +2014-11-04,0.0 +2014-11-05,0.0 +2014-11-06,0.0 +2014-11-07,0.0 +2014-11-08,25.5 +2014-11-09,8.0 +2014-11-10,0.0 +2014-11-11,0.0 +2014-11-12,79.0 +2014-11-13,21.5 +2014-11-14,10.5 +2014-11-15,16.0 +2014-11-16,0.0 +2014-11-17,0.0 +2014-11-18,1.0 +2014-11-19,15.0 +2014-11-20,5.0 +2014-11-21,0.0 +2014-11-22,18.5 +2014-11-23,1.5 +2014-11-24,0.0 +2014-11-25,0.0 +2014-11-26,3.5 +2014-11-27,0.0 +2014-11-28,0.0 +2014-11-29,15.5 +2014-11-30,6.5 +2014-12-01,0.0 +2014-12-02,0.0 +2014-12-03,0.0 +2014-12-04,117.0 +2014-12-05,62.5 +2014-12-06,19.5 +2014-12-07,5.0 +2014-12-08,0.0 +2014-12-09,4.5 +2014-12-10,18.5 +2014-12-11,16.5 +2014-12-12,5.5 +2014-12-13,62.0 +2014-12-14,0.0 +2014-12-15,0.0 +2014-12-16,8.5 +2014-12-17,13.5 +2014-12-18,17.5 +2014-12-19,126.0 +2014-12-20,86.0 +2014-12-21,18.5 +2014-12-22,63.5 +2014-12-23,17.5 +2014-12-24,10.5 +2014-12-25,30.0 +2014-12-26,5.0 +2014-12-27,19.0 +2014-12-28,99.0 +2014-12-29,15.5 +2014-12-30,0.0 +2014-12-31,0.0 +2015-01-01,26.5 +2015-01-02,7.5 +2015-01-03,1.5 +2015-01-04,12.5 +2015-01-05,5.0 +2015-01-06,0.0 +2015-01-07,0.0 +2015-01-08,0.0 +2015-01-09,0.0 +2015-01-10,0.0 +2015-01-11,0.0 +2015-01-12,0.0 +2015-01-13,2.5 +2015-01-14,24.0 +2015-01-15,2.0 +2015-01-16,0.0 +2015-01-17,0.0 +2015-01-18,0.0 +2015-01-19,0.0 +2015-01-20,4.0 +2015-01-21,80.0 +2015-01-22,1.5 +2015-01-23,8.0 +2015-01-24,23.0 +2015-01-25,49.5 +2015-01-26,9.0 +2015-01-27,0.0 +2015-01-28,10.5 +2015-01-29,78.0 +2015-01-30,2.0 +2015-01-31,0.0 +2015-02-01,109.5 +2015-02-02,15.5 +2015-02-03,0.0 +2015-02-04,61.0 +2015-02-05,122.0 +2015-02-06,20.0 +2015-02-07,10.5 +2015-02-08,14.5 +2015-02-09,1.5 +2015-02-10,22.5 +2015-02-11,5.5 +2015-02-12,17.5 +2015-02-13,30.0 +2015-02-14,0.0 +2015-02-15,0.0 +2015-02-16,3.0 +2015-02-17,14.5 +2015-02-18,43.5 +2015-02-19,78.0 +2015-02-20,4.0 +2015-02-21,0.0 +2015-02-22,0.0 +2015-02-23,0.0 +2015-02-24,1.5 +2015-02-25,10.5 +2015-02-26,0.0 +2015-02-27,18.0 +2015-02-28,0.0 +2015-03-01,10.0 +2015-03-02,32.5 +2015-03-03,29.5 +2015-03-04,0.0 +2015-03-05,1.0 +2015-03-06,0.0 +2015-03-07,0.0 +2015-03-08,0.0 +2015-03-09,0.0 +2015-03-10,0.0 +2015-03-11,0.0 +2015-03-12,9.0 +2015-03-13,6.0 +2015-03-14,1.0 +2015-03-15,96.0 +2015-03-16,45.0 +2015-03-17,48.0 +2015-03-18,1.5 +2015-03-19,14.0 +2015-03-20,16.5 +2015-03-21,9.5 +2015-03-22,1.0 +2015-03-23,16.0 +2015-03-24,21.0 +2015-03-25,0.0 +2015-03-26,25.0 +2015-03-27,1.0 +2015-03-28,8.5 +2015-03-29,0.0 +2015-03-30,0.0 +2015-03-31,1.0 +2015-04-01,5.0 +2015-04-02,34.5 +2015-04-03,1.0 +2015-04-04,0.0 +2015-04-05,94.0 +2015-04-06,0.0 +2015-04-07,6.5 +2015-04-08,0.0 +2015-04-09,3.0 +2015-04-10,0.0 +2015-04-11,0.0 +2015-04-12,0.0 +2015-04-13,33.0 +2015-04-14,0.0 +2015-04-15,67.5 +2015-04-16,3.0 +2015-04-17,7.0 +2015-04-18,1.0 +2015-04-19,4.0 +2015-04-20,27.5 +2015-04-21,0.0 +2015-04-22,0.0 +2015-04-23,1.5 +2015-04-24,0.0 +2015-04-25,0.0 +2015-04-26,0.0 +2015-04-27,2.0 +2015-04-28,7.5 +2015-04-29,0.0 +2015-04-30,63.0 +2015-05-01,0.0 +2015-05-02,19.0 +2015-05-03,5.0 +2015-05-04,38.0 +2015-05-05,5.0 +2015-05-06,6.5 +2015-05-07,0.0 +2015-05-08,19.5 +2015-05-09,0.0 +2015-05-10,0.0 +2015-05-11,0.0 +2015-05-12,0.0 +2015-05-13,0.0 +2015-05-14,0.0 +2015-05-15,0.0 +2015-05-16,0.0 +2015-05-17,0.0 +2015-05-18,0.0 +2015-05-19,0.0 +2015-05-20,0.0 +2015-05-21,0.0 +2015-05-22,0.0 +2015-05-23,0.0 +2015-05-24,0.0 +2015-05-25,0.0 +2015-05-26,0.0 +2015-05-27,0.0 +2015-05-28,0.0 +2015-05-29,0.0 +2015-05-30,0.0 +2015-05-31,0.0 +2015-06-01,0.0 +2015-06-02,0.0 +2015-06-03,0.0 +2015-06-04,0.0 +2015-06-05,0.0 +2015-06-06,0.0 +2015-06-07,0.0 +2015-06-08,0.0 +2015-06-09,10.0 +2015-06-10,75.0 +2015-06-11,0.0 +2015-06-12,0.0 +2015-06-13,0.0 +2015-06-14,0.0 +2015-06-15,0.0 +2015-06-16,0.0 +2015-06-17,0.0 +2015-06-18,0.0 +2015-06-19,0.0 +2015-06-20,0.0 +2015-06-21,0.0 +2015-06-22,0.0 +2015-06-23,0.0 +2015-06-24,0.0 +2015-06-25,0.0 +2015-06-26,0.0 +2015-06-27,0.0 +2015-06-28,0.0 +2015-06-29,0.0 +2015-06-30,0.0 +2015-07-01,0.0 +2015-07-02,0.0 +2015-07-03,0.0 +2015-07-04,0.0 +2015-07-05,0.0 +2015-07-06,0.0 +2015-07-07,0.0 +2015-07-08,0.0 +2015-07-09,0.0 +2015-07-10,0.0 +2015-07-11,0.0 +2015-07-12,0.0 +2015-07-13,0.0 +2015-07-14,0.0 +2015-07-15,0.0 +2015-07-16,0.0 +2015-07-17,0.0 +2015-07-18,0.0 +2015-07-19,0.0 +2015-07-20,0.0 +2015-07-21,0.0 +2015-07-22,0.0 +2015-07-23,0.0 +2015-07-24,0.0 +2015-07-25,0.0 +2015-07-26,0.0 +2015-07-27,0.0 +2015-07-28,0.0 +2015-07-29,0.0 +2015-07-30,0.0 +2015-07-31,0.0 +2015-08-01,0.0 +2015-08-02,0.0 +2015-08-03,0.0 +2015-08-04,0.0 +2015-08-05,0.0 +2015-08-06,0.0 +2015-08-07,0.0 +2015-08-08,0.0 +2015-08-09,0.0 +2015-08-10,0.0 +2015-08-11,0.0 +2015-08-12,0.0 +2015-08-13,0.0 +2015-08-14,0.0 +2015-08-15,0.0 +2015-08-16,0.0 +2015-08-17,0.0 +2015-08-18,0.0 +2015-08-19,0.0 +2015-08-20,0.0 +2015-08-21,0.0 +2015-08-22,0.0 +2015-08-23,0.0 +2015-08-24,0.0 +2015-08-25,0.0 +2015-08-26,0.0 +2015-08-27,0.0 +2015-08-28,0.0 +2015-08-29,0.0 +2015-08-30,0.0 +2015-08-31,0.0 +2015-09-01,0.0 +2015-09-02,0.0 +2015-09-03,0.0 +2015-09-04,0.0 +2015-09-05,0.0 +2015-09-06,0.0 +2015-09-07,0.0 +2015-09-08,0.0 +2015-09-09,0.0 +2015-09-10,0.0 +2015-09-11,0.0 +2015-09-12,0.0 +2015-09-13,0.0 +2015-09-14,0.0 +2015-09-15,0.0 +2015-09-16,0.0 +2015-09-17,0.0 +2015-09-18,0.0 +2015-09-19,0.0 +2015-09-20,0.0 +2015-09-21,0.0 +2015-09-22,0.0 +2015-09-23,0.0 +2015-09-24,0.0 +2015-09-25,0.0 +2015-09-26,0.0 +2015-09-27,0.0 +2015-09-28,0.0 +2015-09-29,0.0 +2015-09-30,0.0 +2015-10-01,0.0 +2015-10-02,0.0 +2015-10-03,0.0 +2015-10-04,0.0 +2015-10-05,0.0 +2015-10-06,0.0 +2015-10-07,0.0 +2015-10-08,3.0 +2015-10-09,0.0 +2015-10-10,0.0 +2015-10-11,0.0 +2015-10-12,0.0 +2015-10-13,0.0 +2015-10-14,0.0 +2015-10-15,0.0 +2015-10-16,0.0 +2015-10-17,0.0 +2015-10-18,0.0 +2015-10-19,0.0 +2015-10-20,0.0 +2015-10-21,0.0 +2015-10-22,0.0 +2015-10-23,0.0 +2015-10-24,0.0 +2015-10-25,0.0 +2015-10-26,0.0 +2015-10-27,0.0 +2015-10-28,0.0 +2015-10-29,0.0 +2015-10-30,0.0 +2015-10-31,0.0 +2015-11-01,0.0 +2015-11-02,0.0 +2015-11-03,0.0 +2015-11-04,0.0 +2015-11-05,4.0 +2015-11-06,28.5 +2015-11-07,0.0 +2015-11-08,0.0 +2015-11-09,3.0 +2015-11-10,72.0 +2015-11-11,55.0 +2015-11-12,25.5 +2015-11-13,9.0 +2015-11-14,2.0 +2015-11-15,0.0 +2015-11-16,0.0 +2015-11-17,0.0 +2015-11-18,39.0 +2015-11-19,0.0 +2015-11-20,9.5 +2015-11-21,0.0 +2015-11-22,1.0 +2015-11-23,6.0 +2015-11-24,0.0 +2015-11-25,0.0 +2015-11-26,67.0 +2015-11-27,27.0 +2015-11-28,0.0 +2015-11-29,7.5 +2015-11-30,0.0 +2015-12-01,0.0 +2015-12-02,25.5 +2015-12-03,7.5 +2015-12-04,34.5 +2015-12-05,9.5 +2015-12-06,19.0 +2015-12-07,1.0 +2015-12-08,28.0 +2015-12-09,56.5 +2015-12-10,63.0 +2015-12-11,45.5 +2015-12-12,1.5 +2015-12-13,10.0 +2015-12-14,85.0 +2015-12-15,19.5 +2015-12-16,8.0 +2015-12-17,76.5 +2015-12-18,0.0 +2015-12-19,0.0 +2015-12-20,0.0 +2015-12-21,0.0 +2015-12-22,0.0 +2015-12-23,0.0 +2015-12-24,0.0 +2015-12-25,0.0 +2015-12-26,0.0 +2015-12-27,24.5 +2015-12-28,8.0 +2015-12-29,5.0 +2015-12-30,28.5 +2015-12-31,1.5 +2016-01-01,4.5 +2016-01-02,34.5 +2016-01-03,1.0 +2016-01-04,15.0 +2016-01-05,1.5 +2016-01-06,19.5 +2016-01-07,17.0 +2016-01-08,0.0 +2016-01-09,0.0 +2016-01-10,4.5 +2016-01-11,3.5 +2016-01-12,0.0 +2016-01-13,0.0 +2016-01-14,36.0 +2016-01-15,0.0 +2016-01-16,0.0 +2016-01-17,6.5 +2016-01-18,8.0 +2016-01-19,13.5 +2016-01-20,18.5 +2016-01-21,33.0 +2016-01-22,31.5 +2016-01-23,4.5 +2016-01-24,0.0 +2016-01-25,12.0 +2016-01-26,0.0 +2016-01-27,0.0 +2016-01-28,0.0 +2016-01-29,0.0 +2016-01-30,0.0 +2016-01-31,2.0 +2016-02-01,0.0 +2016-02-02,0.0 +2016-02-03,24.5 +2016-02-04,4.5 +2016-02-05,0.0 +2016-02-06,0.0 +2016-02-07,50.0 +2016-02-08,27.0 +2016-02-09,87.0 +2016-02-10,36.0 +2016-02-11,22.5 +2016-02-12,6.0 +2016-02-13,11.0 +2016-02-14,24.0 +2016-02-15,15.0 +2016-02-16,0.0 +2016-02-17,5.0 +2016-02-18,1.5 +2016-02-19,0.0 +2016-02-20,2.5 +2016-02-21,6.5 +2016-02-22,24.5 +2016-02-23,27.5 +2016-02-24,21.0 +2016-02-25,0.0 +2016-02-26,47.5 +2016-02-27,108.0 +2016-02-28,0.0 +2016-02-29,0.0 +2016-03-01,1.5 +2016-03-02,1.0 +2016-03-03,1.0 +2016-03-04,0.0 +2016-03-05,42.0 +2016-03-06,64.5 +2016-03-07,32.0 +2016-03-08,64.0 +2016-03-09,56.0 +2016-03-10,42.0 +2016-03-11,4.5 +2016-03-12,3.0 +2016-03-13,27.0 +2016-03-14,30.0 +2016-03-15,45.0 +2016-03-16,12.0 +2016-03-17,1.5 +2016-03-18,36.0 +2016-03-19,0.0 +2016-03-20,6.5 +2016-03-21,13.5 +2016-03-22,0.0 +2016-03-23,19.5 +2016-03-24,24.0 +2016-03-25,2.0 +2016-03-26,27.0 +2016-03-27,6.0 +2016-03-28,1.0 +2016-03-29,30.0 +2016-03-30,13.0 +2016-03-31,0.0 +2016-04-01,1.0 +2016-04-02,12.5 +2016-04-03,4.5 +2016-04-04,0.0 +2016-04-05,0.0 +2016-04-06,0.0 +2016-04-07,0.0 +2016-04-08,0.0 +2016-04-09,1.5 +2016-04-10,47.0 +2016-04-11,0.0 +2016-04-12,7.5 +2016-04-13,58.5 +2016-04-14,7.0 +2016-04-15,2.5 +2016-04-16,0.0 +2016-04-17,1.5 +2016-04-18,0.0 +2016-04-19,37.0 +2016-04-20,1.0 +2016-04-21,0.0 +2016-04-22,0.0 +2016-04-23,0.0 +2016-04-24,0.0 +2016-04-25,0.0 +2016-04-26,1.0 +2016-04-27,0.0 +2016-04-28,26.5 +2016-04-29,1.0 +2016-04-30,0.0 +2016-05-01,0.0 +2016-05-02,0.0 +2016-05-03,2.0 +2016-05-04,5.5 +2016-05-05,0.0 +2016-05-06,0.0 +2016-05-07,1.5 +2016-05-08,0.0 +2016-05-09,1.0 +2016-05-10,7.5 +2016-05-11,0.0 +2016-05-12,1.0 +2016-05-13,2.5 +2016-05-14,0.0 +2016-05-15,0.0 +2016-05-16,1.0 +2016-05-17,0.0 +2016-05-18,2.0 +2016-05-19,0.0 +2016-05-20,0.0 +2016-05-21,0.0 +2016-05-22,13.5 +2016-05-23,2.5 +2016-05-24,4.0 +2016-05-25,0.0 +2016-05-26,0.0 +2016-05-27,0.0 +2016-05-28,1.0 +2016-05-29,0.0 +2016-05-30,4.0 +2016-05-31,1.5 +2016-06-01,0.0 +2016-06-02,2.0 +2016-06-03,23.0 +2016-06-04,0.0 +2016-06-05,0.0 +2016-06-06,17.0 +2016-06-07,0.0 +2016-06-08,29.0 +2016-06-09,0.0 +2016-06-10,0.0 +2016-06-11,0.0 +2016-06-12,0.0 +2016-06-13,0.0 +2016-06-14,0.0 +2016-06-15,1.0 +2016-06-16,0.0 +2016-06-17,0.0 +2016-06-18,20.0 +2016-06-19,11.0 +2016-06-20,0.0 +2016-06-21,0.0 +2016-06-22,0.0 +2016-06-23,0.0 +2016-06-24,0.0 +2016-06-25,0.0 +2016-06-26,0.0 +2016-06-27,0.0 +2016-06-28,2.0 +2016-06-29,0.0 +2016-06-30,4.0 +2016-07-01,2.0 +2016-07-02,27.0 +2016-07-03,0.0 +2016-07-04,0.0 +2016-07-05,0.0 +2016-07-06,0.0 +2016-07-07,0.0 +2016-07-08,0.0 +2016-07-09,0.0 +2016-07-10,0.0 +2016-07-11,0.0 +2016-07-12,47.0 +2016-07-13,50.0 +2016-07-14,0.0 +2016-07-15,0.0 +2016-07-16,0.0 +2016-07-17,19.0 +2016-07-18,0.0 +2016-07-19,0.0 +2016-07-20,8.0 +2016-07-21,0.0 +2016-07-22,4.5 +2016-07-23,14.5 +2016-07-24,21.0 +2016-07-25,0.0 +2016-07-26,0.0 +2016-07-27,0.0 +2016-07-28,0.0 +2016-07-29,1.0 +2016-07-30,0.0 +2016-07-31,0.0 +2016-08-01,0.0 +2016-08-02,0.0 +2016-08-03,0.0 +2016-08-04,0.0 +2016-08-05,0.0 +2016-08-06,0.0 +2016-08-07,0.0 +2016-08-08,0.0 +2016-08-09,2.0 +2016-08-10,0.0 +2016-08-11,0.0 +2016-08-12,0.0 +2016-08-13,5.0 +2016-08-14,2.0 +2016-08-15,0.0 +2016-08-16,0.0 +2016-08-17,0.0 +2016-08-18,2.0 +2016-08-19,0.0 +2016-08-20,0.0 +2016-08-21,0.0 +2016-08-22,0.0 +2016-08-23,0.0 +2016-08-24,0.0 +2016-08-25,3.0 +2016-08-26,0.0 +2016-08-27,0.0 +2016-08-28,2.5 +2016-08-29,3.0 +2016-08-30,15.0 +2016-08-31,1.0 +2016-09-01,2.0 +2016-09-02,0.0 +2016-09-03,0.0 +2016-09-04,0.0 +2016-09-05,1.5 +2016-09-06,0.0 +2016-09-07,0.0 +2016-09-08,1.0 +2016-09-09,0.0 +2016-09-10,3.5 +2016-09-11,0.0 +2016-09-12,0.0 +2016-09-13,0.0 +2016-09-14,0.0 +2016-09-15,26.0 +2016-09-16,1.0 +2016-09-17,10.5 +2016-09-18,3.0 +2016-09-19,7.5 +2016-09-20,9.5 +2016-09-21,15.0 +2016-09-22,8.5 +2016-09-23,4.0 +2016-09-24,47.0 +2016-09-25,2.0 +2016-09-26,23.0 +2016-09-27,0.0 +2016-09-28,3.4 +2016-09-29,0.0 +2016-09-30,0.0 +2016-10-01,10.5 +2016-10-02,9.5 +2016-10-03,20.5 +2016-10-04,0.0 +2016-10-05,28.0 +2016-10-06,57.0 +2016-10-07,19.5 +2016-10-08,0.0 +2016-10-09,6.5 +2016-10-10,26.5 +2016-10-11,1.0 +2016-10-12,3.0 +2016-10-13,4.5 +2016-10-14,0.0 +2016-10-15,13.0 +2016-10-16,0.0 +2016-10-17,0.0 +2016-10-18,0.0 +2016-10-19,0.0 +2016-10-20,0.0 +2016-10-21,36.5 +2016-10-22,0.0 +2016-10-23,10.0 +2016-10-24,12.5 +2016-10-25,9.5 +2016-10-26,30.5 +2016-10-27,11.0 +2016-10-28,22.0 +2016-10-29,11.0 +2016-10-30,4.0 +2016-10-31,13.0 +2016-11-01,35.5 +2016-11-02,13.0 +2016-11-03,14.5 +2016-11-04,6.5 +2016-11-05,0.0 +2016-11-06,15.0 +2016-11-07,0.0 +2016-11-08,4.0 +2016-11-09,10.5 +2016-11-10,28.5 +2016-11-11,10.0 +2016-11-12,16.0 +2016-11-13,0.0 +2016-11-14,34.0 +2016-11-15,4.0 +2016-11-16,1.5 +2016-11-17,1.0 +2016-11-18,0.0 +2016-11-19,2.0 +2016-11-20,1.5 +2016-11-21,0.0 +2016-11-22,7.5 +2016-11-23,1.0 +2016-11-24,10.5 +2016-11-25,6.0 +2016-11-26,4.0 +2016-11-27,17.5 +2016-11-28,6.5 +2016-11-29,4.5 +2016-11-30,2.5 +2016-12-01,4.5 +2016-12-02,0.0 +2016-12-03,3.5 +2016-12-04,0.0 +2016-12-05,29.0 +2016-12-06,22.5 +2016-12-07,1.0 +2016-12-08,0.0 +2016-12-09,11.0 +2016-12-10,43.5 +2016-12-11,0.0 +2016-12-12,20.0 +2016-12-13,51.0 +2016-12-14,0.0 +2016-12-15,13.5 +2016-12-16,1.0 +2016-12-17,0.0 +2016-12-18,0.0 +2016-12-19,0.0 +2016-12-20,0.0 +2016-12-21,0.0 +2016-12-22,0.0 +2016-12-23,0.0 +2016-12-24,0.0 +2016-12-25,0.0 +2016-12-26,1.0 +2016-12-27,2.0 +2016-12-28,0.0 +2016-12-29,0.0 +2016-12-30,0.0 +2016-12-31,0.0 +2017-01-01,0.0 +2017-01-02,2.0 +2017-01-03,5.0 +2017-01-04,0.0 +2017-01-05,22.5 +2017-01-06,0.0 +2017-01-07,0.0 +2017-01-08,0.0 +2017-01-09,0.0 +2017-01-10,0.0 +2017-01-11,0.0 +2017-01-12,0.0 +2017-01-13,7.0 +2017-01-14,0.0 +2017-01-15,19.0 +2017-01-16,0.0 +2017-01-17,12.0 +2017-01-18,0.0 +2017-01-19,0.0 +2017-01-20,3.0 +2017-01-21,13.0 +2017-01-22,34.0 +2017-01-23,4.5 +2017-01-24,3.5 +2017-01-25,0.0 +2017-01-26,0.0 +2017-01-27,0.0 +2017-01-28,0.0 +2017-01-29,2.5 +2017-01-30,0.0 +2017-01-31,2.5 +2017-02-01,2.5 +2017-02-02,0.0 +2017-02-03,0.0 +2017-02-04,3.0 +2017-02-05,0.0 +2017-02-06,0.0 +2017-02-07,2.0 +2017-02-08,0.0 +2017-02-09,24.0 +2017-02-10,3.0 +2017-02-11,2.0 +2017-02-12,0.0 +2017-02-13,6.0 +2017-02-14,1.0 +2017-02-15,0.0 +2017-02-16,0.0 +2017-02-17,0.0 +2017-02-18,0.0 +2017-02-19,0.0 +2017-02-20,0.0 +2017-02-21,8.0 +2017-02-22,7.5 +2017-02-23,0.0 +2017-02-24,40.5 +2017-02-25,10.0 +2017-02-26,0.0 +2017-02-27,4.0 +2017-02-28,5.0 +2017-03-01,40.0 +2017-03-02,3.0 +2017-03-03,0.0 +2017-03-04,2.0 +2017-03-05,0.0 +2017-03-06,12.5 +2017-03-07,26.0 +2017-03-08,4.0 +2017-03-09,0.0 +2017-03-10,4.0 +2017-03-11,7.5 +2017-03-12,1.5 +2017-03-13,0.0 +2017-03-14,0.0 +2017-03-15,14.0 +2017-03-16,0.0 +2017-03-17,36.0 +2017-03-18,7.5 +2017-03-19,31.5 +2017-03-20,0.0 +2017-03-21,0.0 +2017-03-22,0.0 +2017-03-23,0.0 +2017-03-24,0.0 +2017-03-25,0.0 +2017-03-26,8.0 +2017-03-27,18.5 +2017-03-28,5.5 +2017-03-29,0.0 +2017-03-30,26.0 +2017-03-31,0.0 +2017-04-01,3.5 +2017-04-02,7.5 +2017-04-03,0.0 +2017-04-04,3.5 +2017-04-05,10.0 +2017-04-06,11.0 +2017-04-07,0.0 +2017-04-08,0.0 +2017-04-09,41.0 +2017-04-10,0.0 +2017-04-11,3.5 +2017-04-12,0.0 +2017-04-13,0.0 +2017-04-14,0.0 +2017-04-15,0.0 +2017-04-16,2.5 +2017-04-17,9.5 +2017-04-18,22.0 +2017-04-19,0.0 +2017-04-20,2.0 +2017-04-21,0.0 +2017-04-22,46.0 +2017-04-23,0.0 +2017-04-24,0.0 +2017-04-25,0.0 +2017-04-26,11.5 +2017-04-27,4.5 +2017-04-28,19.5 +2017-04-29,0.0 +2017-04-30,0.0 +2017-05-01,0.0 +2017-05-02,0.0 +2017-05-03,0.0 +2017-05-04,7.0 +2017-05-05,0.0 +2017-05-06,0.0 +2017-05-07,0.0 +2017-05-08,3.5 +2017-05-09,1.5 +2017-05-10,0.0 +2017-05-11,0.0 +2017-05-12,0.0 +2017-05-13,0.0 +2017-05-14,0.0 +2017-05-15,0.0 +2017-05-16,0.0 +2017-05-17,0.0 +2017-05-18,0.0 +2017-05-19,0.0 +2017-05-20,0.0 +2017-05-21,0.0 +2017-05-22,0.0 +2017-05-23,0.0 +2017-05-24,0.0 +2017-05-25,0.0 +2017-05-26,0.0 +2017-05-27,0.0 +2017-05-28,10.0 +2017-05-29,0.0 +2017-05-30,0.0 +2017-05-31,0.0 +2017-06-01,0.0 +2017-06-02,0.0 +2017-06-03,0.0 +2017-06-04,0.0 +2017-06-05,0.0 +2017-06-06,0.0 +2017-06-07,0.0 +2017-06-08,0.0 +2017-06-09,0.0 +2017-06-10,0.0 +2017-06-11,0.0 +2017-06-12,0.0 +2017-06-13,0.0 +2017-06-14,0.0 +2017-06-15,0.0 +2017-06-16,0.0 +2017-06-17,0.0 +2017-06-18,0.0 +2017-06-19,0.0 +2017-06-20,0.0 +2017-06-21,0.0 +2017-06-22,0.0 +2017-06-23,0.0 +2017-06-24,0.0 +2017-06-25,0.0 +2017-06-26,0.0 +2017-06-27,0.0 +2017-06-28,0.0 +2017-06-29,0.0 +2017-06-30,0.0 +2017-07-01,0.0 +2017-07-02,0.0 +2017-07-03,0.0 +2017-07-04,0.0 +2017-07-05,0.0 +2017-07-06,0.0 +2017-07-07,0.0 +2017-07-08,0.0 +2017-07-09,0.0 +2017-07-10,0.0 +2017-07-11,0.0 +2017-07-12,0.0 +2017-07-13,0.0 +2017-07-14,0.0 +2017-07-15,0.0 +2017-07-16,0.0 +2017-07-17,0.0 +2017-07-18,3.0 +2017-07-19,4.0 +2017-07-20,0.0 +2017-07-21,0.0 +2017-07-22,0.0 +2017-07-23,0.0 +2017-07-24,0.0 +2017-07-25,0.0 +2017-07-26,0.0 +2017-07-27,0.0 +2017-07-28,0.0 +2017-07-29,0.0 +2017-07-30,0.0 +2017-07-31,0.0 +2017-08-01,0.0 +2017-08-02,0.0 +2017-08-03,0.0 +2017-08-04,0.0 +2017-08-05,0.0 +2017-08-06,0.0 +2017-08-07,0.0 +2017-08-08,0.0 +2017-08-09,0.0 +2017-08-10,0.0 +2017-08-11,0.0 +2017-08-12,0.0 +2017-08-13,0.0 +2017-08-14,0.0 +2017-08-15,0.0 +2017-08-16,0.0 +2017-08-17,0.0 +2017-08-18,0.0 +2017-08-19,0.0 +2017-08-20,0.0 +2017-08-21,0.0 +2017-08-22,0.0 +2017-08-23,0.0 +2017-08-24,0.0 +2017-08-25,0.0 +2017-08-26,0.0 +2017-08-27,0.0 +2017-08-28,0.0 +2017-08-29,0.0 +2017-08-30,0.0 +2017-08-31,0.0 +2017-09-01,0.0 +2017-09-02,0.0 +2017-09-03,0.0 +2017-09-04,0.0 +2017-09-05,0.0 +2017-09-06,0.0 +2017-09-07,0.0 +2017-09-08,0.0 +2017-09-09,0.0 +2017-09-10,0.0 +2017-09-11,0.0 +2017-09-12,0.0 +2017-09-13,0.0 +2017-09-14,0.0 +2017-09-15,0.0 +2017-09-16,0.0 +2017-09-17,0.0 +2017-09-18,0.0 +2017-09-19,0.0 +2017-09-20,0.0 +2017-09-21,0.0 +2017-09-22,0.0 +2017-09-23,0.0 +2017-09-24,0.0 +2017-09-25,0.0 +2017-09-26,13.0 +2017-09-27,17.0 +2017-09-28,0.0 +2017-09-29,2.5 +2017-09-30,8.0 +2017-10-01,0.0 +2017-10-02,0.0 +2017-10-03,0.0 +2017-10-04,0.0 +2017-10-05,0.0 +2017-10-06,0.0 +2017-10-07,0.0 +2017-10-08,0.0 +2017-10-09,0.0 +2017-10-10,7.0 +2017-10-11,8.0 +2017-10-12,0.0 +2017-10-13,0.0 +2017-10-14,0.0 +2017-10-15,0.0 +2017-10-16,45.5 +2017-10-17,0.0 +2017-10-18,0.0 +2017-10-19,5.0 +2017-10-20,0.0 +2017-10-21,0.0 +2017-10-22,0.0 +2017-10-23,0.0 +2017-10-24,0.0 +2017-10-25,28.5 +2017-10-26,6.5 +2017-10-27,0.0 +2017-10-28,0.0 +2017-10-29,0.0 +2017-10-30,0.0 +2017-10-31,0.0 +2017-11-01,0.0 +2017-11-02,0.0 +2017-11-03,0.0 +2017-11-04,20.0 +2017-11-05,1.5 +2017-11-06,26.0 +2017-11-07,31.5 +2017-11-08,5.5 +2017-11-09,34.5 +2017-11-10,2.5 +2017-11-11,1.5 +2017-11-12,7.0 +2017-11-13,50.0 +2017-11-14,54.5 +2017-11-15,0.5 +2017-11-16,11.0 +2017-11-17,32.5 +2017-11-18,0.0 +2017-11-19,65.0 +2017-11-20,9.5 +2017-11-21,23.0 +2017-11-22,4.0 +2017-11-23,0.0 +2017-11-24,0.0 +2017-11-25,0.0 +2017-11-26,5.0 +2017-11-27,33.0 +2017-11-28,0.0 +2017-11-29,2.0 +2017-11-30,4.0 +2017-12-01,0.0 +2017-12-02,0.0 +2017-12-03,0.0 +2017-12-04,4.5 +2017-12-05,0.0 +2017-12-06,20.5 +2017-12-07,25.0 +2017-12-08,4.5 +2017-12-09,0.0 +2017-12-10,0.0 +2017-12-11,0.0 +2017-12-12,0.0 +2017-12-13,19.5 +2017-12-14,1.5 +2017-12-15,32.5 +2017-12-16,5.0 +2017-12-17,27.5 +2017-12-18,5.0 +2017-12-19,0.0 +2017-12-20,3.5 +2017-12-21,0.0 +2017-12-22,0.0 +2017-12-23,0.0 +2017-12-24,0.0 +2017-12-25,0.0 +2017-12-26,0.0 +2017-12-27,0.0 +2017-12-28,0.0 +2017-12-29,0.0 +2017-12-30,20.0 +2017-12-31,0.0 +2018-01-01,0.0 +2018-01-02,5.0 +2018-01-03,8.0 +2018-01-04,18.0 +2018-01-05,7.0 +2018-01-06,13.0 +2018-01-07,1.5 +2018-01-08,5.0 +2018-01-09,0.0 +2018-01-10,0.0 +2018-01-11,24.0 +2018-01-12,0.0 +2018-01-13,0.0 +2018-01-14,1.0 +2018-01-15,1.5 +2018-01-16,5.0 +2018-01-17,0.0 +2018-01-18,0.0 +2018-01-19,0.0 +2018-01-20,0.0 +2018-01-21,0.0 +2018-01-22,5.0 +2018-01-23,2.5 +2018-01-24,0.0 +2018-01-25,5.0 +2018-01-26,1.0 +2018-01-27,1.5 +2018-01-28,5.0 +2018-01-29,2.0 +2018-01-30,0.0 +2018-01-31,0.0 +2018-02-01,0.0 +2018-02-02,0.0 +2018-02-03,0.0 +2018-02-04,4.0 +2018-02-05,0.0 +2018-02-06,6.0 +2018-02-07,0.0 +2018-02-08,0.0 +2018-02-09,0.0 +2018-02-10,0.0 +2018-02-11,2.0 +2018-02-12,0.0 +2018-02-13,1.5 +2018-02-14,1.0 +2018-02-15,0.0 +2018-02-16,9.0 +2018-02-17,0.0 +2018-02-18,0.0 +2018-02-19,6.0 +2018-02-20,33.0 +2018-02-21,31.5 +2018-02-22,14.5 +2018-02-23,35.5 +2018-02-24,0.0 +2018-02-25,30.0 +2018-02-26,37.0 +2018-02-27,5.5 +2018-02-28,58.0 +2018-03-01,39.5 +2018-03-02,2.0 +2018-03-03,10.5 +2018-03-04,5.0 +2018-03-05,9.0 +2018-03-06,1.0 +2018-03-07,1.5 +2018-03-08,19.5 +2018-03-09,36.5 +2018-03-10,38.5 +2018-03-11,2.5 +2018-03-12,38.0 +2018-03-13,53.5 +2018-03-14,0.0 +2018-03-15,0.0 +2018-03-16,0.0 +2018-03-17,24.0 +2018-03-18,6.0 +2018-03-19,2.5 +2018-03-20,5.5 +2018-03-21,4.0 +2018-03-22,2.0 +2018-03-23,0.0 +2018-03-24,31.5 +2018-03-25,10.5 +2018-03-26,0.0 +2018-03-27,0.0 +2018-03-28,8.0 +2018-03-29,0.0 +2018-03-30,16.5 +2018-03-31,7.5 +2018-04-01,0.0 +2018-04-02,0.0 +2018-04-03,40.5 +2018-04-04,39.5 +2018-04-05,0.0 +2018-04-06,6.5 +2018-04-07,0.0 +2018-04-08,33.0 +2018-04-09,3.5 +2018-04-10,1.0 +2018-04-11,0.0 +2018-04-12,0.0 +2018-04-13,0.0 +2018-04-14,0.0 +2018-04-15,0.0 +2018-04-16,0.0 +2018-04-17,0.0 +2018-04-18,14.0 +2018-04-19,0.0 +2018-04-20,22.0 +2018-04-21,0.0 +2018-04-22,12.0 +2018-04-23,7.5 +2018-04-24,0.0 +2018-04-25,0.0 +2018-04-26,13.0 +2018-04-27,3.5 +2018-04-28,0.0 +2018-04-29,0.0 +2018-04-30,0.0 +2018-05-01,0.0 +2018-05-02,0.0 +2018-05-03,2.5 +2018-05-04,0.0 +2018-05-05,0.0 +2018-05-06,0.0 +2018-05-07,0.0 +2018-05-08,0.0 +2018-05-09,0.0 +2018-05-10,0.0 +2018-05-11,0.0 +2018-05-12,0.0 +2018-05-13,0.0 +2018-05-14,0.0 +2018-05-15,0.0 +2018-05-16,0.0 +2018-05-17,0.0 +2018-05-18,0.0 +2018-05-19,0.0 +2018-05-20,0.0 +2018-05-21,0.0 +2018-05-22,0.0 +2018-05-23,0.0 +2018-05-24,0.0 +2018-05-25,0.0 +2018-05-26,1.5 +2018-05-27,5.0 +2018-05-28,0.0 +2018-05-29,0.0 +2018-05-30,0.0 +2018-05-31,0.0 +2018-06-01,0.0 +2018-06-02,0.0 +2018-06-03,0.0 +2018-06-04,0.0 +2018-06-05,0.0 +2018-06-06,0.0 +2018-06-07,0.0 +2018-06-08,0.0 +2018-06-09,0.0 +2018-06-10,0.0 +2018-06-11,0.0 +2018-06-12,0.0 +2018-06-13,0.0 +2018-06-14,0.0 +2018-06-15,0.0 +2018-06-16,0.0 +2018-06-17,0.0 +2018-06-18,0.0 +2018-06-19,0.0 +2018-06-20,8.0 +2018-06-21,0.0 +2018-06-22,0.0 +2018-06-23,0.0 +2018-06-24,0.0 +2018-06-25,0.0 +2018-06-26,0.0 +2018-06-27,0.0 +2018-06-28,0.0 +2018-06-29,0.0 +2018-06-30,0.0 +2018-07-01,0.0 +2018-07-02,0.0 +2018-07-03,0.0 +2018-07-04,0.0 +2018-07-05,0.0 +2018-07-06,0.0 +2018-07-07,0.0 +2018-07-08,0.0 +2018-07-09,0.0 +2018-07-10,0.0 +2018-07-11,0.0 +2018-07-12,0.0 +2018-07-13,0.0 +2018-07-14,0.0 +2018-07-15,0.0 +2018-07-16,0.0 +2018-07-17,0.0 +2018-07-18,0.0 +2018-07-19,0.0 +2018-07-20,0.0 +2018-07-21,0.0 +2018-07-22,0.0 +2018-07-23,0.0 +2018-07-24,0.0 +2018-07-25,0.0 +2018-07-26,0.0 +2018-07-27,0.0 +2018-07-28,0.0 +2018-07-29,0.0 +2018-07-30,0.0 +2018-07-31,0.0 +2018-08-01,0.0 +2018-08-02,0.0 +2018-08-03,0.0 +2018-08-04,0.0 +2018-08-05,0.0 +2018-08-06,0.0 +2018-08-07,0.0 +2018-08-08,0.0 +2018-08-09,2.0 +2018-08-10,0.0 +2018-08-11,0.0 +2018-08-12,0.0 +2018-08-13,5.0 +2018-08-14,2.0 +2018-08-15,0.0 +2018-08-16,0.0 +2018-08-17,0.0 +2018-08-18,2.0 +2018-08-19,0.0 +2018-08-20,0.0 +2018-08-21,0.0 +2018-08-22,0.0 +2018-08-23,0.0 +2018-08-24,0.0 +2018-08-25,3.0 +2018-08-26,0.0 +2018-08-27,0.0 +2018-08-28,0.0 +2018-08-29,0.0 +2018-08-30,0.0 +2018-08-31,1.0 +2018-09-01,0.0 +2018-09-02,0.0 +2018-09-03,0.5 +2018-09-04,0.0 +2018-09-05,0.0 +2018-09-06,0.0 +2018-09-07,0.0 +2018-09-08,0.0 +2018-09-09,0.0 +2018-09-10,0.0 +2018-09-11,0.0 +2018-09-12,0.0 +2018-09-13,0.0 +2018-09-14,0.0 +2018-09-15,0.0 +2018-09-16,0.0 +2018-09-17,0.0 +2018-09-18,3.0 +2018-09-19,0.0 +2018-09-20,0.0 +2018-09-21,0.0 +2018-09-22,1.0 +2018-09-23,0.0 +2018-09-24,0.0 +2018-09-25,0.0 +2018-09-26,0.0 +2018-09-27,0.0 +2018-09-28,0.0 +2018-09-29,0.0 +2018-09-30,0.0 +2018-10-01,0.0 +2018-10-02,0.0 +2018-10-03,0.0 +2018-10-04,0.0 +2018-10-05,0.0 +2018-10-06,0.0 +2018-10-07,0.0 +2018-10-08,0.0 +2018-10-09,0.0 +2018-10-10,0.0 +2018-10-11,0.0 +2018-10-12,0.0 +2018-10-13,0.0 +2018-10-14,0.0 +2018-10-15,0.0 +2018-10-16,0.0 +2018-10-17,0.0 +2018-10-18,0.0 +2018-10-19,0.0 +2018-10-20,0.0 +2018-10-21,0.0 +2018-10-22,0.0 +2018-10-23,0.0 +2018-10-24,24.5 +2018-10-25,0.0 +2018-10-26,0.0 +2018-10-27,0.0 +2018-10-28,0.0 +2018-10-29,0.0 +2018-10-30,0.0 +2018-10-31,13.5 +2018-11-01,0.0 +2018-11-02,0.0 +2018-11-03,0.0 +2018-11-04,0.0 +2018-11-05,0.0 +2018-11-06,0.0 +2018-11-07,0.0 +2018-11-08,0.0 +2018-11-09,0.0 +2018-11-10,0.0 +2018-11-11,0.0 +2018-11-12,0.0 +2018-11-13,0.0 +2018-11-14,0.0 +2018-11-15,0.0 +2018-11-16,0.0 +2018-11-17,0.0 +2018-11-18,0.0 +2018-11-19,0.0 +2018-11-20,0.0 +2018-11-21,0.0 +2018-11-22,0.0 +2018-11-23,0.0 +2018-11-24,0.0 +2018-11-25,0.0 +2018-11-26,0.0 +2018-11-27,0.0 +2018-11-28,0.0 +2018-11-29,0.0 +2018-11-30,0.0 +2018-12-01,0.0 +2018-12-02,0.0 +2018-12-03,0.0 +2018-12-04,0.0 +2018-12-05,0.0 +2018-12-06,0.0 +2018-12-07,0.0 +2018-12-08,0.0 +2018-12-09,0.0 +2018-12-10,0.0 +2018-12-11,0.0 +2018-12-12,0.0 +2018-12-13,0.0 +2018-12-14,0.0 +2018-12-15,0.0 +2018-12-16,0.0 +2018-12-17,0.0 +2018-12-18,0.0 +2018-12-19,0.0 +2018-12-20,0.0 +2018-12-21,0.0 +2018-12-22,0.0 +2018-12-23,0.0 +2018-12-24,0.0 +2018-12-25,0.0 +2018-12-26,0.0 +2018-12-27,0.0 +2018-12-28,0.0 +2018-12-29,0.0 +2018-12-30,0.0 +2018-12-31,0.0 +2019-01-01,0.0 +2019-01-02,0.0 +2019-01-03,0.0 +2019-01-04,0.0 +2019-01-05,0.0 +2019-01-06,6.5 +2019-01-07,0.0 +2019-01-08,4.5 +2019-01-09,0.0 +2019-01-10,2.5 +2019-01-11,0.0 +2019-01-12,0.0 +2019-01-13,2.0 +2019-01-14,11.0 +2019-01-15,1.0 +2019-01-16,1.5 +2019-01-17,0.0 +2019-01-18,4.5 +2019-01-19,2.5 +2019-01-20,0.0 +2019-01-21,4.5 +2019-01-22,1.0 +2019-01-23,3.5 +2019-01-24,0.0 +2019-01-25,4.0 +2019-01-26,0.0 +2019-01-27,1.0 +2019-01-28,0.0 +2019-01-29,0.0 +2019-01-30,0.0 +2019-01-31,0.0 +2019-02-01,0.0 +2019-02-02,8.5 +2019-02-03,38.5 +2019-02-04,8.0 +2019-02-05,4.5 +2019-02-06,2.0 +2019-02-07,1.0 +2019-02-08,16.5 +2019-02-09,52.5 +2019-02-10,18.5 +2019-02-11,41.5 +2019-02-12,27.5 +2019-02-13,12.0 +2019-02-14,0.0 +2019-02-15,23.5 +2019-02-16,0.0 +2019-02-17,6.0 +2019-02-18,2.0 +2019-02-19,0.0 +2019-02-20,5.0 +2019-02-21,11.0 +2019-02-22,7.0 +2019-02-23,5.5 +2019-02-24,32.0 +2019-02-25,4.5 +2019-02-26,0.0 +2019-02-27,1.5 +2019-02-28,0.0 +2019-03-01,2.0 +2019-03-02,7.5 +2019-03-03,21.0 +2019-03-04,0.0 +2019-03-05,0.0 +2019-03-06,75.5 +2019-03-07,13.0 +2019-03-08,0.0 +2019-03-09,0.0 +2019-03-10,0.0 +2019-03-11,0.0 +2019-03-12,20.5 +2019-03-13,0.0 +2019-03-14,0.0 +2019-03-15,0.0 +2019-03-16,1.0 +2019-03-17,0.0 +2019-03-18,2.0 +2019-03-19,0.0 +2019-03-20,20.5 +2019-03-21,0.0 +2019-03-22,1.5 +2019-03-23,0.0 +2019-03-24,0.0 +2019-03-25,0.0 +2019-03-26,0.0 +2019-03-27,69.0 +2019-03-28,8.5 +2019-03-29,1.0 +2019-03-30,6.5 +2019-03-31,2.5 +2019-04-01,10.0 +2019-04-02,34.5 +2019-04-03,13.5 +2019-04-04,9.5 +2019-04-05,2.0 +2019-04-06,2.5 +2019-04-07,3.0 +2019-04-08,64.5 +2019-04-09,4.5 +2019-04-10,1.0 +2019-04-11,0.0 +2019-04-12,7.0 +2019-04-13,83.0 +2019-04-14,15.0 +2019-04-15,51.5 +2019-04-16,51.0 +2019-04-17,0.0 +2019-04-18,7.0 +2019-04-19,36.5 +2019-04-20,0.0 +2019-04-21,0.0 +2019-04-22,0.0 +2019-04-23,0.0 +2019-04-24,3.0 +2019-04-25,0.0 +2019-04-26,1.0 +2019-04-27,0.0 +2019-04-28,0.0 +2019-04-29,0.0 +2019-04-30,1.5 +2019-05-01,51.5 +2019-05-02,16.0 +2019-05-03,14.0 +2019-05-04,0.0 +2019-05-05,0.0 +2019-05-06,0.0 +2019-05-07,0.0 +2019-05-08,0.0 +2019-05-09,1.0 +2019-05-10,0.0 +2019-05-11,0.0 +2019-05-12,0.0 +2019-05-13,0.0 +2019-05-14,0.0 +2019-05-15,0.0 +2019-05-16,18.5 +2019-05-17,0.0 +2019-05-18,0.0 +2019-05-19,0.0 +2019-05-20,0.0 +2019-05-21,0.0 +2019-05-22,0.0 +2019-05-23,0.0 +2019-05-24,0.0 +2019-05-25,0.0 +2019-05-26,0.0 +2019-05-27,0.0 +2019-05-28,0.0 +2019-05-29,0.0 +2019-05-30,0.0 +2019-05-31,0.0 +2019-06-01,0.0 +2019-06-02,0.0 +2019-06-03,0.0 +2019-06-04,0.0 +2019-06-05,0.0 +2019-06-06,0.0 +2019-06-07,0.0 +2019-06-08,0.0 +2019-06-09,0.0 +2019-06-10,0.0 +2019-06-11,0.0 +2019-06-12,0.0 +2019-06-13,0.0 +2019-06-14,0.0 +2019-06-15,0.0 +2019-06-16,0.0 +2019-06-17,0.0 +2019-06-18,0.0 +2019-06-19,0.0 +2019-06-20,0.0 +2019-06-21,0.0 +2019-06-22,0.0 +2019-06-23,0.0 +2019-06-24,0.0 +2019-06-25,0.0 +2019-06-26,0.0 +2019-06-27,0.0 +2019-06-28,0.0 +2019-06-29,0.0 +2019-06-30,0.0 +2019-07-01,0.0 +2019-07-02,0.0 +2019-07-03,0.0 +2019-07-04,0.0 +2019-07-05,0.0 +2019-07-06,0.0 +2019-07-07,0.0 +2019-07-08,0.0 +2019-07-09,0.0 +2019-07-10,0.0 +2019-07-11,0.0 +2019-07-12,0.0 +2019-07-13,0.0 +2019-07-14,0.0 +2019-07-15,0.0 +2019-07-16,0.0 +2019-07-17,0.0 +2019-07-18,0.0 +2019-07-19,0.0 +2019-07-20,0.0 +2019-07-21,0.0 +2019-07-22,0.0 +2019-07-23,0.0 +2019-07-24,0.0 +2019-07-25,0.0 +2019-07-26,0.0 +2019-07-27,0.0 +2019-07-28,0.0 +2019-07-29,0.0 +2019-07-30,0.0 +2019-07-31,0.0 +2019-08-01,0.0 +2019-08-02,0.0 +2019-08-03,0.0 +2019-08-04,0.0 +2019-08-05,0.0 +2019-08-06,0.0 +2019-08-07,0.0 +2019-08-08,0.0 +2019-08-09,0.0 +2019-08-10,0.0 +2019-08-11,0.0 +2019-08-12,0.0 +2019-08-13,0.0 +2019-08-14,0.0 +2019-08-15,0.0 +2019-08-16,0.0 +2019-08-17,0.0 +2019-08-18,0.0 +2019-08-19,0.0 +2019-08-20,0.0 +2019-08-21,0.0 +2019-08-22,0.0 +2019-08-23,0.0 +2019-08-24,0.0 +2019-08-25,0.0 +2019-08-26,0.0 +2019-08-27,0.0 +2019-08-28,0.0 +2019-08-29,0.0 +2019-08-30,0.0 +2019-08-31,0.0 +2019-09-01,0.0 +2019-09-02,0.0 +2019-09-03,0.0 +2019-09-04,0.0 +2019-09-05,0.0 +2019-09-06,0.0 +2019-09-07,0.0 +2019-09-08,0.0 +2019-09-09,0.0 +2019-09-10,0.0 +2019-09-11,0.0 +2019-09-12,0.0 +2019-09-13,0.0 +2019-09-14,0.0 +2019-09-15,0.0 +2019-09-16,0.0 +2019-09-17,0.0 +2019-09-18,0.0 +2019-09-19,0.0 +2019-09-20,0.0 +2019-09-21,0.0 +2019-09-22,0.0 +2019-09-23,0.0 +2019-09-24,0.0 +2019-09-25,0.0 +2019-09-26,0.0 +2019-09-27,0.0 +2019-09-28,0.0 +2019-09-29,0.0 +2019-09-30,0.0 +2019-10-01,0.0 +2019-10-02,0.0 +2019-10-03,0.0 +2019-10-04,0.0 +2019-10-05,0.0 +2019-10-06,0.0 +2019-10-07,0.0 +2019-10-08,0.0 +2019-10-09,0.0 +2019-10-10,0.0 +2019-10-11,0.0 +2019-10-12,0.0 +2019-10-13,0.0 +2019-10-14,0.0 +2019-10-15,0.0 +2019-10-16,0.0 +2019-10-17,0.0 +2019-10-18,0.0 +2019-10-19,0.0 +2019-10-20,0.0 +2019-10-21,0.0 +2019-10-22,0.0 +2019-10-23,0.0 +2019-10-24,0.0 +2019-10-25,0.0 +2019-10-26,0.0 +2019-10-27,14.0 +2019-10-28,0.0 +2019-10-29,0.0 +2019-10-30,3.0 +2019-10-31,0.0 +2019-11-01,0.0 +2019-11-02,0.0 +2019-11-03,0.0 +2019-11-04,0.0 +2019-11-05,3.0 +2019-11-06,0.0 +2019-11-07,0.0 +2019-11-08,0.0 +2019-11-09,34.5 +2019-11-10,0.0 +2019-11-11,0.0 +2019-11-12,0.0 +2019-11-13,0.0 +2019-11-14,0.0 +2019-11-15,0.0 +2019-11-16,0.0 +2019-11-17,0.0 +2019-11-18,0.0 +2019-11-19,0.0 +2019-11-20,0.0 +2019-11-21,0.0 +2019-11-22,3.5 +2019-11-23,5.0 +2019-11-24,2.5 +2019-11-25,0.0 +2019-11-26,0.0 +2019-11-27,0.0 +2019-11-28,0.0 +2019-11-29,0.0 +2019-11-30,0.0 +2019-12-01,2.5 +2019-12-02,0.0 +2019-12-03,0.0 +2019-12-04,0.0 +2019-12-05,0.0 +2019-12-06,0.0 +2019-12-07,9.5 +2019-12-08,0.0 +2019-12-09,0.0 +2019-12-10,2.5 +2019-12-11,0.0 +2019-12-12,47.0 +2019-12-13,0.0 +2019-12-14,0.0 +2019-12-15,7.0 +2019-12-16,0.0 +2019-12-17,7.0 +2019-12-18,29.5 +2019-12-19,0.0 +2019-12-20,0.0 +2019-12-21,0.0 +2019-12-22,2.5 +2019-12-23,13.5 +2019-12-24,0.0 +2019-12-25,2.5 +2019-12-26,5.5 +2019-12-27,3.5 +2019-12-28,0.0 +2019-12-29,0.0 +2019-12-30,0.0 +2019-12-31,61.0 From 1aca32e68b513caff2a5b3c9615f9ea6a3f6318e Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Tue, 10 May 2022 15:21:32 +0700 Subject: [PATCH 08/12] =?UTF-8?q?=F0=9F=8F=81=20finalization=20to=20v1.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 75 +++++++-- example_dataset.csv | 366 -------------------------------------------- pyconfig.py | 1 - pyfigure.py | 45 ++---- pylayout.py | 106 +++++++++++-- pylayoutfunc.py | 10 ++ 6 files changed, 173 insertions(+), 430 deletions(-) delete mode 100644 example_dataset.csv diff --git a/app.py b/app.py index 6c206be..f09564d 100644 --- a/app.py +++ b/app.py @@ -41,7 +41,7 @@ [ pylayout.HTML_TITLE, pylayout.HTML_SUBTITLE, - pylayout.HTML_ALERT, + pylayout.HTML_ALERT_README, pylayout.HTML_ROW_BUTTON_UPLOAD, pylayout.HTML_ROW_TABLE, pylayout.HTML_ROW_BUTTON_VIZ, @@ -49,8 +49,11 @@ pylayout.HTML_ROW_GRAPH_ONE, pylayout.HTML_ROW_BUTTON_ANALYZE, pylayout.HTML_ROW_TABLE_ANALYZE, - pylayout._HTML_TROUBLESHOOT, + pylayout.HTML_ROW_BUTTON_VIZ_ANALYSIS, + pylayout.HTML_ROW_GRAPH_ANALYSIS, + pylayout.HTML_ALERT_CONTRIBUTION, pylayout.HTML_MADEBY, + pylayout.HTML_OTHER_PROJECTS, pylayout.HTML_FOOTER, ], fluid=True, @@ -80,7 +83,7 @@ def callback_upload(content, filename, filedate, _): if ctx.triggered[0]["prop_id"] == "button-skip.n_clicks": dataframe = pd.read_csv( - Path(r"./example_dataset.csv"), index_col=0, parse_dates=True + Path(r"./example_1Y7S.csv"), index_col=0, parse_dates=True ) filename = None filedate = None @@ -169,7 +172,12 @@ def callback_download_table(_, table_data, table_columns): @app.callback( - Output("tab-analyze", "children"), + [ + Output("tab-analysis", "children"), + Output("button-viz-analysis", "disabled"), + Output("button-viz-analysis", "outline"), + Output("row-button-download-analysis-csv", "style"), + ], Input("button-analyze", "n_clicks"), State("output-table", "derived_virtual_data"), State("output-table", "columns"), @@ -177,26 +185,50 @@ def callback_download_table(_, table_data, table_columns): ) def callback_analyze(_, table_data, table_columns): global SUMMARY_ALL - dataframe = pyfunc.transform_to_dataframe(table_data, table_columns) - SUMMARY_ALL = pyfunc.generate_summary_all(dataframe, n_days=["16D", "MS", "YS"]) - tables = [ - pylayoutfunc.create_table_summary( - summary, f"table-analyze-{counter}", deletable=False - ) - for counter, summary in enumerate(SUMMARY_ALL) + button_viz_analysis_disabled = True + button_viz_analysis_outline = True + row_button_download_analysis_style = {"visibility": "hidden"} + + try: + dataframe = pyfunc.transform_to_dataframe(table_data, table_columns) + SUMMARY_ALL = pyfunc.generate_summary_all(dataframe, n_days=["16D", "MS", "YS"]) + tables = [ + pylayoutfunc.create_table_summary( + summary, f"table-analyze-{counter}", deletable=False + ) + for counter, summary in enumerate(SUMMARY_ALL) + ] + + children = pylayoutfunc.create_tabcard_table_layout(tables) + button_viz_analysis_disabled = False + button_viz_analysis_outline = False + row_button_download_analysis_style = {"visibility": "visible"} + except Exception as e: + children = html.Div(f"SOMETHING ERROR {e}") + + return [ + children, + button_viz_analysis_disabled, + button_viz_analysis_outline, + row_button_download_analysis_style, ] - children = pylayoutfunc.create_tabcard_table_layout(tables) - return [children, html.Div("HELLO")] +@app.callback( + Output("download-analysis-csv", "data"), + Input("button-download-analysis-csv", "n_clicks"), + prevent_initial_call=True, +) +def callback_download_results(_): + + dataframe = pd.concat(SUMMARY_ALL, axis=1, keys=["Biweekly", "Monthly", "Yearly"]) + return dcc.send_data_frame(dataframe.to_csv, "results.csv") @app.callback( - Output("row-troubleshoot", "children"), - Input("button-troubleshoot", "n_clicks"), - # State("table-analyze-0", "derived_virtual_data"), - # State("table-analyze-0", "columns"), + Output("tab-graph-analysis", "children"), + Input("button-viz-analysis", "n_clicks"), prevent_initial_call=True, ) def callback_troubleshoot(_): @@ -230,5 +262,14 @@ def callback_troubleshoot(_): return children +@app.callback( + Output("row-troubleshoot", "children"), + Input("button-troubleshoot", "n_clicks"), + prevent_initial_call=True, +) +def _callback_troubleshoot(_): + return html.Div("troubleshoot") + + if __name__ == "__main__": app.run_server(debug=DEBUG) diff --git a/example_dataset.csv b/example_dataset.csv deleted file mode 100644 index d70ac99..0000000 --- a/example_dataset.csv +++ /dev/null @@ -1,366 +0,0 @@ -DATE,STA_A,STA_D,STA_F,STA_G,STA_L,STA_M,STA_P -2009-01-01,0.0,21.5,0.0,21,0,0.0,0 -2009-01-02,0.0,18.9,0.0,0,0,0.0,0 -2009-01-03,0.0,24.0,0.0,0,0,0.0,0 -2009-01-04,0.0,0.0,0.0,0,0,0.0,0 -2009-01-05,0.0,19.0,0.0,0,0,0.0,0 -2009-01-06,0.0,35.0,0.0,0,0,0.0,0 -2009-01-07,0.0,26.2,0.0,0,0,0.0,0 -2009-01-08,0.0,28.0,0.0,10,14,0.0,9 -2009-01-09,7.8,21.8,3.5,0,3,35.8,2 -2009-01-10,10.0,14.7,8.5,0,0,1.0,3 -2009-01-11,0.0,20.8,4.5,10,4,2.5,2 -2009-01-12,6.5,32.4,5.0,0,0,2.3,2 -2009-01-13,16.4,29.1,3.5,12,0,2.7,12 -2009-01-14,30.0,0.0,6.5,0,16,9.0,12 -2009-01-15,16.4,19.0,0.0,0,0,13.0,1 -2009-01-16,2.0,18.0,4.6,40,3,1.0,3 -2009-01-17,0.0,20.0,3.5,7,5,1.0,3 -2009-01-18,7.0,22.6,0.0,30,0,5.2,0 -2009-01-19,0.0,38.0,0.0,0,0,0.0,3 -2009-01-20,1.4,25.0,0.0,0,4,0.9,10 -2009-01-21,16.69,0.0,0.0,0,0,55.0,0 -2009-01-22,0.0,27.2,0.0,0,0,1.0,8 -2009-01-23,0.0,30.8,0.0,0,0,0.5,5 -2009-01-24,0.0,31.5,0.0,14,30,0.0,19 -2009-01-25,28.9,25.7,2.5,0,22,18.5,13 -2009-01-26,53.2,20.2,2.6,30,1,3.0,12 -2009-01-27,0.0,24.8,0.0,30,0,0.5,0 -2009-01-28,0.2,32.0,0.0,0,0,0.0,0 -2009-01-29,0.0,33.0,0.0,28,12,0.0,38 -2009-01-30,25.8,36.7,4.6,27,5,26.0,7 -2009-01-31,14.3,30.5,6.5,50,0,10.0,1 -2009-02-01,1.1,0.0,6.5,17,6,0.0,7 -2009-02-02,13.0,0.0,6.5,18,2,19.5,12 -2009-02-03,3.3,0.0,4.5,14,36,3.0,20 -2009-02-04,9.2,25.8,10.5,45,8,15.0,3 -2009-02-05,0.0,20.2,9.0,0,1,1.0,2 -2009-02-06,13.2,30.5,5.5,0,6,1.3,5 -2009-02-07,10.0,0.0,0.0,0,0,5.0,0 -2009-02-08,0.1,11.5,6.5,0,0,0.0,2 -2009-02-09,1.2,40.9,0.0,14,0,2.5,0 -2009-02-10,0.5,21.4,3.5,0,13,0.5,3 -2009-02-11,0.7,16.0,2.5,0,8,3.0,5 -2009-02-12,0.0,32.4,6.5,0,4,3.0,0 -2009-02-13,0.1,8.6,0.0,0,3,0.0,56 -2009-02-14,8.5,11.2,0.0,0,0,39.5,0 -2009-02-15,4.5,0.0,0.0,0,0,0.0,2 -2009-02-16,4.7,0.0,0.0,75,2,6.5,1 -2009-02-17,0.0,0.0,0.0,8,7,1.0,1 -2009-02-18,0.0,0.0,3.5,0,2,0.5,3 -2009-02-19,0.2,0.0,0.0,0,0,1.2,1 -2009-02-20,2.9,5.2,0.0,62,27,46.0,33 -2009-02-21,24.8,48.5,6.5,0,15,41.4,33 -2009-02-22,29.4,36.6,9.5,23,6,59.5,15 -2009-02-23,29.4,42.0,16.5,0,13,18.0,25 -2009-02-24,22.6,0.0,14.5,0,14,24.5,10 -2009-02-25,4.8,0.0,15.5,35,0,9.5,0 -2009-02-26,1.0,0.0,13.5,0,0,0.0,0 -2009-02-27,0.0,14.0,0.0,0,3,0.0,23 -2009-02-28,17.7,10.0,6.5,0,0,12.8,7 -2009-03-01,0.0,26.0,2.5,0,0,2.1,0 -2009-03-02,0.0,20.8,0.0,0,0,0.0,0 -2009-03-03,0.0,0.0,0.0,0,1,0.0,3 -2009-03-04,1.2,18.2,10.5,20,17,2.8,29 -2009-03-05,16.4,6.4,4.5,18,57,40.0,29 -2009-03-06,77.0,0.0,0.0,0,0,46.9,11 -2009-03-07,0.0,0.0,0.0,28,0,0.0,1 -2009-03-08,13.5,0.0,0.0,22,8,1.0,29 -2009-03-09,19.5,23.7,0.0,0,18,24.0,0 -2009-03-10,40.8,32.6,0.0,0,34,19.8,1 -2009-03-11,36.4,0.0,0.0,0,3,1.0,4 -2009-03-12,18.8,0.0,0.0,0,36,12.5,20 -2009-03-13,2.4,31.0,0.0,0,0,26.5,0 -2009-03-14,0.0,21.9,0.0,0,43,0.0,9 -2009-03-15,52.6,24.6,0.0,0,0,62.5,0 -2009-03-16,3.8,30.2,0.0,0,0,0.0,0 -2009-03-17,0.0,0.0,0.0,0,0,0.0,0 -2009-03-18,0.0,0.0,0.0,0,0,0.0,0 -2009-03-19,0.0,12.8,0.0,0,0,0.0,2 -2009-03-20,0.0,0.0,0.0,0,0,0.0,0 -2009-03-21,0.0,8.5,0.0,47,38,0.0,28 -2009-03-22,25.4,0.0,14.5,0,22,22.5,0 -2009-03-23,58.5,0.0,0.0,25,7,4.5,11 -2009-03-24,0.6,10.4,12.5,0,4,26.5,0 -2009-03-25,0.0,5.2,0.0,38,6,0.0,1 -2009-03-26,43.2,0.0,10.5,10,2,15.0,18 -2009-03-27,12.4,15.5,0.0,0,1,11.0,3 -2009-03-28,0.0,40.6,0.0,60,26,2.5,19 -2009-03-29,20.3,42.5,7.5,0,6,1.0,12 -2009-03-30,0.7,45.8,6.5,8,4,17.5,0 -2009-03-31,27.8,0.0,25.5,0,3,0.0,5 -2009-04-01,0.0,40.6,0.0,0,7,1.8,1 -2009-04-02,0.0,35.9,0.0,30,0,0.5,0 -2009-04-03,0.0,26.4,0.0,0,0,6.4,1 -2009-04-04,3.2,0.0,5.5,3,0,36.0,0 -2009-04-05,16.0,0.0,6.5,35,24,3.1,29 -2009-04-06,2.1,0.0,16.5,27,18,27.0,20 -2009-04-07,11.0,0.0,0.0,5,0,3.5,1 -2009-04-08,13.4,22.8,0.0,0,0,2.0,1 -2009-04-09,0.0,20.6,0.0,0,0,0.0,0 -2009-04-10,0.0,0.0,0.0,0,0,0.0,0 -2009-04-11,0.0,0.0,0.0,0,0,0.0,0 -2009-04-12,8.9,0.0,0.0,0,0,0.0,0 -2009-04-13,2.7,0.0,0.0,0,3,5.3,3 -2009-04-14,1.5,0.0,0.0,0,0,35.5,3 -2009-04-15,6.3,17.0,18.5,0,1,0.0,0 -2009-04-16,0.1,30.2,2.5,0,0,0.0,0 -2009-04-17,0.0,10.6,0.0,0,0,4.5,0 -2009-04-18,0.0,7.4,0.0,0,0,0.0,0 -2009-04-19,0.0,0.0,12.5,0,53,0.0,11 -2009-04-20,4.6,0.0,0.0,0,0,15.0,0 -2009-04-21,0.0,15.4,0.0,0,20,0.0,2 -2009-04-22,0.9,26.9,3.5,30,7,10.5,12 -2009-04-23,8.8,0.0,5.5,12,45,20.5,34 -2009-04-24,18.2,0.0,0.0,0,0,3.5,0 -2009-04-25,0.0,0.0,0.0,3,0,0.0,9 -2009-04-26,0.0,30.8,0.0,0,62,1.3,29 -2009-04-27,8.5,42.6,12.5,7,49,22.0,2 -2009-04-28,4.4,46.2,0.0,0,1,0.5,0 -2009-04-29,4.1,0.0,0.0,0,0,0.0,0 -2009-04-30,0.0,0.0,0.0,0,0,0.0,0 -2009-05-01,0.6,0.0,7.5,0,0,2.9,0 -2009-05-02,0.0,72.4,10.5,0,0,0.0,0 -2009-05-03,0.0,0.0,0.0,0,0,0.0,0 -2009-05-04,23.2,0.0,0.0,0,0,0.0,0 -2009-05-05,0.1,56.8,0.0,19,0,0.0,0 -2009-05-06,11.6,0.0,15.5,0,4,0.0,0 -2009-05-07,0.2,0.0,6.5,0,0,1.4,0 -2009-05-08,0.0,38.5,0.0,0,1,0.0,1 -2009-05-09,0.0,47.2,0.0,40,0,0.0,0 -2009-05-10,0.0,0.0,10.5,0,17,7.5,0 -2009-05-11,14.7,0.0,5.5,47,28,0.0,13 -2009-05-12,22.8,0.0,0.0,0,0,26.5,0 -2009-05-13,0.0,49.2,6.5,0,8,0.0,0 -2009-05-14,2.4,0.0,0.0,0,0,3.6,2 -2009-05-15,0.0,0.0,7.5,0,6,1.2,0 -2009-05-16,2.1,0.0,0.0,0,0,3.8,0 -2009-05-17,0.0,0.0,0.0,30,6,0.0,55 -2009-05-18,8.3,0.0,10.5,0,29,79.0,49 -2009-05-19,85.2,68.5,12.5,0,0,76.0,0 -2009-05-20,1.0,57.8,0.0,0,11,0.0,51 -2009-05-21,4.8,0.0,3.5,0,0,0.0,4 -2009-05-22,0.6,45.5,2.5,0,20,0.0,0 -2009-05-23,0.9,0.0,0.0,0,0,0.0,0 -2009-05-24,0.1,0.0,0.0,0,4,0.0,3 -2009-05-25,10.0,0.0,0.0,0,0,1.0,0 -2009-05-26,0.0,0.0,0.0,0,0,0.0,0 -2009-05-27,0.0,52.8,0.0,0,0,0.0,0 -2009-05-28,0.0,79.8,5.5,20,0,0.0,0 -2009-05-29,1.6,32.4,10.1,0,24,4.0,13 -2009-05-30,0.0,0.0,15.5,5,0,0.0,0 -2009-05-31,0.2,62.7,7.5,10,0,0.0,0 -2009-06-01,0.0,0.0,5.5,0,3,0.0,0 -2009-06-02,0.0,0.0,20.5,40,25,0.0,4 -2009-06-03,20.5,0.0,0.0,0,0,0.0,1 -2009-06-04,0.1,21.4,15.5,0,9,2.0,16 -2009-06-05,4.0,0.0,0.0,0,1,20.5,5 -2009-06-06,5.8,0.0,0.0,0,0,6.0,0 -2009-06-07,3.8,0.0,8.5,0,0,0.0,0 -2009-06-08,0.0,0.0,2.5,0,9,0.0,50 -2009-06-09,6.2,0.0,0.0,0,0,10.5,0 -2009-06-10,0.0,10.8,0.0,0,0,0.0,0 -2009-06-11,0.0,18.9,0.0,0,0,0.0,0 -2009-06-12,0.0,22.8,0.0,0,0,0.0,0 -2009-06-13,0.0,0.0,8.5,0,0,11.9,0 -2009-06-14,0.0,0.0,0.0,0,0,0.0,0 -2009-06-15,0.0,0.0,8.5,0,5,0.0,0 -2009-06-16,0.1,0.0,0.0,0,0,0.0,0 -2009-06-17,6.3,0.0,0.0,0,0,0.0,0 -2009-06-18,0.0,0.0,0.0,0,0,0.0,3 -2009-06-19,0.0,0.0,0.0,0,0,2.3,0 -2009-06-20,0.0,0.0,0.0,0,0,0.0,0 -2009-06-21,0.0,24.5,0.0,0,0,0.0,0 -2009-06-22,0.0,0.0,0.0,0,0,0.0,0 -2009-06-23,0.0,0.0,0.0,0,55,0.0,29 -2009-06-24,0.0,0.0,0.0,0,0,5.0,0 -2009-06-25,0.0,0.0,0.0,0,0,0.0,0 -2009-06-26,0.0,0.0,0.0,0,0,0.0,0 -2009-06-27,0.0,0.0,0.0,0,0,0.0,0 -2009-06-28,0.0,0.0,0.0,0,0,0.0,0 -2009-06-29,0.0,8.6,2.5,0,2,0.0,0 -2009-06-30,0.0,0.0,0.0,0,0,0.0,0 -2009-07-01,0.0,0.0,0.0,0,0,0.0,0 -2009-07-02,0.0,5.6,8.5,0,0,0.0,0 -2009-07-03,0.0,0.0,0.0,0,4,0.0,6 -2009-07-04,0.0,0.0,0.0,0,0,4.5,0 -2009-07-05,0.0,0.0,0.0,0,0,0.0,0 -2009-07-06,0.0,0.0,0.0,0,0,0.0,0 -2009-07-07,0.0,0.0,0.0,0,0,0.0,0 -2009-07-08,0.0,0.0,0.0,0,0,0.0,0 -2009-07-09,0.0,0.0,0.0,0,0,0.0,0 -2009-07-10,0.0,0.0,0.0,0,0,0.0,0 -2009-07-11,0.0,0.0,0.0,0,0,0.0,0 -2009-07-12,0.0,0.0,0.0,0,0,0.0,0 -2009-07-13,0.0,0.0,0.0,0,0,0.0,0 -2009-07-14,0.0,0.0,0.0,0,0,0.0,0 -2009-07-15,0.0,0.0,0.0,0,0,0.0,0 -2009-07-16,0.0,0.0,0.0,0,0,0.0,0 -2009-07-17,0.0,0.0,0.0,0,0,0.0,0 -2009-07-18,0.0,0.0,0.0,0,0,0.0,0 -2009-07-19,0.0,0.0,0.0,0,0,0.0,0 -2009-07-20,0.0,0.0,0.0,0,0,0.0,0 -2009-07-21,0.0,0.0,0.0,0,0,0.0,0 -2009-07-22,0.0,0.0,0.0,0,0,0.0,0 -2009-07-23,0.0,0.0,0.0,0,0,0.0,0 -2009-07-24,0.0,0.0,8.5,0,0,2.6,0 -2009-07-25,0.0,0.0,0.0,0,0,2.5,0 -2009-07-26,0.5,0.0,0.0,0,0,0.0,0 -2009-07-27,0.0,0.0,0.0,0,0,0.0,0 -2009-07-28,0.0,0.0,0.0,0,0,0.0,0 -2009-07-29,0.0,0.0,0.0,0,0,0.0,0 -2009-07-30,0.0,0.0,0.0,0,0,0.0,0 -2009-07-31,0.0,0.0,0.0,0,0,0.0,0 -2009-08-01,0.0,0.0,0.0,0,0,0.0,0 -2009-08-02,0.0,0.0,0.0,0,0,0.0,0 -2009-08-03,0.0,0.0,0.0,0,0,0.0,0 -2009-08-04,0.0,0.0,0.0,0,0,0.0,0 -2009-08-05,0.0,0.0,0.0,0,0,0.0,0 -2009-08-06,0.0,0.0,0.0,0,0,0.0,0 -2009-08-07,0.0,0.0,0.0,0,0,0.0,0 -2009-08-08,0.0,0.0,0.0,0,0,0.0,0 -2009-08-09,0.0,0.0,0.0,0,0,0.0,0 -2009-08-10,0.0,0.0,0.0,0,0,0.0,0 -2009-08-11,0.0,0.0,0.0,0,0,0.0,0 -2009-08-12,0.0,0.0,0.0,0,0,0.0,0 -2009-08-13,0.0,0.0,0.0,0,0,0.0,0 -2009-08-14,0.0,0.0,5.5,0,0,0.0,0 -2009-08-15,0.2,0.0,0.0,33,0,0.0,0 -2009-08-16,3.2,0.0,0.0,0,0,0.0,0 -2009-08-17,0.0,0.0,16.5,0,0,0.0,0 -2009-08-18,0.0,0.0,0.0,0,0,0.0,0 -2009-08-19,0.0,0.0,0.0,0,0,0.0,0 -2009-08-20,0.0,0.0,0.0,0,0,0.0,0 -2009-08-21,0.0,0.0,0.0,0,0,0.0,0 -2009-08-22,0.0,0.0,0.0,0,0,0.0,0 -2009-08-23,0.0,0.0,0.0,0,0,0.0,0 -2009-08-24,0.0,0.0,0.0,0,0,0.0,0 -2009-08-25,0.0,0.0,0.0,0,0,0.0,0 -2009-08-26,0.0,0.0,0.0,0,0,0.0,0 -2009-08-27,0.0,0.0,0.0,0,11,0.0,5 -2009-08-28,0.0,0.0,0.0,0,0,4.0,0 -2009-08-29,0.0,0.0,0.0,0,0,0.0,0 -2009-08-30,0.0,0.0,0.0,0,0,0.0,0 -2009-08-31,0.0,0.0,0.0,0,0,0.0,0 -2009-09-01,0.0,0.0,0.0,0,0,0.0,0 -2009-09-02,0.0,0.0,0.0,0,0,0.0,0 -2009-09-03,0.0,0.0,0.0,0,0,0.0,0 -2009-09-04,0.0,0.0,0.0,0,0,0.0,0 -2009-09-05,0.0,0.0,0.0,0,0,0.0,0 -2009-09-06,0.0,0.0,0.0,0,0,0.0,0 -2009-09-07,0.0,0.0,0.0,0,0,0.0,0 -2009-09-08,0.0,0.0,0.0,0,0,0.0,0 -2009-09-09,8.1,0.0,0.0,0,0,0.0,0 -2009-09-10,0.0,0.0,0.0,0,0,0.0,0 -2009-09-11,0.0,0.0,0.0,0,0,0.0,0 -2009-09-12,0.0,0.0,0.0,0,0,0.0,0 -2009-09-13,0.0,0.0,0.0,0,0,0.0,0 -2009-09-14,0.0,0.0,0.0,0,13,0.0,0 -2009-09-15,0.0,0.0,6.0,7,0,0.0,7 -2009-09-16,14.3,0.0,0.0,0,0,0.0,1 -2009-09-17,1.7,0.0,0.0,0,0,6.5,0 -2009-09-18,0.0,0.0,0.0,0,0,0.0,0 -2009-09-19,0.0,0.0,0.0,0,0,0.0,0 -2009-09-20,0.0,0.0,0.0,0,0,0.0,0 -2009-09-21,0.0,0.0,0.0,0,0,0.0,0 -2009-09-22,0.0,0.0,0.0,0,0,0.0,0 -2009-09-23,0.0,0.0,9.5,0,0,0.0,0 -2009-09-24,0.0,0.0,0.0,32,0,0.0,0 -2009-09-25,0.0,0.0,0.0,6,0,0.0,0 -2009-09-26,29.5,0.0,0.0,0,0,0.0,0 -2009-09-27,0.0,0.0,0.0,0,0,0.0,0 -2009-09-28,0.0,0.0,0.0,0,0,0.0,0 -2009-09-29,0.0,0.0,0.0,0,0,0.0,0 -2009-09-30,0.0,0.0,0.0,0,0,0.0,0 -2009-10-01,0.0,0.0,0.0,0,0,0.0,2 -2009-10-02,0.0,0.0,0.0,0,0,5.0,0 -2009-10-03,0.0,85.5,0.0,0,0,0.0,0 -2009-10-04,0.0,90.2,25.5,20,0,0.0,0 -2009-10-05,4.3,62.0,16.5,19,0,0.0,7 -2009-10-06,6.1,0.0,10.5,5,52,76.0,74 -2009-10-07,10.2,0.0,7.5,17,3,22.5,19 -2009-10-08,6.6,0.0,0.0,0,0,67.0,0 -2009-10-09,2.2,0.0,0.0,0,0,0.0,0 -2009-10-10,0.0,0.0,0.0,15,0,0.0,0 -2009-10-11,0.1,0.0,0.0,0,0,0.0,0 -2009-10-12,0.0,0.0,0.0,17,17,0.0,2 -2009-10-13,2.6,0.0,21.5,13,67,17.0,26 -2009-10-14,7.8,0.0,6.5,25,78,45.5,7 -2009-10-15,30.8,78.8,4.5,0,0,0.0,0 -2009-10-16,0.0,65.7,0.0,0,0,0.0,0 -2009-10-17,0.0,0.0,0.0,0,0,0.0,0 -2009-10-18,0.0,0.0,0.0,0,0,0.0,0 -2009-10-19,0.0,0.0,0.0,0,0,0.0,0 -2009-10-20,0.0,0.0,0.0,0,0,0.0,0 -2009-10-21,0.0,80.5,0.0,0,0,0.0,0 -2009-10-22,0.0,82.6,0.0,30,0,2.0,2 -2009-10-23,0.0,0.0,4.5,0,0,0.0,0 -2009-10-24,0.0,0.0,0.0,0,0,2.0,0 -2009-10-25,0.0,0.0,0.0,0,0,0.0,0 -2009-10-26,0.0,0.0,0.0,14,0,0.0,1 -2009-10-27,0.2,0.0,0.0,0,2,0.0,0 -2009-10-28,0.0,0.0,0.0,14,0,3.2,0 -2009-10-29,0.6,0.0,0.0,0,0,0.0,0 -2009-10-30,0.0,0.0,0.0,0,0,0.0,0 -2009-10-31,0.0,0.0,0.0,0,0,0.0,0 -2009-11-01,0.0,37.8,0.0,0,0,0.0,0 -2009-11-02,0.0,80.6,0.0,0,0,0.0,0 -2009-11-03,0.0,0.0,0.0,5,0,0.0,0 -2009-11-04,0.0,0.0,0.0,0,0,0.0,0 -2009-11-05,0.0,0.0,0.0,0,0,0.0,0 -2009-11-06,0.0,35.4,0.0,5,0,0.0,0 -2009-11-07,0.0,0.0,0.0,0,0,0.0,0 -2009-11-08,0.0,0.0,5.5,0,0,0.0,0 -2009-11-09,14.2,20.5,0.0,0,0,12.0,0 -2009-11-10,0.0,17.2,0.0,10,41,34.0,5 -2009-11-11,0.0,0.0,17.5,36,35,20.5,48 -2009-11-12,0.0,0.0,2.5,40,2,0.0,7 -2009-11-13,0.0,0.0,3.5,0,4,23.5,6 -2009-11-14,5.6,16.4,10.5,0,0,0.0,0 -2009-11-15,0.0,0.0,0.0,0,0,0.0,0 -2009-11-16,14.1,0.0,0.0,0,5,0.0,2 -2009-11-17,11.5,16.8,3.5,85,7,11.5,4 -2009-11-18,24.3,0.0,21.5,38,17,28.0,25 -2009-11-19,21.8,0.0,0.5,30,42,23.0,31 -2009-11-20,28.6,40.8,11.5,79,38,35.0,41 -2009-11-21,12.3,36.2,8.5,11,4,2.5,9 -2009-11-22,27.8,32.5,10.5,0,10,7.5,19 -2009-11-23,10.2,37.5,8.5,0,13,0.0,3 -2009-11-24,0.0,34.0,8.3,0,0,0.0,0 -2009-11-25,12.0,0.0,0.0,8,2,0.0,0 -2009-11-26,0.0,0.0,0.0,5,10,33.0,0 -2009-11-27,4.3,15.4,0.0,10,1,0.0,8 -2009-11-28,1.3,13.8,0.0,10,21,0.0,0 -2009-11-29,2.4,16.8,5.5,0,11,50.0,12 -2009-11-30,3.1,0.0,8.5,0,7,15.5,1 -2009-12-01,8.3,0.0,0.0,25,0,15.5,1 -2009-12-02,3.2,0.0,9.5,0,0,4.5,3 -2009-12-03,9.1,3.0,6.5,0,0,5.0,0 -2009-12-04,8.7,0.0,0.0,0,0,0.0,0 -2009-12-05,2.0,0.0,6.5,0,9,1.0,36 -2009-12-06,1.3,0.0,5.5,0,5,14.0,1 -2009-12-07,5.1,30.6,3.5,0,9,0.0,0 -2009-12-08,5.0,35.5,0.0,0,0,0.0,15 -2009-12-09,7.8,0.0,4.5,0,4,0.0,3 -2009-12-10,10.4,0.0,6.5,0,0,18.5,1 -2009-12-11,3.0,0.0,3.5,0,0,0.0,0 -2009-12-12,11.2,0.0,0.0,0,14,0.0,0 -2009-12-13,4.1,0.0,0.0,13,7,0.0,0 -2009-12-14,1.3,41.9,0.0,0,0,0.0,0 -2009-12-15,0.0,0.0,0.0,0,9,0.0,2 -2009-12-16,0.0,0.0,0.0,0,0,0.0,0 -2009-12-17,0.0,0.0,17.5,0,0,9.2,2 -2009-12-18,0.4,0.0,0.0,0,0,0.0,0 -2009-12-19,0.2,0.0,0.0,0,0,0.0,0 -2009-12-20,0.0,47.0,0.0,0,0,0.0,21 -2009-12-21,0.0,0.0,0.0,0,0,5.0,0 -2009-12-22,0.0,0.0,0.0,0,0,0.0,2 -2009-12-23,0.0,0.0,0.0,0,0,0.0,0 -2009-12-24,0.1,0.0,2.5,0,83,0.0,29 -2009-12-25,1.5,0.0,5.5,25,28,1.5,54 -2009-12-26,19.8,0.0,3.5,0,20,40.0,42 -2009-12-27,5.3,42.5,0.0,8,55,7.5,20 -2009-12-28,13.7,49.5,10.5,0,3,9.5,14 -2009-12-29,5.6,52.8,0.0,0,6,3.5,5 -2009-12-30,23.3,58.0,0.0,21,5,8.7,2 -2009-12-31,15.4,35.8,0.0,24,1,0.5,0 diff --git a/pyconfig.py b/pyconfig.py index 9b85d78..cd879e7 100644 --- a/pyconfig.py +++ b/pyconfig.py @@ -2,4 +2,3 @@ _CONFIG_PATH = "app_config.yml" appConfig = Box.from_yaml(filename=_CONFIG_PATH) -appConfig.DASH_THEME.THEME = "COSMO" diff --git a/pyfigure.py b/pyfigure.py index 528b011..bd6368e 100644 --- a/pyfigure.py +++ b/pyfigure.py @@ -33,32 +33,8 @@ def _generate_dict_watermark(n: int = 1, source=appConfig.TEMPLATE.WATERMARK_SOU ) -def figure_test_scatter(): - data = [{"x": np.arange(1, 11), "y": np.random.randint(0, 10, 10)}] - layout = go.Layout() - return go.Figure(data, layout) - - -def figure_test_heatmap(): - data = [[1, np.nan, 30, 50, 1], [20, 1, np.nan, 80, 30], [30, 60, np.nan, 5, 20]] - fig = px.imshow( - data, - labels=dict(x="Day of Week", y="Time of Day", color="Productivity"), - x=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], - y=["Morning", "Afternoon", "Evening"], - aspect="auto", - ) - return fig - - -def figure_test_heatmap2(): - data = go.Heatmap(z=[[1, 20, 30], [20, np.nan, 60], [30, 60, 1]]) - layout = go.Layout() - return go.Figure(data, layout) - - LABEL_GRAPH_RAINFALL = dict( - title="Rainfall Each Stations", + title="Rainfall Each Station", yaxis={"title": "Rainfall (mm)"}, xaxis={"title": "Date"}, legend={"title": "Stations"}, @@ -214,12 +190,12 @@ def figure_summary_maxsum( UPDATE_XAXES = { "ticktext": xticktext, "tickvals": xtickvals, - "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.2"), "gridwidth": 2, } UPDATE_YAXES = { - "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.2"), "gridwidth": 2, "fixedrange": True, "title": "Rainfall (mm)", @@ -361,7 +337,7 @@ def figure_summary_raindry( } UPDATE_YAXES = { - "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA, + "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.1"), "gridwidth": 2, "fixedrange": True, "title": "Days", @@ -392,7 +368,7 @@ def figure_summary_maxdate( rows: int = 3, cols: int = 1, subplot_titles: list[str] = None, - title: str = "Maximum Rainfall Occurrence", + title: str = "Maximum Rainfall Events", periods: list[str] = None, bubble_sizes: list[int] = None, ): @@ -447,7 +423,7 @@ def figure_summary_maxdate( legendgroup=station, legendgrouptitle_text=station, name=f"{period}", - hovertemplate="%{y}
%{customdata[0]}
%{customdata[1]} mm", + hovertemplate="%{y}
%{customdata[0]}
%{marker.size} mm", customdata=np.stack( [ series.index.strftime("%d %B %Y"), @@ -464,11 +440,12 @@ def figure_summary_maxdate( fig.update_layout( title_text=title, title_pad_b=20, - height=1000, + height=800, dragmode="zoom", legend_title="Stations", legend_itemsizing="constant", - hovermode="closest", + hovermode="x", + hoverdistance=50, ) def update_axis(fig, update, n, axis: str = "x"): @@ -483,6 +460,10 @@ def update_axis(fig, update, n, axis: str = "x"): UPDATE_XAXES = { "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.1"), "gridwidth": 2, + "showspikes": True, + "spikesnap": "cursor", + "spikemode": "across", + "spikethickness": 1, } UPDATE_YAXES = { "gridcolor": pytemplate._FONT_COLOR_RGB_ALPHA.replace("0.4", "0.1"), diff --git a/pylayout.py b/pylayout.py index 87a99c2..54a3958 100644 --- a/pylayout.py +++ b/pylayout.py @@ -4,6 +4,7 @@ import plotly.io as pio from pytemplate import hktemplate import pyfigure +import pylayoutfunc pio.templates.default = hktemplate @@ -33,22 +34,29 @@ ALERT_CONTRIBUTION = dbc.Alert( [ - "Tertarik untuk berkontribusi atau ikut bergabung untuk proyek seperti ini? Hubungi saya di ", + "Tertarik untuk berkontribusi? Ingin terlibat proyek hidrokit seperti ini? hubungi saya di ", html.A("hi@taruma.info", href="mailto:hi@taruma.info", className="text-bold"), - ". Atau kunjungi langsung repository proyek ini di ", + ". Langsung buat isu di ", html.A("Github", href=appConfig.GITHUB_LINK), - ".", + " jika memiliki pertanyaan/komentar/kritik/saran atau menemui kesalahan di proyek ini.", ] ) -HTML_ALERT = html.Div( - dbc.Container( - dbc.Row([dbc.Col(ALERT_CONTRIBUTION, width="auto")], justify="center"), - fluid=True, - ), - className="my-2", +HTML_ALERT_CONTRIBUTION = pylayoutfunc.create_HTML_alert(ALERT_CONTRIBUTION) + +ALERT_README = dbc.Alert( + [ + "Untuk petunjuk penggunaan bisa baca ", + html.A( + "README di github", + href="https://github.com/taruma/dash-hidrokit-rainfall#readme", + ), + ".", + ], + color="warning", ) +HTML_ALERT_README = pylayoutfunc.create_HTML_alert(ALERT_README, className="") DCC_UPLOAD = html.Div( dcc.Upload( @@ -135,7 +143,7 @@ dbc.Col( [ dbc.Button( - "Download Table As CSV", + "Download Table as CSV", color="primary", className="fs-4", id="button-download-csv", @@ -223,11 +231,9 @@ ) ], justify="center", - # class_name="m-4", ) ], fluid=True, - id="row-download", class_name="my-5", ) ) @@ -239,12 +245,69 @@ figure=pyfigure.figure_empty(), config={"staticPlot": True}, ), - id="tab-analyze", + id="tab-analysis", + ), + fluid=True, + ) +) + +HTML_ROW_BUTTON_VIZ_ANALYSIS = html.Div( + dbc.Container( + [ + dbc.Row( + [ + dbc.Col( + [ + dbc.Button( + [ + "Visualize it!", + ], + color="danger", + className="me-1 fs-4", + outline=True, + id="button-viz-analysis", + disabled=True, + ), + ], + width="auto", + ), + dbc.Col( + [ + dbc.Button( + "Download Results as CSV", + color="primary", + className="fs-4", + id="button-download-analysis-csv", + ), + dcc.Download(id="download-analysis-csv"), + ], + width="auto", + style={"visibility": "hidden"}, + id="row-button-download-analysis-csv", + ), + ], + justify="center", + ) + ], + fluid=True, + class_name="my-5", + ) +) + +HTML_ROW_GRAPH_ANALYSIS = html.Div( + dbc.Container( + dcc.Loading( + children=dcc.Graph( + figure=pyfigure.figure_empty(), + config={"staticPlot": True}, + ), + id="tab-graph-analysis", ), fluid=True, ) ) + _HTML_TROUBLESHOOT = html.Div( dbc.Container( [ @@ -256,10 +319,25 @@ ) ) +HTML_OTHER_PROJECTS = html.Div( + [ + html.Span("other dashboard:"), + html.A( + [ + html.Del("BMKG", style={"text-decoration-style": "double"}), + " 🛖 Explorer", + ], + href="https://github.com/taruma/dash-data-explorer", + style={"text-decoration": "none"}, + ), + ], + className="d-flex gap-2 justify-content-center my-2", +) + HTML_MADEBY = html.Div( dcc.Markdown( "Made with [Dash+Plotly](https://plotly.com).", - className="fs-4 text-center mt-5", + className="fs-4 text-center mt-2", ), ) diff --git a/pylayoutfunc.py b/pylayoutfunc.py index ecf4105..30b1232 100644 --- a/pylayoutfunc.py +++ b/pylayoutfunc.py @@ -111,3 +111,13 @@ def create_tabcard_graph_layout( tab.append(_tab) return dbc.Tabs(tab) + + +def create_HTML_alert(alert: dbc.Alert, className: str='my-2'): + return html.Div( + dbc.Container( + dbc.Row([dbc.Col(alert, width="auto")], justify="center"), + fluid=True, + ), + className=className, + ) From c11f585f6b0bc10e7dc579913512ba0f7427fde3 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Tue, 10 May 2022 15:21:52 +0700 Subject: [PATCH 09/12] =?UTF-8?q?=F0=9F=9B=A3=EF=B8=8F=20update=20to=20v1.?= =?UTF-8?q?0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app_config.yml b/app_config.yml index dbb046e..26ddac4 100644 --- a/app_config.yml +++ b/app_config.yml @@ -1,10 +1,10 @@ DASH_APP: APP_TITLE: Rainfall Data Explorer UPDATE_TITLE: Updating... - DEBUG: True + DEBUG: False DASH_THEME: - THEME: MORPH + THEME: SIMPLEX TEMPLATE: LOGO_SOURCE: https://raw.githubusercontent.com/hidrokit/static-assets/main/logo_0.4.0-v1.1/hidrokit-hidrokit/50x50square.png @@ -12,6 +12,6 @@ TEMPLATE: SHOW_LEGEND_INSIDE: False SHOW_RANGESELECTOR: False -VERSION: v0.1.0 +VERSION: v1.0.0 GITHUB_LINK: https://github.com/taruma/dash-hidrokit-rainfall GITHUB_REPO: taruma/dash-hidrokit-rainfall \ No newline at end of file From af39ef09c7dd015ec36e76a0f5d59f4ee8c46007 Mon Sep 17 00:00:00 2001 From: taruma sakti Date: Tue, 10 May 2022 15:26:04 +0700 Subject: [PATCH 10/12] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 03c3faf..e9ee6c5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ # dash-hidrokit-rainfall dashboard for rainfall data exploration + +![image](https://user-images.githubusercontent.com/1007910/167583978-b23aedef-bbd7-4b0f-8b3b-94c0d56868b6.png) + From f6c96e8181cb695dbd1b17db8a1144a8850654d5 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Tue, 10 May 2022 15:28:07 +0700 Subject: [PATCH 11/12] =?UTF-8?q?=F0=9F=91=93=20update=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 52752da..c8535be 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Taruma Sakti +Copyright (c) 2022 Taruma Sakti Megariansyah Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From c7387bd5311c4b088183b00f71662681bb5f19b3 Mon Sep 17 00:00:00 2001 From: Taruma Sakti Date: Tue, 10 May 2022 16:11:25 +0700 Subject: [PATCH 12/12] =?UTF-8?q?=F0=9F=93=96=20update=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e9ee6c5..3f98449 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,55 @@ -# dash-hidrokit-rainfall - dashboard for rainfall data exploration +# Dashboard Rainfall Data Explorer ![image](https://user-images.githubusercontent.com/1007910/167583978-b23aedef-bbd7-4b0f-8b3b-94c0d56868b6.png) +__Rainfall Data Explorer__ (`hkrainfall`) adalah _dashboard_ untuk mengeksplorasi data hujan di setiap stasiunnya dan membandingkannya baik secara numerik maupun visual. `hkrainfall` dibuat menggunakan teknologi [Dash + Plotly](https://plotly.com/) dengan bahasa pemrograman Python. Proyek `hkrainfall` bersifat _open-source_ dengan lisensi MIT. + +## Cara Menjalankan Dashboard (Lokal) + +Sangat dianjurkan untuk menjalankan dashboard ini menggunakan mesin lokal. + +- Buat _virtual environment_ menggunakan `environment.yml` (untuk conda) atau `requirements.txt` (untuk venv). +- Jalankan `app.py` di terminal. +- Buka alamat `http://127.0.0.1:8050/` di browser. + +## Cara Penggunaan + +Dashboard ini bisa membaca berkas berformat '.csv' dengan: + +- Kolom pertama merupakan tanggal dengan format yang dapat dibaca oleh fitur `parse_dates` yang tersedia di `pandas`. Direkomendasikan mengubahnya menjadi format `YYYY-MM-DD`. +- Kolom lainnya merupakan data hujan dengan header. +- Baris pertama akan dibaca sebagai header tabel, sehingga dianjurkan menambahkan label untuk setiap kolomnya. Gunakan label `DATE` untuk kolom tanggal yang akan digunakan sebagai index. + +Navigasi dashboard ini antara lain: + +- _Drag and Drop_ berkas atau pilih berkas pada tombol "Drag and Drop or Select Files". Klik "Use Example Data" jika ingin melihat demonstrasi dashboard ini. +- Jika prosesnya berhasil, akan muncul tabel dengan data yang di-_upload_ atau contoh data. Tabel ini _editable_ sehingga bisa menyesuaikan saat proses pengoreksian saat eksplorasi data. Bisa juga diubah nama tabelnya. Pastikan nama kolom berbeda dan nama kolom pertama (tanggal) selalu "DATE". +- Klik "Visualize Data" untuk melihat visualisasi data. Pada tahap ini, Anda bisa kembali ke tabel jika ingin melakukan pengoreksian data. Anda juga bisa melakukan filter pada setiap kolom untuk eksplorasi selanjutnya. +- Tabel yang telah diubah, bisa di-_download_ kembali dalam bentuk CSV. +- Setelah tabel sudah dikoreksi. Bisa dilanjutkan ke tahapan analisis data. Perlu diingat, data yang dianalisis sesuai dengan tampilan/informasi tabel terkini. Jadi, jika masih ada filter, maka analisis hanya dilakukan pada data yang telah terfilter. +- Klik "Analyze Data" untuk melakukan analisis data. Perlu diingat, proses ini akan memakan waktu jika memiliki dataset yang besar. Jadi, sangat disarankan menggunakan mesin lokal untuk proses ini. Karena yang dapat diakses di web hanya berupa demonstrasi saja dan menggunakan layanan gratis sehingga sangat terbatas kemampuannya. +- Analisis data terbagi menjadi tiga periode yaitu 2 periode (biweekly), setiap bulanan (monthly), dan tahunan (yearly). Sebagai catatan, biweekly itu dibagi berdasarkan 16 hari pertama kemudian sisa harinya pada setiap bulan. +- Analisis data yang dilakukan berupa: + - `days`: Jumlah hari pada setiap periodenya (16 hari untuk biweekly, 1 bulan untuk monthly, dan 1 tahun untuk yearly). + - `max`: Nilai maksimum pada setiap periode. + - `sum`: Total nilai pada setiap periode. + - `n_rain`: Jumlah hari hujan di setiap periode. + - `n_dry`: Jumlah hari kering di setiap periode. Catatan: Ini akan menghitung nilai `np.nan` sebagai hari kering. + - `max_date`: Tanggal kejadian hujan maksimum terjadi pada setiap periode. +- Tabel analisis tidak dapat diubah dan hanya sebagai penyedia informasi saja. +- Melihat tabel analisis rasanya cukup sulit untuk diceritakan atau diinterpretasikan, oleh karena itu disediakan tombol "Visualize it!" untuk melakuakn visualisasi tabel analisis. +- Selain melakukan visualisasi, tabel analisis juga dapat di-_download_ dengan mengklik tombol "Download Results as CSV". Perlu dicatat, `dataframe` tabel analisis menggunakan `MultiIndex` sehingga pada format CSV akan perlu dilakukan pengolahan lagi. +- Visualisasi dari tabel analisis berupa: + - Group Bar Chart untuk setiap periode dengan kolom `max` dan `sum`. Grafik ini bisa melihat secara langsung perbandingan nilai antar stasiun. + - Stack Bar Chart untuk setiap periode dengan kolom `n_rain` dan `n_dry`. Grafik ini bisa memberikan gambaran periode yang memiliki frekuensi hujan/kekeringan tinggi/rendah secara sekilas. + - Bubble Chart (Maximum Rainfall Events) memberikan gambaran besar terkait tanggal kejadian saat hujan maksimum terjadi di setiap stasiun. Ukuran lingkaran menunjukkan seberapa besar hujan maksimum yang terjadi. + +Navigasi dengan grafik interaktif plotly: + +- Pada setiap grafik plotly, dapat dilakukan interaksi langsung dengan grafik seperti mengatur stasiun/data mana saja yang ditampilkan, pembesaran pada periode tertentu. mengatur ukuran sumbu, dll. +- Sangat dianjurkan untuk mengeksplorasi sendiri mengenai _mode bar_ yang ada di kanan atas setiap grafik plotly. +- Setiap grafik bisa di-_download_ dalam bentuk `.png` untuk kepentingan menaruh di dokumen atau lainnya. + +## Catatan + +- Dashboard ini seharusnya bergantung pada paket hidrokit terutama pada modul `hidrokit.contrib.taruma.hk98` mengenai rekap data (tabel analisis). Akan tetapi ditemukan isu di hidrokit/hidrokit#219. Sehingga untuk sementara modul tersebut terpisah dengan dashboard ini.